GHSA-mhm7-754m-9p8w jackson-databind: `@JsonView` bypass for creator properties with `@JsonTypeInfo(include=As.EXTERNAL_PROPERTY)`
SummaryIn `BeanDeserializer.deserializeUsingPropertyBasedWithExternalTypeId`, the active-view (`@JsonView`) filter was applied only to the regular bean-property branch; the creator-property branch performed no `creatorProp.visibleInView(activeView)` check. A constructor parameter annotated with both `@JsonView(RestrictedView.class)` and `@JsonTypeInfo(use=Id.NAME,
  include=As.EXTERNAL_PROPERTY)` is populated from attacker JSON even when a more restrictive view is active.This is a patch gap. GHSA-5hh8 (CVE-2026-54517) and GHSA-rcqc (CVE-2026-54518) descriptions cover only the main property-based path and the unwrapped-creator path respectively; the external-type-id creator path was fixed on the 3.x line via #6004 ("Extend #5969/#5971 fixes to ... external-type-id case in regular BeanDeserializer", commit 7dc7a17, 2026-05-22) but
  **the fix was never backported to 2.21 or 2.18**. Users on 2.21.4 and 2.18.8 who upgraded per the published advisories remain vulnerable to the same `@JsonView` bypass technique via a different code path.Vulnerable Code PathFile: `com/fasterxml/jackson/databind/deser/BeanDeserializer.java`
Method: `deserializeUsingPropertyBasedWithExternalTypeId`On 2.21.4 (and 2.18.8), the creator-property branch (around line 1125-1158) checks `creatorProp.isInjectionOnly()` and hands off to `ext.handlePropertyValue(...)` / `buffer.assignParameter(...)` without ever consulting `visibleInView(activeView)`:On 3.1.4, the same branch contains the additional guard (commit 7dc7a17):The 2.21 and 2.18 backport PRs (#6005 and #6003) only backported the main-path fixes from #5969/#5971; the external-type-id fix from #6004 was not backported. The maintainer closed #6005
  with "got changes merged forward, looks like it's all covered now", but the forward-merge did not include the ExtTypeId creator branch.Proof of ConceptCompiles and runs against jackson-databind 2.21.4:A control case that removes include = As.EXTERNAL_PROPERTY (forcing the normal property-based path) correctly returns asset = null, confirming the bypass is specific to the ExternalTypeId
  code path and not a misconfiguration.ImpactView-restricted (e.g. admin-only) creator properties can be populated from untrusted input where @JsonView is used as a write-side authorization boundary. Typical victims are Spring Boot
  REST controllers that use @JsonView(PublicView.class) on the request body to whitelist user-settable fields — an attacker can inject the restricted creator parameter (including choosing
  the polymorphic subtype via the sibling kind/type-id property) by combining it with a polymorphic @JsonTypeInfo(EXTERNAL_PROPERTY) annotation on the same field.CWE-863 (Incorrect Authorization)Same impact class as CVE-2026-54517 / CVE-2026-54518No RCE, no DoS — this is an access-control / mass-assignment bypassTrigger ConditionsDeveloper code must combine (no opt-in user configuration required):Property-based @JsonCreator on the outer typeA creator parameter annotated with @JsonView(RestrictedView.class)The same parameter annotated with @JsonTypeInfo(use=Id.NAME, include=As.EXTERNAL_PROPERTY, property="...")
CVSS v3.1 score: 6.5