Cloudanix VulnDB

CVE-2025-52999

None

CVSS

—

EPSS

0.8%

Published

Jun 25, 2025

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

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

  1. Find an internet-facing API, webhook, upload, message-processing, or integration path that accepts JSON or structured input.
  2. Confirm or infer that the backend Java application uses a vulnerable jackson-core version prior to 2.15.0, directly or through jackson-databind.
  3. Create a JSON payload with nesting depth high enough to exceed the JVM stack, such as thousands of nested arrays or objects.
  4. 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.
  5. Trigger StackOverflowError during parsing, causing request failure and possible worker-thread or service instability.
  6. 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