HIGH 7.5

CVE-2026-50193: Jackson-Databind Denial-of-Service via Deeply Nested JSON

Jackson-databind, a widely-used Java library for converting JSON to objects and vice versa, has a denial-of-service vulnerability in versions 2.13.0 through 2.13.x. When a service uses the library to read deeply nested JSON structures (thousands of levels deep) and then serializes them back to text, an attacker can exhaust server resources by sending relatively small payloads—for example, 1000 nested arrays consume only 2 kilobytes but trigger expensive processing. The issue is fixed in version 2.14.0 and later.

Source data · NVD / CISA · public domain

CVSS
3.1 · 7.5 HIGH · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weaknesses (CWE)
CWE-400
Affected products
1 configuration(s)
Published / Modified
2026-06-23 / 2026-06-27

NVD description (verbatim)

jackson-databind contains the general-purpose data-binding functionality and tree-model for Jackson Data Processor. From 2.13.0 until 2.14.0, a potential Denial-of-Service exists when attacker sends deeply nested JSON if (and only if) the service reads deeply nested (1000s of levels) JSON as JsonNode (ObjectMapper.readTree()) and writes out same (or modifided) node using JsonNode.toString(). This can consume significant amount of resources with concurrent relatively small requests (1000 nested arrays is 2kB). This vulnerability is fixed in 2.14.0.

3 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

CVE-2026-50193 is a resource exhaustion vulnerability (CWE-400) in jackson-databind versions 2.13.0 to 2.13.x. The vulnerability manifests when an application calls ObjectMapper.readTree() to parse a JSON structure with extreme nesting depth, then calls JsonNode.toString() to serialize the result. The tree model's traversal during serialization consumes disproportionate CPU and memory relative to payload size because each nesting level incurs overhead. An attacker exploiting this does not require authentication, special privileges, or user interaction. The vector is entirely network-based and does not require complexity in attack setup, yielding a CVSS 3.1 score of 7.5 (HIGH). Version 2.14.0 resolves the issue through improved handling of deeply nested structures.

Business impact

Organizations using jackson-databind 2.13.x in production services face availability risk if they process untrusted JSON input. A single attacker or coordinated requests can degrade or exhaust application responsiveness, potentially impacting downstream services, APIs, and user experience. The low barrier to exploitation—small requests, no authentication—means public-facing applications are at particular risk. Financial services, cloud platforms, and integration hubs that parse JSON at scale are especially vulnerable. Recovery requires patching or architectural mitigation, both of which demand coordination and testing.

Affected systems

jackson-databind versions 2.13.0 through 2.13.x are affected. Version 2.14.0 and later contain the fix. Any Java application using the affected versions to read and serialize untrusted JSON (especially from APIs, message queues, or user input) is at risk. The vulnerability is NOT present in 2.12.x and earlier, nor in 2.14.0+. Organizations should audit their dependency trees for jackson-databind usage and version.

Exploitability

This vulnerability is easily exploitable by a remote, unauthenticated attacker. No user interaction, special configuration, or exploit code is required—a simple HTTP POST or API call with a deeply nested JSON payload will trigger the vulnerability. The attack surface is broad for any service accepting JSON input. Proof-of-concept generation is trivial (nested arrays or objects). The primary constraint is application-level: the service must explicitly use ObjectMapper.readTree() and serialize the result, which is a common pattern in REST APIs and data processing pipelines. No public exploit code is known to be actively circulating, but the low complexity means rapid weaponization is possible.

Remediation

Upgrade jackson-databind to version 2.14.0 or later. This is the definitive fix. Organizations unable to upgrade immediately should implement input validation to reject JSON with nesting depth exceeding a reasonable threshold (e.g., 100 levels) before passing to jackson-databind. Alternatively, disable direct ObjectMapper.readTree() processing of untrusted input and use safer alternatives like streaming parsers that do not construct the full tree in memory. Monitor for spikes in CPU or memory consumption during JSON processing as a detection signal. Rate limiting on JSON payload size and parsing operations provides defense-in-depth.

Patch guidance

Apply jackson-databind version 2.14.0 or later as soon as feasible. If your application depends on jackson-databind transitively (e.g., via Spring Boot, Quarkus, or other frameworks), verify that your framework version or Spring-boot BOM also upgrades the transitive jackson-databind dependency. Test patching in a staging environment first, particularly if you have custom Jackson configuration or serialization logic. Most upgrades within the 2.14+ line are backward-compatible for common use cases, but review release notes for any breaking changes specific to your version chain. Prioritize patching for services that accept JSON from untrusted sources or the internet.

Detection guidance

Monitor application logs and metrics for sudden increases in CPU usage, garbage collection activity, or memory consumption that correlate with JSON parsing. Implement request-level logging that captures payload size and nesting depth before passing to jackson-databind. Set alerts for outlier values—e.g., JSON payloads larger than expected or unusually deep nesting. Network-based detection is difficult without decoding JSON; focus on behavioral signals (high CPU, thread exhaustion, slow API responses). In production, correlate spikes with access logs to identify source IPs or API endpoints being targeted. If your application supports it, enable Jackson's feature flags to log warnings on deep nesting during deserialization.

Why prioritize this

This vulnerability merits HIGH priority for any organization running jackson-databind 2.13.x in production, particularly for internet-facing or API-driven services. The ease of exploitation, lack of preconditions (no authentication, no user action), and significant resource exhaustion impact (HIGH severity, CVSS 7.5) make it an attractive target for attackers seeking to disrupt availability. It is not yet listed on the CISA KEV catalog, but given the low barrier to weaponization, rapid adoption among threat actors is plausible. Patching is straightforward and low-risk for most deployments. Delay increases exposure window.

Risk score, explained

The CVSS 3.1 score of 7.5 (HIGH) reflects a network-accessible, unauthenticated denial-of-service attack with no user interaction required. The attack vector is low complexity and affects availability without requiring special privileges or modifying data. The score appropriately captures the operational risk: an attacker can reliably degrade service responsiveness with minimal reconnaissance. Context-specific risk is higher for public APIs, critical infrastructure, and SaaS platforms with shared computational resources where a single compromised tenant or attacker can affect others.

Frequently asked questions

We use Spring Boot. Does this affect us?

Yes, if your Spring Boot version depends on jackson-databind 2.13.x. Spring Boot bundles jackson-databind; you can check your effective version in your Maven dependency tree (mvn dependency:tree) or Gradle equivalent. Spring Boot 3.0.0 and later use jackson-databind 2.14.0+, so upgrades to those versions address the vulnerability. If you are on an older Spring Boot release, upgrade both Spring Boot and jackson-databind, or override jackson-databind in your pom.xml or build.gradle explicitly to 2.14.0+.

What if we cannot upgrade immediately?

Implement input validation to reject JSON payloads with excessive nesting depth. Most business JSON is shallow (< 20 levels); rejecting anything deeper than 100 levels will stop most attacks. Use a streaming JSON parser (e.g., Jackson's JsonFactory.createParser()) instead of readTree() if possible, as it does not hold the full tree in memory. Deploy rate limiting on JSON-consuming endpoints and monitor for resource anomalies. These are temporary measures; plan an upgrade within your next maintenance window.

Is this affecting us in 2.14.0 or later?

No. The vulnerability is fixed in 2.14.0 and all later versions. If your jackson-databind version is 2.14.0 or higher, you are not affected by CVE-2026-50193.

Can we detect exploitation in our logs?

Look for patterns: requests with unusually large JSON payloads, API response times spiking, or CPU/memory consumption climbing during JSON processing. If you log request metadata, track nesting depth; repeated requests with very deep JSON from the same IP or user are suspicious. Application Performance Monitoring (APM) tools often flag thread pool exhaustion or GC pauses. Network-based detection is hard without decoding JSON, so focus on behavioral and log-based signals.

This analysis is provided for informational purposes and reflects the vulnerability as described in official sources as of the publication date. Version numbers, patch guidance, and affected product details should be verified against the vendor advisory and your specific deployment environment. Security decisions should incorporate your organization's risk tolerance, asset criticality, and operational constraints. SEC.co does not guarantee exploit availability, real-world weaponization timelines, or the effectiveness of mitigations in all environments. Always test patches in non-production environments before deploying to critical systems. Source: NVD (public-domain), retrieved 2026-07-29. Analysis generated by SEC.co (claude-haiku-4-5).