CVE-2025-49128
Medium · 4.0CVSS
4.0
EPSS
0.4%
Published
Jun 6, 2025
CISA due date
—
Cloudanix analysis
Some applications may accidentally reveal small pieces of other data when they show detailed errors for malformed JSON requests.
- Exploitation
- Local Privilege
- Attacker needs
- None
- Complexity
- Low
- Impact
- Data Exposure
- Component
- Library
- Class
- Information Disclosure
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Medium
What it actually does
In jackson-core versions 2.0.0 through versions before 2.13.0, JsonLocation._appendSourceDesc can include bytes outside the intended JSON slice when constructing parser exception messages. When an application parses JSON from a byte array using an offset and length, the exception source description may read from the beginning of the backing array instead of the logical payload start. In applications that reuse or pool buffers, such as Netty- or Vert.x-based services, this can expose up to approximately 500 bytes of adjacent or previously used buffer content in exception text. The flaw does not directly allow code execution, data modification, or service disruption; the impact is unintended information disclosure when those exception messages are returned to clients, written to logs, or otherwise exposed.
Why it matters to the business
Affected applications may accidentally disclose fragments of sensitive data such as request bodies, headers, tokens, identifiers, or other users’ payloads through JSON parse error messages. The practical risk depends heavily on whether malformed JSON errors are exposed externally or logs are accessible to users, support personnel, vendors, or attackers. EPSS is low, the issue is not in CISA KEV, and no mature public exploitation is indicated, so this is generally a lower-urgency confidentiality issue; however, internet-facing APIs, multi-tenant systems, and services using pooled buffers should treat it as a meaningful data leakage risk. Jackson-core is widely embedded as a transitive dependency, so exposure may exist indirectly through frameworks and libraries even where the application does not declare jackson-core directly.
How an attack unfolds
An attacker identifies an endpoint or service that accepts JSON and uses a vulnerable jackson-core version to parse input from byte arrays with offsets, commonly through web frameworks or reactive/networking stacks that use pooled buffers. The attacker sends intentionally malformed JSON to force Jackson to throw a parsing exception. During exception construction, the vulnerable source-description logic may include bytes from the backing array before the logical start of the attacker’s payload. If the application returns raw exception messages in HTTP responses, exposes detailed API errors, or stores those messages in logs the attacker can access, the attacker can read the leaked byte fragments. By repeating malformed requests and varying timing, payload size, or connection behavior, the attacker may collect multiple fragments of stale or adjacent buffer data. Exploitation requires an exposure path for exception text; systems that suppress detailed parser exceptions from clients and restrict log access have substantially reduced practical risk.
How to fix it
Upgrade jackson-core to version 2.13.0 or later. The upstream fix is associated with commit 03add30680331fd88a8ef474cbd5bc0a65e57eb8. Because jackson-core is often transitive, update dependency management, BOMs, framework versions, and shaded or bundled copies, then rebuild and redeploy affected applications. For Ubuntu 22.04 systems carrying the listed linux-oem-6.1 package, apply the vendor-fixed package version 6.1.0-1016.16 where relevant. If immediate upgrade is not possible, prevent exposure by disabling source inclusion in Jackson exception locations, for example by disabling INCLUDE_SOURCE_IN_LOCATION on the configured JsonFactory/JsonMapper where supported, and ensure applications never return raw parser exception messages to clients. Replace detailed parse failures with generic client-facing errors such as 'invalid JSON' and restrict detailed exception logs to protected operational logging systems.
How to confirm the fix worked
Confirm through software composition analysis, build manifests, dependency trees, and runtime classpath inspection that all deployed applications use jackson-core 2.13.0 or later, or a vendor-patched build containing the upstream fix. Check both direct and transitive dependencies, including shaded JARs and framework-provided versions. Exercise representative JSON endpoints with malformed JSON and verify responses do not include Jackson exception internals, source snippets, request fragments, or '[Source: ...]' location text. Review application configuration to confirm source inclusion in exception locations is disabled where mitigation is required. Validate that logs containing parsing exceptions are access-controlled and that log redaction prevents sensitive request content from being stored. For vendor packages, confirm the installed fixed package version, such as linux-oem-6.1 6.1.0-1016.16 on applicable Ubuntu 22.04 systems.
Typical attack path
- Find a JSON-consuming endpoint or message-processing path that uses jackson-core before 2.13.0, directly or transitively.
- Send malformed JSON designed to trigger a JsonParseException or related Jackson parsing exception.
- Cause Jackson to include a source description in the exception location details.
- Observe whether the application returns the exception text in the HTTP response, API error body, debug page, gateway response, or accessible logs.
- Extract unintended bytes embedded in the exception source snippet, potentially including stale pooled-buffer content.
- Repeat requests to attempt to collect additional leaked fragments from reused buffers.
How to detect it
Look for evidence that malformed JSON parsing errors were exposed or logged with embedded source content. Useful sources include application logs, API gateway logs, web server access/error logs, APM traces, centralized logging platforms, exception tracking systems, support/debug logs, and HTTP response capture from WAF or observability tooling. Focus on JsonParseException, StreamReadException, or Jackson exception messages that contain '[Source:' and byte-array source snippets. Review whether those errors were returned with 4xx or 5xx responses to external clients, especially on JSON endpoints. Investigate repeated malformed JSON requests from the same IP, account, session, API key, or user agent followed by responses with unusually large error bodies. Because this flaw leaks data through exception text rather than creating a distinctive payload, there may be no reliable network IOC; detection is primarily based on vulnerable version presence plus historical evidence of detailed Jackson parse errors being exposed. If such logs contain snippets of tokens, credentials, personal data, request headers, or other users’ payloads, treat them as potential data exposure artifacts.
- com.fasterxml.jackson.core.JsonParseException
- com.fasterxml.jackson.core.exc.StreamReadException
- JsonParseException
- StreamReadException
- at [Source: (byte[])"
- [Source: (byte[])"
- JsonLocation._appendSourceDesc
- INCLUDE_SOURCE_IN_LOCATION
- Unexpected character (
- Unexpected end-of-input
- was expecting double-quote to start field name
- Unrecognized token
- Illegal unquoted character
What your security team should do
- Inventory jackson-core usage across applications, including transitive dependencies, shaded artifacts, containers, and framework-managed versions.
- Prioritize remediation for internet-facing APIs, multi-tenant services, authentication/identity flows, payment or personal-data processing services, and applications using Netty, Vert.x, or other pooled-buffer stacks.
- Upgrade jackson-core to 2.13.0 or later and standardize this minimum version in dependency-management policy or software composition controls.
- Disable Jackson source inclusion in exception locations and suppress raw exception messages in all client-facing error responses.
- Search logs and API telemetry for Jackson parsing exceptions that include source snippets to determine whether sensitive data may already have been exposed.
- Restrict access to historical application logs that may contain leaked snippets and assess whether retention, redaction, or incident review is warranted.
- Add regression tests that send malformed JSON and fail the build if detailed parser exception text or source snippets are returned externally.
The record
Jackson-core contains core low-level incremental ("streaming") parser and generator abstractions used by Jackson Data Processor. Starting in version 2.0.0 and prior to version 2.13.0, a flaw in jackson-core's `JsonLocation._appendSourceDesc` method allows up to 500 bytes of unintended memory content to be included in exception messages. When parsing JSON from a byte array with an offset and length, the exception message incorrectly reads from the beginning of the array instead of the logical payload start. This results in possible information disclosure in systems using pooled or reused buffers, like Netty or Vert.x. This issue was silently fixed in jackson-core version 2.13.0, released on September 30, 2021, via PR #652. All users should upgrade to version 2.13.0 or later. If upgrading is not immediately possible, applications can mitigate the issue by disabling exception message exposure to clients to avoid returning parsing exception messages in HTTP responses and/or disabling source inclusion in exceptions to prevent Jackson from embedding any source content in exception messages, avoiding leakage.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Maven | com.fasterxml.jackson.core:jackson-core | 2.0.0 | 2.13.0 |
| Chainguard | celeborn-0.5 | 0 | 0.5.4-r11 |
| 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 | datadog-jmxfetch | 0 | 0.49.8-r1 |
| Chainguard | druid | 0 | 35.0.0-r0 |
| Chainguard | druid-compat | 0 | 34.0.0-r6 |
| Chainguard | hadoop-client-modules | 0 | 3.3.6-r4 |
| Chainguard | spark-3.5 | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-scala-2.12 | 0 | 3.5.7-r4 |
| 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 | 0 | 3.5.7-r4 |
| 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 | 0 | 3.5.4-r19 |
| Chainguard | spark-fips-3.5-scala-2.12-compat | 0 | 3.5.4-r17 |
| Chainguard | spark-fips-3.5-scala-2.13 | 0 | 3.5.4-r18 |
| Chainguard | spark-fips-3.5-scala-2.13-compat | 0 | 3.5.4-r17 |
| Chainguard | tez | 0 | 0.10.5-r9 |
| Chainguard | wso2is | 0 | 7.1.0-r2 |
| Chainguard | wso2is-compat | 0 | 7.1.0-r2 |
| Chainguard | wso2is-doc | 0 | 7.1.0-r2 |
| Debian:11 | jackson-core | 0 | No fix |
| Debian:12 | jackson-core | 0 | 2.13.0-1 |
| Debian:13 | jackson-core | 0 | 2.13.0-1 |
| Debian:14 | jackson-core | 0 | 2.13.0-1 |
| Wolfi | celeborn-0.5 | 0 | 0.5.4-r11 |
| 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 | datadog-jmxfetch | 0 | 0.49.8-r1 |
| Wolfi | druid | 0 | 35.0.0-r0 |
| Wolfi | druid-compat | 0 | 34.0.0-r6 |
| Wolfi | spark-3.5 | 0 | 3.5.7-r2 |
| Wolfi | spark-3.5-scala-2.12 | 0 | 3.5.7-r4 |
| 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 | 0 | 3.5.7-r4 |
| 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 |
| maven | com.fasterxml.jackson.core/jackson-core | 2.0.0 | 2.13.0 |
Related vulnerabilities
- CVE-2025-52999 jackson-core contains core low-level incremental ("streaming") parser and generator… Also affects com.fasterxml.jackson.core:jackson-core
- CVE-2025-33042 Improper Control of Generation of Code ('Code Injection') vulnerability in Apache Avro… Also affects celeborn-0.5
- CVE-2025-68161 Apache Log4j does not verify the TLS hostname in its Socket Appender Also affects celeborn-0.5
- CVE-2025-67735 Netty has a CRLF Injection vulnerability in io.netty.handler.codec.http.HttpRequestEncoder Also affects celeborn-0.5
- CVE-2025-12383 Eclipse Jersey has a Race Condition Also affects celeborn-0.5
- CVE-2025-53864 Connect2id Nimbus JOSE + JWT 10.0.x before 10.0.2 and 9.37.x before 9.37.4 allows a… Also affects celeborn-0.5
- CVE-2025-48924 Apache Commons Lang is vulnerable to Uncontrolled Recursion when processing long inputs Also affects celeborn-0.5
- CVE-2025-58056 Netty vulnerable to request smuggling due to incorrect parsing of chunk extensions Also affects celeborn-0.5-compat