CVE-2026-104895
Published:October 20, 2026
Updated:October 21, 2026
An eager-allocation denial-of-service in jackson-dataformats-binary's async Smile parser (latest, 3.2.2 / "tools.jackson" line), where a raw-binary length prefix from untrusted input is used to allocate a "byte[]" before the body is read, with no upper bound and no overflow check. This is the same class as the HIGH-rated CBOR CVE-2020-28491 in this library, which was fixed with a "LONGEST_NON_CHUNKED_BINARY" guard; the async Smile parser never received the equivalent guard. Reporter: apvxlab (AppViewX security research). Split out of GHSA-ww35-763r-jg22 at the maintainer's request so one GHSA maps to one component (async Smile). The Protobuf issue remains in GHSA-ww35-763r-jg22. File: "smile/src/main/java/tools/jackson/dataformat/smile/async/NonBlockingByteArrayParser.java" ("_startRawBinary", ~line 1484; also "_finishRawBinaryLen" ~line 1496). On the raw-binary marker "0xFD", "_decodeVInt()" computes "(value << 6) + (i & 0x3F)" with no overflow check. The blocking "SmileParser._readUnsignedVInt" guards this with "(value >>> 25) != 0", but the async variant omits it. "_startRawBinary" then does "_binaryValue = new byte[len]" immediately, before the body is required. Impact. A ~10-byte async Smile feed forces an eager ~2 GB allocation (OutOfMemoryError) on reactive / async Smile endpoints (WebFlux, Vert.x, Micronaut). A VInt crafted to overflow "int" yields a negative length, giving a "NegativeArraySizeException", a non-"JacksonException" "RuntimeException" that escapes the parser contract. Either way an untrusted input crashes the request/processing thread (denial of service). Reproduction. "SmileFactory.builder().build().createNonBlockingByteArrayParser(...)"; feed a Smile 4-byte header ("0x3A 0x29 0x0A <hdr>") + "0xFD" + a 5-byte unsigned VInt encoding ~2,000,000,000, then call "nextToken()" → "_startRawBinary" → "new byte[~2e9]". Choosing the VInt bytes so "(value << 6) + (i & 0x3F)" overflows negative gives the "NegativeArraySizeException" crash variant. Fix. Add the "(value >>> 25)" overflow check to the async "_decodeVInt", and route large raw-binary lengths through an incremental read as the blocking parser does ("_finishBinaryRawLong" for "byteLen > 250000"). Code-verified against the 3.2.2 source with the exact reproduction input above. Happy to provide a runnable harness and coordinate the fix.
Affected Packages
https://github.com/FasterXML/jackson-dataformats-binary.git (GITHUB):
Affected version(s) >=jackson-dataformats-binary-3.2.0 <jackson-dataformats-binary-3.2.4Fix Suggestion:
Update to version jackson-dataformats-binary-3.2.4https://github.com/FasterXML/jackson-dataformats-binary.git (GITHUB):
Affected version(s) >=jackson-dataformats-binary-2.22.0 <jackson-dataformats-binary-2.22.4Fix Suggestion:
Update to version jackson-dataformats-binary-2.22.4https://github.com/FasterXML/jackson-dataformats-binary.git (GITHUB):
Affected version(s) >=jackson-dataformats-binary-2.19.0 <jackson-dataformats-binary-2.21.8Fix Suggestion:
Update to version jackson-dataformats-binary-2.21.8https://github.com/FasterXML/jackson-dataformats-binary.git (GITHUB):
Affected version(s) >=jackson-dataformats-binary-2.9.0.pr4 <jackson-dataformats-binary-2.18.12Fix Suggestion:
Update to version jackson-dataformats-binary-2.18.12https://github.com/FasterXML/jackson-dataformats-binary.git (GITHUB):
Affected version(s) >=jackson-dataformats-binary-3.0.0 <jackson-dataformats-binary-3.1.8Fix Suggestion:
Update to version jackson-dataformats-binary-3.1.8com.fasterxml.jackson.dataformat:jackson-dataformat-smile (JAVA):
Affected version(s) >=2.19.0 <2.21.8Fix Suggestion:
Update to version 2.21.8tools.jackson.dataformat:jackson-dataformat-smile (JAVA):
Affected version(s) >=3.0.0 <3.1.8Fix Suggestion:
Update to version 3.1.8tools.jackson.dataformat:jackson-dataformat-smile (JAVA):
Affected version(s) >=3.2.0 <3.2.4Fix Suggestion:
Update to version 3.2.4com.fasterxml.jackson.dataformat:jackson-dataformat-smile (JAVA):
Affected version(s) >=2.9.0.pr4 <2.18.12Fix Suggestion:
Update to version 2.18.12com.fasterxml.jackson.dataformat:jackson-dataformat-smile (JAVA):
Affected version(s) >=2.0.0-RC1 <2.18.12Fix Suggestion:
Update to version 2.18.12com.fasterxml.jackson.dataformat:jackson-dataformat-smile (JAVA):
Affected version(s) >=2.22.0 <2.22.4Fix Suggestion:
Update to version 2.22.4Related Resources (3)
Do you need more information?
Contact UsCVSS v4
Base Score:
8.7
Attack Vector
NETWORK
Attack Complexity
LOW
Attack Requirements
NONE
Privileges Required
NONE
User Interaction
NONE
Vulnerable System Confidentiality
NONE
Vulnerable System Integrity
NONE
Vulnerable System Availability
HIGH
Subsequent System Confidentiality
NONE
Subsequent System Integrity
NONE
Subsequent System Availability
NONE
CVSS v3
Base Score:
7.5
Attack Vector
NETWORK
Attack Complexity
LOW
Privileges Required
NONE
User Interaction
NONE
Scope
UNCHANGED
Confidentiality
NONE
Integrity
NONE
Availability
HIGH
Weakness Type (CWE)
Memory Allocation with Excessive Size Value