CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-59889

CVE-2026-59889: @JsonView Bypass for @JsonUnwrapped Properties during Deserialization in jackson-databind

Alon Barad
Alon Barad
Software Engineer

Jul 21, 2026·9 min read·109 visits

Executive Summary (TL;DR)

A lack of active view validation in jackson-databind's UnwrappedPropertyHandler allows attackers to bypass @JsonView restrictions on @JsonUnwrapped properties, enabling mass assignment vulnerabilities.

An authorization bypass vulnerability exists in FasterXML jackson-databind versions 2.18.x up to 2.18.8 (and other release branches) where the active @JsonView constraint is bypassed during the deserialization of properties marked with @JsonUnwrapped. This allows remote, authenticated attackers to alter restricted administrative properties on server-side objects by injecting flattened parameters into standard JSON payloads.

Vulnerability Overview

FasterXML jackson-databind is the default and most widely utilized data-binding and serialization library within the Java ecosystem, heavily integrated into framework structures such as Spring Boot, Quarkus, and Micronaut. In web services, incoming HTTP request payloads are typically processed using Jackson's tree-model or bean deserializers to bind JSON properties directly onto Java classes. To prevent unauthorized clients from updating sensitive parameters, developers leverage Jackson's @JsonView annotations to dynamically constrain the incoming data fields based on context-specific authorization views (e.g., allowing general users to mutate only standard profile fields while reserving configuration fields for administrative views).

However, a severe logical bypass (tracked as CVE-2026-59889 or GHSA-5gvw-p9qm-jgwh) was identified in the deserialization handling of unwrapped properties. The vulnerability resides specifically within the interaction between @JsonView and the @JsonUnwrapped annotation, which signals to Jackson that a nested object should be flattened and mapped directly alongside parent-level keys in the input payload. During the parsing stage, jackson-databind fails to execute validation constraints on the nested fields if the unwrapped container itself is marked with an active, restrictive view.

This security-sensitive incorrect authorization flaw (CWE-863) allows an authenticated attacker to inject arbitrary administrative fields into flattened JSON payloads. Because the deserialization layer fails to enforce the configured view filters during the processing of unwrapped properties, downstream applications process these malicious, privileged fields as authenticated modifications. The result is a classic parameter injection or Mass Assignment vulnerability, allowing unauthorized status modifications, privilege escalations, or state corruptions depending on the design of the target enterprise bean.

Root Cause Analysis

To comprehend the root cause of CVE-2026-59889, it is necessary to examine how the Jackson parsing engine handles deferred properties versus standard properties. During standard bean deserialization, Jackson processes properties sequentially, validating each field against the deserializer's configured active view. When a property is encountered, the deserializer invokes SettableBeanProperty.visibleInView(activeView) before attempting to bind the token value, thereby discarding elements that are not designated for the active view context.

This predictable flow is disrupted when the parser encounters a field decorated with @JsonUnwrapped. Because unwrapped properties are structurally flattened into the parent JSON object rather than nested within their own distinct block, Jackson cannot deserialize them inline. To resolve this structural discrepancy, the parser must read the incoming tokens, buffer them using a TokenBuffer instance, and deferredly process the unwrapped container object after the main bean context has been established.

The logic responsible for orchestrating this deferred replay sequence is defined in the class com.fasterxml.jackson.databind.deser.impl.UnwrappedPropertyHandler within its core method processUnwrapped(). In vulnerable releases of jackson-databind, the implementation of processUnwrapped() looped over the collection of properties associated with the unwrapped container and immediately invoked prop.deserializeAndSet(p, ctxt, bean) on each element using the replayed parser context. Crucially, the engine proceeded to parse and set these values without applying any view validation checks.

Because the code omitted calls to prop.visibleInView(ctxt.getActiveView()) inside this specific replay loop, the active deserialization view constraint was entirely bypassed. If an attacker transmitted a JSON payload containing properties that belonged exclusively to an elevated view, the unwrapped handler read them from the buffer and bound them to the target instance anyway. This omission created a direct pathway for unauthorized property modifications because the logical separation between public-facing and administrative-only properties was completely ignored during token playback.

Code Analysis

A close inspection of the vulnerable implementation of UnwrappedPropertyHandler.processUnwrapped() highlights the precise code-level omission. The loop responsible for reconstructing the unwrapped object was constructed to prioritize speed and structural reconstruction, neglecting authorization-state checks. As shown below, the original logic proceeded to deserialize the parsed stream elements immediately:

// Vulnerable logic in UnwrappedPropertyHandler.processUnwrapped
public Object processUnwrapped(JsonParser originalParser, DeserializationContext ctxt,
        Object bean, TokenBuffer buffered)
    throws IOException
{
    for (int i = 0, len = _properties.size(); i < len; ++i) {
        SettableBeanProperty prop = _properties.get(i);
        JsonParser p = buffered.asParser(originalParser.streamReadConstraints());
        p.nextToken();
        prop.deserializeAndSet(p, ctxt, bean);
    }
    // ...
}

The fix, introduced by developer PJ Fanning under commit d627a8a86fcb062429282f79f3f256f181ed2c7b, resolved this omission by extracting the active view from the deserialization context and inserting an explicit validation gate before token replay occurs. The modified code sequence is structured as follows:

// Patched logic in UnwrappedPropertyHandler.processUnwrapped
@@ -56,8 +56,14 @@ public Object processUnwrapped(JsonParser originalParser, DeserializationContext
             Object bean, TokenBuffer buffered)
         throws IOException
     {
+        // [databind#6060]: honor active @JsonView -- skip Field/Setter properties not
+        // visible in the active view rather than populating them from buffered input.
+        final Class<?> activeView = ctxt.getActiveView();
         for (int i = 0, len = _properties.size(); i < len; ++i) {
             SettableBeanProperty prop = _properties.get(i);
+            if ((activeView != null) && !prop.visibleInView(activeView)) {
+                continue;
+            }
             JsonParser p = buffered.asParser(originalParser.streamReadConstraints());
             p.nextToken();
             prop.deserializeAndSet(p, ctxt, bean);

This defensive gate successfully remediates the vulnerability. By validating the property's visibility against the active view (prop.visibleInView(activeView)) inside the loop, the handler now correctly skips unauthorized fields, ensuring they are ignored during the replay phase. While this fix provides complete logical parity with standard property parsing, security teams must note that the validation remains dependent on developers correctly configuring and applying @JsonView annotations across their data models; any omission in the schema design still leaves fields exposed.

Exploitation Methodology

To exploit CVE-2026-59889, an attacker must identify an application endpoint that relies on jackson-databind for deserializing a JSON payload into an object containing a @JsonUnwrapped container, where specific nested fields are restricted via @JsonView. The attacker does not require high-level administrative privileges; they only require the ability to interact with a public-facing or low-privilege endpoint that accepts incoming JSON payloads, such as a registration or profile update route.

The attack vector exploits the flattening behavior of @JsonUnwrapped. In a normal interaction, the client submits a JSON structure containing only public fields. In an attack scenario, the threat actor craftily appends restricted administrative fields alongside the standard parameters at the root level of the JSON payload. An example payload structure is illustrated below:

{
  "email": "attacker@example.com",
  "password": "P@ssword123",
  "role": "ADMIN",
  "approved": true,
  "creditBalance": 1000000
}

When this payload is submitted to the server, the application's controller initializes Jackson's ObjectReader configured to enforce PublicView.class. The deserializer parses email and password correctly. However, when it encounters the unwrapped fields (role, approved, creditBalance), it fails to discard them immediately. Instead, it places them in the token buffer. When processUnwrapped() is reached, the handler reads these elevated values from the buffer, bypasses the view restrictions entirely, and sets them directly on the backend bean. The resulting server-side object represents an unauthorized state escalation, granting the attacker administrative capabilities.

Impact Assessment

The security impact of CVE-2026-59889 is defined primarily by the context of the downstream application using the vulnerable library. Because the library fails to restrict incoming data fields based on configured authorization boundaries, the vulnerability results in a classic Mass Assignment or Parameter Binding bypass. If an application delegates access control decisions to fields stored within an unwrapped container (such as roles, account statuses, permissions, or system flags), an attacker can achieve complete privilege escalation within the context of that application.

The Common Vulnerability Scoring System (CVSS) v3.1 base score is assessed at 6.5 (Medium Severity). The vulnerability vector is defined as CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N. The low attack complexity, network accessibility, and lack of required user interaction make this flaw highly reliable to exploit once a vulnerable endpoint is identified. However, because the vulnerability modifies application state (Integrity: High) without directly exposing existing backend data (Confidentiality: None) or disrupting application uptime (Availability: None), the overall impact metrics are constrained to Integrity compromise.

While this vulnerability presents a significant threat to internal business logic, its exploitation is highly context-dependent, meaning an attacker must explicitly understand the targeted application's class definitions and JSON properties to construct a viable exploit. This specificity is reflected in its current low EPSS score (0.00416, representing a 0.42% probability of wild exploitation in the next 30 days) and its absence from CISA's Known Exploited Vulnerabilities (KEV) list. Nevertheless, for organizations utilizing microservices architecture with rich, flattened domain models, this bypass represents a direct failure of validation boundaries.

Remediation & Defensive Strategies

Remediating CVE-2026-59889 requires a defense-in-depth approach, combining immediate library updates with robust architectural patterns. The primary and most direct remediation path is upgrading the jackson-databind dependency to a patched version. Development teams should systematically verify their dependency trees and update to versions 2.18.9, 2.21.5, 2.22.1, 3.1.5, or 3.2.1 depending on their current major release track.

For enterprise environments where immediate third-party dependency updates are constrained by change management policies, structural workarounds should be deployed to eliminate the reliance on client-side view filtering. The most effective architectural pattern to mitigate this class of vulnerability is the separation of public-facing Data Transfer Objects (DTOs) from internal domain entities. Instead of deserializing client payloads directly into rich domain classes and attempting to sanitize fields using @JsonView, applications should deserialize inputs into highly restricted, public-only DTOs that lack any administrative fields entirely.

// Recommended DTO pattern separating public inputs from domain models
public class RegistrationRequest {
    public String email;
    public String password;
    // No administrative or unwrapped flags are present in this object schema
}

Once the input is validated and bound to the restricted DTO, developers should explicitly copy allowed values onto the database entity or domain model within the service layer. By decoupling the API request representation from the database schema, organizations completely remove the mass assignment attack vector. In addition, organizations should leverage Static Application Security Testing (SAST) tools to flag any concurrent usage of @JsonUnwrapped and @JsonView on sensitive fields, forcing code reviewers to audit the associated authorization models before deployment.

Fix Analysis (1)

Technical Appendix

CVSS Score
6.5/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
EPSS Probability
0.42%
Top 66% most exploited

Affected Systems

FasterXML jackson-databind

Affected Versions Detail

Product
Affected Versions
Fixed Version
jackson-databind
FasterXML
>= 2.18.0, < 2.18.92.18.9
jackson-databind
FasterXML
>= 2.21.0, < 2.21.52.21.5
jackson-databind
FasterXML
>= 2.22.0, < 2.22.12.22.1
jackson-databind
FasterXML
>= 3.0.0, < 3.1.53.1.5
jackson-databind
FasterXML
>= 3.2.0, < 3.2.13.2.1
AttributeDetail
CWE IDCWE-863 (Incorrect Authorization)
Attack VectorNetwork (AV:N)
CVSS Severity6.5 Medium
EPSS Score0.00416
ImpactIntegrity: High (I:H)
Exploit Statuspoc
KEV StatusNot listed in CISA KEV

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
T1190Exploit Public-Facing Application
Initial Access
CWE-863
Incorrect Authorization

The software performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly perform the check, allowing attackers to bypass intended security controls.

Known Exploits & Detection

GitHubThe regression unit test 'UnwrappedViewBypass6060Test' published in the Jackson repository serves as the functional proof of concept.

Vulnerability Timeline

Fix commit d627a8a authored by PJ Fanning in FasterXML/jackson-databind repository
2026-06-27
Vulnerability details published in GitHub Security Advisory GHSA-5gvw-p9qm-jgwh
2026-07-14
National Vulnerability Database (NVD) publishes CVE-2026-59889
2026-07-14
Official CVSS vector and affected version matrices finalized
2026-07-16

References & Sources

  • [1]GitHub Security Advisory: jackson-databind Vulnerability
  • [2]Jackson Issue 6060: @JsonView bypassed for @JsonUnwrapped properties
  • [3]GitHub Pull Request: Fix for @JsonView bypass on @JsonUnwrapped
  • [4]GitHub Fix Commit
  • [5]NVD - CVE-2026-59889 Detail
  • [6]CVE Official Record

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•9 minutes ago•CVE-2026-53653
8.7

CVE-2026-53653: Unauthenticated Denial of Service via Unbounded Image Derivative Dimensions in Grav CMS

Grav CMS prior to version 1.7.53 and 2.0.0-rc.8 is vulnerable to an unauthenticated remote denial of service (DoS) vulnerability. By supplying crafted query parameters with extremely large dimensions to image assets, remote unauthenticated attackers can force the server to allocate massive amounts of system memory, leading to kernel Out-Of-Memory (OOM) termination of web worker processes.

Amit Schendel
Amit Schendel
0 views•7 min read
•about 1 hour ago•CVE-2026-53657
8.2

CVE-2026-53657: Privilege Escalation via Overly Permissive Unix Domain Socket in Lima Guest Agent

CVE-2026-53657 is a local privilege escalation vulnerability in Lima (lima-vm/lima) affecting versions prior to 2.1.3 when configured with the QEMU driver. The guest agent daemon, running as root, creates its communication socket `/run/lima-guestagent.sock` with world-writable permissions (0777). This allows unprivileged local users to command the agent to establish arbitrary tunnels, including to privileged local UNIX sockets (like D-Bus). Because the target daemon authenticates the incoming connection using the credentials of the root-owned guest agent (via SO_PEERCRED), unprivileged users can perform root operations, resulting in complete guest VM compromise.

Amit Schendel
Amit Schendel
2 views•9 min read
•about 2 hours ago•CVE-2026-10740
5.3

CVE-2026-10740: Denial of Service in s2n-quic CryptoStream Reassembly

An unauthenticated Denial of Service vulnerability exists in the s2n-quic library's CryptoStream reassembler due to a lack of buffer limits on out-of-order cryptographic frames. An attacker can transmit a crafted CRYPTO frame with an extremely high offset and nominal payload, forcing the receiver to execute unbounded memory allocations and causing service crashes.

Amit Schendel
Amit Schendel
3 views•7 min read
•about 3 hours ago•CVE-2026-55153
7.1

CVE-2026-55153: JNDI Injection and Deserialization Gadget Abuse in mchange-commons-java

A JNDI Injection and Deserialization Gadget vulnerability exists in mchange-commons-java prior to version 0.6.0. The com.mchange.v2.naming.JavaBeanObjectFactory component permits arbitrary class instantiation and setter invocation, allowing attackers to perform Server-Side Request Forgery (SSRF) and remote class loading.

Alon Barad
Alon Barad
6 views•5 min read
•about 4 hours ago•GHSA-8RW6-P7M8-63JP
6.5

GHSA-8RW6-P7M8-63JP: Array Element-Level SELECT Permissions Leak in SurrealDB

SurrealDB versions supporting element-level SELECT permissions on arrays are vulnerable to a logical authorization bypass. Due to an index-shifting error during array filtration, restricted elements can skip permission checks and leak to unauthorized record users.

Alon Barad
Alon Barad
5 views•6 min read
•1 day ago•CVE-2026-12243
7.5

CVE-2026-12243: Incomplete Path Traversal Validation and Percent-Encoding Bypass in NLTK

CVE-2026-12243 is a path traversal vulnerability in the Natural Language Toolkit (NLTK) version 3.9.4. The flaw exists because the input validation routine fails to account for percent-encoded directory traversal sequences like '..%2f' before passing them to urllib.request.url2pathname(), which decodes them into active traversal sequences.

Amit Schendel
Amit Schendel
5 views•8 min read