CVE-2026-59888
Java vulnerability analysis and mitigation

Overview

CVE-2026-59888 is an authorization bypass vulnerability in FasterXML jackson-databind where @JsonIgnore annotations on Java Record properties can be circumvented when a PropertyNamingStrategy is configured. Discovered by Omkhar Arasaratnam (@omkhar) and published on July 10, 2026, it affects com.fasterxml.jackson.core:jackson-databind versions >= 2.15.0 < 2.18.8, >= 2.19.0 < 2.21.4, and tools.jackson.core:jackson-databind versions >= 3.0.0 < 3.1.4. It carries a CVSS v3.1 base score of 6.5 (Medium) (Github Advisory, Feedly).

Technical details

The root cause (CWE-915: Improperly Controlled Modification of Dynamically-Determined Object Attributes) lies in the ordering of operations within POJOPropertiesCollector: _removeUnwantedIgnorals() registers a @JsonIgnore-annotated Record component under its original implicit name into _ignoredPropertyNames before _renameUsing() applies the configured PropertyNamingStrategy. After renaming, _ignoredPropertyNames still holds only the pre-rename key, so _ignorableProps is built from a stale entry. Consequently, IgnorePropertiesUtil.shouldIgnore() does not recognize the renamed JSON key (e.g., internal_role for a field named internalRole with SnakeCaseStrategy) as ignored, and the value is bound to the Record's constructor parameter. The fix, applied in PR #5974 (commit baa2cdf for 3.x, backport c7c6783 for 2.18.x), adds a check inside _renameUsing() to propagate the ignore status to the renamed key via _collectIgnorals(rename) (Github Advisory, Fix Commit).

Impact

An unauthenticated remote attacker can send a crafted JSON payload containing the naming-strategy-renamed key of a @JsonIgnore-annotated Record field, causing jackson-databind to populate that field during deserialization despite the ignore annotation. This allows unauthorized modification of fields intended to be protected from external input — such as internal roles, privilege flags, or other sensitive constructor parameters — leading to low-severity confidentiality and integrity impacts. Availability is not affected, and the scope is unchanged, but the practical risk depends heavily on what data the bypassed field controls in the target application (Github Advisory, Feedly).

Exploitation steps

  1. Identify target: Locate a Java application that uses jackson-databind in an affected version range and deserializes JSON into Java Records annotated with both @JsonNaming (or a globally configured PropertyNamingStrategy) and @JsonIgnore on one or more Record components.
  2. Determine the renamed key: Identify the @JsonIgnore-annotated Record field name (e.g., internalRole) and compute its renamed form under the configured strategy (e.g., SnakeCaseStrategyinternal_role).
  3. Craft the payload: Construct a JSON payload that includes the renamed key with a desired value alongside legitimate fields, e.g., {"username":"alice","internal_role":"ADMIN"}.
  4. Send the request: Submit the crafted JSON to the application endpoint that deserializes into the vulnerable Record type (e.g., via HTTP POST with Content-Type: application/json).
  5. Achieve bypass: Jackson-databind, due to the stale ignore-list, passes IgnorePropertiesUtil.shouldIgnore() for the renamed key and assigns the attacker-controlled value to the Record constructor parameter, bypassing the @JsonIgnore restriction (Github Advisory, Fix Commit).

Indicators of compromise

  • Network: Unexpected JSON payloads containing naming-strategy-renamed keys (e.g., snake_case variants) for fields that should never appear in client-supplied input; anomalous POST requests to deserialization endpoints with extra JSON keys not part of the documented API contract.
  • Logs: Application logs showing unexpected values in @JsonIgnore-annotated Record fields (e.g., privilege escalation flags set to non-default values); deserialization audit logs recording unknown or unexpected field assignments.
  • Application Behavior: Privilege escalation or unexpected role assignments in application logic that relies on @JsonIgnore-protected Record fields; business logic anomalies where internal-only fields appear to be externally controlled.

Mitigation and workarounds

Upgrade jackson-databind to one of the patched versions: 2.18.8, 2.21.4 (for the 2.x line), or 3.1.4 (for the 3.x line). If immediate patching is not possible, review all Java Record types that use a PropertyNamingStrategy and @JsonIgnore together, and consider adding explicit input validation or replacing @JsonIgnore with alternative access controls (e.g., custom deserializers or DTO patterns that do not expose sensitive fields). Apache Spark has already addressed this by upgrading to Jackson 2.21.4 (Github Advisory, Fix PR).

Community reactions

The vulnerability was reported by Omkhar Arasaratnam (@omkhar) and rated as "minor" by the jackson-databind maintainer (cowtowncoder) but "Moderate" by the reporter; the GitHub Advisory Database assigned it Moderate severity. OpenSUSE issued a security announcement covering this CVE as part of package updates, and Tenable published Nessus detection plugins (IDs 327129 and 328924). No significant broader media coverage or notable social media discussion has been observed beyond standard vulnerability tracking feeds (Github Advisory, Feedly).

Additional resources


SourceThis report was generated using AI

Related Java vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

GHSA-p279-2cqp-84jgCRITICAL9.6
  • Java logoJava
  • org.openidentityplatform.opendj:opendj-server-legacy
NoYesJul 24, 2026
GHSA-fp43-vj7g-pg92HIGH7.5
  • Java logoJava
  • org.omnifaces:omnifaces
NoYesJul 24, 2026
GHSA-7ppr-r889-mcf2HIGH7.5
  • Java logoJava
  • org.http4s:http4s-blaze-server_2.12
NoYesJul 24, 2026
GHSA-mhvj-jhpq-885vHIGH7.4
  • Java logoJava
  • org.http4s:http4s-blaze-server_2.13
NoYesJul 24, 2026
GHSA-46q4-43ph-c6frHIGH7.4
  • Java logoJava
  • org.http4s:blaze-http_2.12
NoYesJul 24, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management