CVE-2026-50193
NoneCVSS
—
EPSS
0.6%
Published
Jun 23, 2026
CISA due date
—
Cloudanix analysis
A small specially crafted JSON request can overload some Java applications and make them slow or unavailable.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- Library
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Medium
What it actually does
This vulnerability is a denial-of-service condition in jackson-databind versions 2.13.x before 2.14.0. It is only reachable when an application parses attacker-controlled, deeply nested JSON into a JsonNode tree using ObjectMapper.readTree() and then serializes the same or modified node with JsonNode.toString(). Extremely deep structures, such as thousands of nested arrays, can be very small on the wire but expensive to process, causing excessive CPU use, stack exhaustion, garbage collection pressure, request thread starvation, or process instability.
Why it matters to the business
An attacker may be able to degrade or interrupt API and application availability by sending many small but deeply nested JSON requests to vulnerable endpoints. The impact is most relevant for internet-facing Java services that accept arbitrary JSON and use Jackson tree-model processing. EPSS is currently low and this is not listed in CISA KEV, but exploitation is low-complexity where the vulnerable parsing and serialization pattern exists, so exposed services should still be upgraded or constrained.
How an attack unfolds
An attacker first identifies an HTTP endpoint or message-ingestion interface that accepts JSON input and is backed by jackson-databind 2.13.x. They then send JSON containing thousands of nested arrays or objects, for example a compact payload made mostly of repeated opening and closing brackets. If the application reads that payload into a JsonNode with ObjectMapper.readTree() and later calls JsonNode.toString(), the serialization path consumes disproportionate resources relative to the request size. By repeating these requests concurrently, the attacker can tie up application worker threads, increase CPU and memory pressure, trigger JVM errors such as StackOverflowError or OutOfMemoryError, and cause slow responses, 5xx errors, or service restarts.
How to fix it
Upgrade jackson-databind to version 2.14.0 or later. If direct upgrades are not immediately possible, override transitive dependency resolution so all deployed components use a fixed jackson-databind version. As defense in depth, enforce maximum JSON nesting depth, maximum request body size, request rate limits, and timeouts at API gateways, reverse proxies, and application input-validation layers. Avoid accepting arbitrary deeply nested JSON where it is not required, and review code paths that combine ObjectMapper.readTree() with JsonNode.toString() on untrusted input.
How to confirm the fix worked
Confirm software composition scans, build manifests, dependency lockfiles, and runtime classpaths no longer include jackson-databind 2.13.x and instead resolve to 2.14.0 or later. Test representative JSON endpoints with intentionally nested but safe-depth payloads and verify that excessive nesting is rejected quickly with a controlled 4xx response rather than processed deeply. Confirm API gateway, WAF, or application controls enforce documented nesting, body-size, and rate limits. Review application performance under test to ensure deeply nested JSON does not cause abnormal CPU, memory, garbage collection, thread exhaustion, or JVM exceptions.
Typical attack path
- Find a Java service or API endpoint that accepts JSON from unauthenticated or low-privileged users.
- Send probe requests containing deeply nested JSON arrays or objects and observe response latency, errors, or connection resets.
- Confirm the target processes the payload using a vulnerable Jackson tree-model path by observing repeated slowdowns or server-side errors.
- Increase request concurrency using relatively small payloads with thousands of nesting levels.
- Sustain the request stream until worker threads, CPU, memory, or JVM stability are affected, causing denial of service.
How to detect it
To determine whether exploitation has already occurred, review API gateway, reverse proxy, WAF, load balancer, application, JVM, container, and APM logs for periods where many small JSON requests were followed by elevated latency, request timeouts, 5xx responses, CPU spikes, garbage collection storms, thread pool exhaustion, or process restarts. Focus on endpoints that accept JSON bodies and correlate requests with unusually high nesting depth or dense sequences of '[' and '{' characters. In application logs and crash artifacts, look for Java exceptions involving Jackson tree serialization, StackOverflowError, OutOfMemoryError, long garbage collection pauses, killed containers, or thread dumps showing Jackson JsonNode serialization methods. If request bodies are captured in WAF or forensic logs, search for compact payloads containing hundreds or thousands of repeated nested brackets, especially repeated concurrent submissions from the same source address, user agent, or network block.
- com.fasterxml.jackson.databind.JsonNode.toString
- com.fasterxml.jackson.databind.ObjectMapper.readTree
- java.lang.StackOverflowError
- java.lang.OutOfMemoryError
- GC overhead limit exceeded
- OutOfMemoryError: Java heap space
- StackOverflowError: null
- com.fasterxml.jackson.databind.node.ArrayNode
- com.fasterxml.jackson.databind.node.ObjectNode
- [[[[[[[[[[[[[[[[[[[[
- {{{{{{{{{{{{{{{{{{{{
- HTTP 500
- HTTP 503
- request timed out
- upstream timed out
- connection reset by peer
What your security team should do
- Inventory Java applications, APIs, workers, and message consumers that include jackson-databind 2.13.x, including transitive dependencies.
- Prioritize internet-facing JSON ingestion services and services that parse untrusted JSON into JsonNode trees.
- Upgrade jackson-databind to 2.14.0 or later and ensure dependency management prevents older transitive versions from being packaged.
- Add or verify JSON nesting-depth limits, request-size limits, rate limits, and application timeouts at the edge and in application code.
- Search recent application, gateway, WAF, JVM, and APM logs for bursts of small JSON requests followed by latency spikes, 5xx errors, StackOverflowError, OutOfMemoryError, or container restarts.
- Create detection logic for unusually high bracket density or excessive JSON nesting in request bodies where logging or inspection is permitted.
- Run targeted regression tests against endpoints using ObjectMapper.readTree() and JsonNode.toString() to confirm malicious nesting is rejected safely.
The record
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.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|
Related vulnerabilities
- CVE-2026-113795 pypdf is a free and open-source pure-python PDF library. CWE-400
- CVE-2026-83400 Vulnerability in the Oracle Java SE, Oracle GraalVM for JDK, Oracle GraalVM Enterprise… CWE-400
- CVE-2026-112400 Pillow is a Python imaging library. CWE-400
- CVE-2026-111766 markdown-it is a Markdown parser. CWE-400
- CVE-2026-111759 markdown-it is a Markdown parser. CWE-400
- CVE-2025-52290 A NULL pointer dereference in the avpriv_h264_has_num_reorder_frames function of Ffmpeg… CWE-400
- CVE-2026-111066 AIOHTTP is an asynchronous HTTP client/server framework for asyncio and Python. CWE-400
- CVE-2026-59951 The MCP Python SDK, called mcp on PyPI, is a Python implementation of the Model Context… CWE-400