CVE-2025-52999
NoneCVSS
—
EPSS
0.8%
Published
Jun 25, 2025
CISA due date
—
Cloudanix analysis
A specially crafted data file or request can cause some Java applications to crash or stop responding until their parsing library is updated.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- Library
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Medium
What it actually does
The flaw is an uncontrolled recursion/resource-exhaustion condition in Jackson's low-level streaming JSON parser before version 2.15.0. When an application parses attacker-supplied JSON or other structured input with extremely deep nesting, the parser can recurse until the Java thread stack is exhausted, causing a StackOverflowError. Depending on how the application handles parser failures, this can terminate the request-handling thread, fail the transaction, or destabilize the service. The issue affects applications that directly use jackson-core and applications using jackson-databind because databind relies on jackson-core for parsing. The fixed implementation adds configurable stream constraints, including a default maximum nesting depth of 1000, and throws StreamConstraintsException instead of exhausting the stack.
Why it matters to the business
An unauthenticated remote attacker may be able to make affected services unavailable by sending specially crafted deeply nested input to any feature, API, message consumer, file import, or integration endpoint that parses untrusted JSON with a vulnerable Jackson version. The primary business risk is service disruption: failed API requests, degraded application availability, increased error rates, worker crashes, and potential cascading outages in systems that automatically retry failed parsing jobs. There is no indication from the provided data of confidentiality or integrity impact, no CISA KEV listing, no known ransomware use, low EPSS probability, and no reported mature public exploit, so prioritization should be driven by whether exposed applications parse untrusted input and how critical those applications are.
How an attack unfolds
An attacker identifies an application endpoint, import function, queue consumer, webhook, or service integration that accepts JSON or data later parsed by Jackson. The attacker submits a payload containing an extremely deep sequence of nested arrays or objects, such as thousands of repeated '[' characters followed by matching closing brackets, or deeply nested object properties. In vulnerable versions of jackson-core, parsing this payload can recurse through the nested structure until the JVM throws StackOverflowError. If the application does not isolate or recover from this failure cleanly, the affected request fails, worker threads may die, logs fill with stack traces, and repeated submissions can keep the service in a degraded or unavailable state. In fixed versions, the parser enforces a maximum nesting depth and rejects the payload with StreamConstraintsException before stack exhaustion occurs.
How to fix it
Upgrade jackson-core to version 2.15.0 or later wherever it is present, including transitive dependencies pulled in by jackson-databind or framework starters. For source-based consumers of fasterxml/jackson-core, include the fixed commit a2c0bdcfb9aae8fca555240e63e57c1d9e6f8079 or a released version containing the stream constraints change. For Mageia 6 netatalk packaging listed in the affected products, update to 3.1.12-1.1.mga6 or later. After upgrading, ensure the application uses the fixed Jackson libraries at runtime and not an older shaded, bundled, or container-provided copy. Where immediate upgrade is not possible, reduce exposure by rejecting untrusted JSON from unauthenticated sources, enforcing maximum request body sizes, applying API gateway or WAF limits for excessive nesting, validating input before parsing, isolating parsing workloads, and configuring timeouts and retry limits. On fixed Jackson versions, consider explicitly configuring StreamReadConstraints with a maximum nesting depth appropriate for the application if the default depth of 1000 is too permissive for business requirements.
How to confirm the fix worked
Confirm dependency resolution shows jackson-core 2.15.0 or later in all built artifacts, container images, application servers, and dependency lockfiles. Use software composition analysis, Maven or Gradle dependency trees, SBOM scans, and runtime classpath inspection to identify direct, transitive, shaded, or duplicated older Jackson jars. Functional validation can be performed in a non-production environment by sending a deliberately over-nested JSON payload to representative parsing paths: fixed applications should reject it with StreamConstraintsException or a controlled 4xx error rather than producing StackOverflowError or crashing a worker. Verify logs no longer show java.lang.StackOverflowError from Jackson parsing code when malformed deeply nested payloads are tested. For packaged systems, confirm the installed Mageia netatalk package is 3.1.12-1.1.mga6 or later where applicable.
Typical attack path
- Find an internet-facing API, webhook, upload, message-processing, or integration path that accepts JSON or structured input.
- Confirm or infer that the backend Java application uses a vulnerable jackson-core version prior to 2.15.0, directly or through jackson-databind.
- Create a JSON payload with nesting depth high enough to exceed the JVM stack, such as thousands of nested arrays or objects.
- Submit the payload to the vulnerable parsing path without needing authentication if the endpoint is public, or with low-privilege access if the parser is behind authentication.
- Trigger StackOverflowError during parsing, causing request failure and possible worker-thread or service instability.
- Repeat or automate submissions to sustain elevated error rates and deny service to legitimate users.
How to detect it
To determine whether exploitation has already occurred, review application, API gateway, load balancer, WAF, APM, and JVM logs for spikes in failed JSON parsing requests, HTTP 400/413/500 responses, thread deaths, worker restarts, or java.lang.StackOverflowError events tied to request bodies with extreme nesting. Focus on endpoints that accept JSON, webhooks, file imports, batch ingestion, message queues, and partner integrations. In application logs, look for stack traces involving com.fasterxml.jackson.core, com.fasterxml.jackson.databind, JsonParser, ReaderBasedJsonParser, UTF8StreamJsonParser, or parsing operations immediately before StackOverflowError. In fixed environments, repeated StreamConstraintsException messages may indicate attempted probing or exploitation attempts that were blocked. Network and WAF telemetry may show very long runs of nested '[' or '{' characters in request bodies, abnormal request-body depth, large malformed JSON payloads, or repeated requests from the same source that receive server errors. Correlate these events with service restarts, JVM crash reports, orchestrator pod/container restarts, elevated CPU/error rates, and retry storms from message-processing systems.
- java.lang.StackOverflowError
- com.fasterxml.jackson.core
- com.fasterxml.jackson.databind
- com.fasterxml.jackson.core.exc.StreamConstraintsException
- Document nesting depth
- Depth
- JsonParser
- UTF8StreamJsonParser
- ReaderBasedJsonParser
- JsonMappingException
- Unexpected end-of-input within/between Object entries
- Unexpected end-of-input within/between Array entries
- [[[[[[[[[[[[[[[[[[[[
- {{{{{{{{{{{{{{{{{{{{
- Caused by: java.lang.StackOverflowError
- StackOverflowError at com.fasterxml.jackson
What your security team should do
- Inventory all Java applications, services, batch jobs, message consumers, and third-party products that include jackson-core or jackson-databind, prioritizing internet-facing and unauthenticated JSON parsing paths.
- Upgrade jackson-core to 2.15.0 or later, or apply vendor package updates such as netatalk 3.1.12-1.1.mga6 for Mageia 6 where applicable.
- Search dependency trees and built artifacts for older jackson-core jars, including shaded copies and application-server-provided libraries that may override the intended fixed version.
- Apply compensating controls until upgrades are complete: request size limits, nesting-depth validation, WAF/API gateway rules, rate limits, authentication requirements, and queue retry caps.
- Add negative tests for deeply nested JSON to CI/CD and API test suites to ensure parsing failures are controlled and do not cause stack exhaustion.
- Monitor application logs and APM telemetry for StackOverflowError, StreamConstraintsException spikes, unusual malformed JSON rates, and repeated requests that fail during JSON parsing.
- Treat repeated exploitation attempts against critical exposed services as a denial-of-service incident even though this vulnerability is not currently listed in KEV and has low EPSS.
The record
jackson-core contains core low-level incremental ("streaming") parser and generator abstractions used by Jackson Data Processor. In versions prior to 2.15.0, if a user parses an input file and it has deeply nested data, Jackson could end up throwing a StackoverflowError if the depth is particularly large. jackson-core 2.15.0 contains a configurable limit for how deep Jackson will traverse in an input document, defaulting to an allowable depth of 1000. jackson-core will throw a StreamConstraintsException if the limit is reached. jackson-databind also benefits from this change because it uses jackson-core to parse JSON inputs. As a workaround, users should avoid parsing input files from untrusted sources.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Maven | com.fasterxml.jackson.core:jackson-core | 0 | 2.15.0 |
| AlmaLinux:8 | apache-commons-collections | 0 | 3.2.2-10.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | apache-commons-lang | 0 | 2.6-21.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | apache-commons-net | 0 | 3.6-3.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | bea-stax-api | 0 | 1.2.0-16.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | fasterxml-oss-parent | 0 | 69-1.module_el8.10.0+4034+20822525 |
| AlmaLinux:8 | glassfish-fastinfoset | 0 | 1.2.13-9.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | glassfish-jaxb-api | 0 | 2.2.12-8.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | glassfish-jaxb-core | 0 | 2.2.11-12.module_el8.10.0+3791+e0637953 |
| AlmaLinux:8 | glassfish-jaxb-runtime | 0 | 2.2.11-12.module_el8.10.0+3791+e0637953 |
| AlmaLinux:8 | glassfish-jaxb-txw2 | 0 | 2.2.11-12.module_el8.10.0+3791+e0637953 |
| AlmaLinux:8 | jackson-annotations | 0 | 2.19.1-1.module_el8.10.0+4034+20822525 |
| AlmaLinux:8 | jackson-bom | 0 | 2.19.1-1.module_el8.10.0+4034+20822525 |
| AlmaLinux:8 | jackson-core | 0 | 2.19.1-1.module_el8.10.0+4034+20822525 |
| AlmaLinux:8 | jackson-databind | 0 | 2.19.1-1.module_el8.10.0+4034+20822525 |
| AlmaLinux:8 | jackson-jaxrs-json-provider | 0 | 2.19.1-1.module_el8.10.0+4034+20822525 |
| AlmaLinux:8 | jackson-jaxrs-providers | 0 | 2.19.1-1.module_el8.10.0+4034+20822525 |
| AlmaLinux:8 | jackson-module-jaxb-annotations | 0 | 2.19.1-1.module_el8.10.0+4034+20822525 |
| AlmaLinux:8 | jackson-modules-base | 0 | 2.19.1-1.module_el8.10.0+4034+20822525 |
| AlmaLinux:8 | jackson-parent | 0 | 2.19.1-1.module_el8.10.0+4034+20822525 |
| AlmaLinux:8 | jakarta-commons-httpclient | 0 | 1:3.1-28.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | javassist | 0 | 3.18.1-8.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | javassist-javadoc | 0 | 3.18.1-8.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | pki-servlet-engine | 0 | 1:9.0.62-1.module_el8.10.0+3791+e0637953 |
| AlmaLinux:8 | relaxngDatatype | 0 | 2011.1-7.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | slf4j | 0 | 1.7.25-4.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | slf4j-jdk14 | 0 | 1.7.25-4.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | stax-ex | 0 | 1.7.7-8.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | velocity | 0 | 1.7-24.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | xalan-j2 | 0 | 2.7.1-38.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | xerces-j2 | 0 | 2.11.0-34.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | xml-commons-apis | 0 | 1.4.01-25.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | xml-commons-resolver | 0 | 1.2-26.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | xmlstreambuffer | 0 | 1.5.4-8.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:8 | xsom | 0 | 0-19.20110809svn.module_el8.5.0+2577+9e95fe00 |
| AlmaLinux:9 | pki-jackson-annotations | 0 | 2.19.1-1.el9_6 |
| AlmaLinux:9 | pki-jackson-core | 0 | 2.19.1-1.el9_6 |
| AlmaLinux:9 | pki-jackson-databind | 0 | 2.19.1-1.el9_6 |
| AlmaLinux:9 | pki-jackson-jaxrs-json-provider | 0 | 2.19.1-1.el9_6 |
| AlmaLinux:9 | pki-jackson-jaxrs-providers | 0 | 2.19.1-1.el9_6 |
| AlmaLinux:9 | pki-jackson-module-jaxb-annotations | 0 | 2.19.1-1.el9_6 |
| Chainguard | cassandra-4.0 | 0 | 4.0.18-r1 |
| Chainguard | cassandra-4.0-compat | 0 | 4.0.18-r1 |
| Chainguard | cassandra-4.0-iamguarded-compat | 0 | 4.0.18-r1 |
| Chainguard | cassandra-4.1 | 0 | 4.1.9-r1 |
| Chainguard | cassandra-4.1-compat | 0 | 4.1.9-r1 |
| Chainguard | cassandra-4.1-iamguarded-compat | 0 | 4.1.9-r1 |
| Chainguard | cassandra-fips-4.0 | 0 | 4.0.15-r2 |
| Chainguard | cassandra-fips-4.0-compat | 0 | 4.0.15-r2 |
| Chainguard | cassandra-fips-4.1 | 0 | 4.1.7-r2 |
| Chainguard | cassandra-fips-4.1-compat | 0 | 4.1.7-r2 |
| Chainguard | cassandra-fips-5.0 | 0 | 5.0.3-r5 |
| Chainguard | cassandra-fips-5.0-compat | 0 | 5.0.3-r5 |
| Chainguard | cassandra-reaper | 0 | 3.8.0-r6 |
| Chainguard | celeborn-0.5-compat | 0 | 0.5.4-r9 |
| Chainguard | celeborn-0.6 | 0 | 0.6.2-r0 |
| Chainguard | celeborn-0.6-compat | 0 | 0.6.1-r0 |
| Chainguard | confluent-common-docker | 0 | 7.6.0-r16 |
| Chainguard | confluent-common-docker-base | 0 | 7.6.0-r16 |
| Chainguard | confluent-common-docker-ub | 0 | 7.6.0-r16 |
| Chainguard | cqlsh-5.0 | 0 | 5.0.3-r5 |
| Chainguard | cqlsh-fips-5.0 | 0 | 5.0.3-r5 |
| Chainguard | druid-compat | 0 | 34.0.0-r6 |
| Chainguard | elasticsearch-7 | 0 | 7.17.29-r1 |
| Chainguard | elasticsearch-7-bitnami | 0 | 7.17.29-r1 |
| Chainguard | elasticsearch-7-iamguarded | 0 | 7.17.29-r1 |
| Chainguard | gradle-stage0 | 0 | 8.0.1-r3 |
| Chainguard | hadoop-client-modules | 0 | 3.3.6-r8 |
| Chainguard | localstack-compat | 0 | 4.10.0-r0 |
| Chainguard | spark-3.5 | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-scala-2.12-compat | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-scala-2.12-iamguarded-compat | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-scala-2.13-compat | 0 | 3.5.7-r2 |
| Chainguard | spark-4.0 | 0 | 4.0.1-r1 |
| Chainguard | spark-4.0-scala-2.13 | 0 | 4.0.1-r3 |
| Chainguard | spark-4.0-scala-2.13-compat | 0 | 4.0.1-r1 |
| Chainguard | spark-4.1 | 0 | 4.1.0-r1 |
| Chainguard | spark-4.1-scala-2.13 | 0 | 4.1.0-r1 |
| Chainguard | spark-4.1-scala-2.13-compat | 0 | 4.1.0-r1 |
| Chainguard | spark-fips-3.5 | 0 | 3.5.4-r17 |
| Chainguard | spark-fips-3.5-scala-2.12-compat | 0 | 3.5.4-r17 |
| Chainguard | spark-fips-3.5-scala-2.13-compat | 0 | 3.5.4-r17 |
| Chainguard | tez | 0 | 0.10.5-r9 |
| Debian:11 | jackson-core | 0 | No fix |
| Debian:12 | jackson-core | 0 | No fix |
| Debian:13 | jackson-core | 0 | No fix |
| Debian:14 | jackson-core | 0 | No fix |
| Wolfi | cassandra-4.1 | 0 | 4.1.9-r1 |
| Wolfi | cassandra-4.1-compat | 0 | 4.1.9-r1 |
| Wolfi | cassandra-reaper | 0 | 3.8.0-r6 |
| Wolfi | celeborn-0.5-compat | 0 | 0.5.4-r9 |
| Wolfi | celeborn-0.6 | 0 | 0.6.2-r0 |
| Wolfi | celeborn-0.6-compat | 0 | 0.6.1-r0 |
| Wolfi | confluent-common-docker | 0 | 7.6.0-r16 |
| Wolfi | confluent-common-docker-base | 0 | 7.6.0-r16 |
| Wolfi | confluent-common-docker-ub | 0 | 7.6.0-r16 |
| Wolfi | cqlsh-5.0 | 0 | 5.0.3-r5 |
| Wolfi | druid-compat | 0 | 34.0.0-r6 |
| Wolfi | gradle-stage0 | 0 | 8.0.1-r3 |
| Wolfi | spark-3.5 | 0 | 3.5.7-r2 |
| Wolfi | spark-3.5-scala-2.12-compat | 0 | 3.5.7-r2 |
| Wolfi | spark-3.5-scala-2.12-iamguarded-compat | 0 | 3.5.7-r2 |
| Wolfi | spark-3.5-scala-2.13-compat | 0 | 3.5.7-r2 |
| Wolfi | spark-4.0 | 0 | 4.0.1-r1 |
| Wolfi | spark-4.0-scala-2.13 | 0 | 4.0.1-r3 |
| Wolfi | spark-4.0-scala-2.13-compat | 0 | 4.0.1-r1 |
| Wolfi | spark-4.1 | 0 | 4.1.0-r1 |
| Wolfi | spark-4.1-scala-2.13 | 0 | 4.1.0-r1 |
| Wolfi | spark-4.1-scala-2.13-compat | 0 | 4.1.0-r1 |
| Wolfi | tez | 0 | 0.10.5-r9 |
Related vulnerabilities
- CVE-2025-49128 Jackson-core contains core low-level incremental ("streaming") parser and generator… Also affects com.fasterxml.jackson.core:jackson-core
- CVE-2025-48734 Apache Commons Improper Access Control vulnerability Also affects apache-commons-collections
- CVE-2019-10086 In Apache Commons Beanutils 1.9.2, a special BeanIntrospector class was added which… Also affects apache-commons-collections
- CVE-2025-66566 yawkat LZ4 Java provides LZ4 compression for Java. Also affects cassandra-4.0
- CVE-2025-12183 Out-of-bounds memory operations in org.lz4:lz4-java 1.8.0 and earlier allow remote… Also affects cassandra-4.0
- CVE-2025-48924 Apache Commons Lang is vulnerable to Uncontrolled Recursion when processing long inputs Also affects cassandra-4.0
- CVE-2023-6378 A serialization vulnerability in logback receiver component part of logback version… Also affects cassandra-4.0
- CVE-2023-2976 Use of Java's default temporary directory for file creation in `FileBackedOutputStream`… Also affects cassandra-4.0