CVE-2026-104895: jackson-dataformat-smile: unbounded eager byte[] allocation for raw binary in the async parser allows OutOfMemoryError denial of service

Published Oct 28, 2026
·
Updated

The asynchronous Smile parser (NonBlockingByteArrayParser) uses a raw-binary length prefix taken from untrusted input to allocate a byte[] before the body is read, with no upper bound and no overflow check. On the raw-binary marker 0xFD, decodeVInt() computes (value << 6) + (i & 0x3F) without the (value >>> 25) != 0 overflow guard present in the blocking SmileParser.readUnsignedVInt, and startRawBinary then allocates the declared length immediately.

A Smile feed of roughly ten bytes can therefore force an eager allocation of approximately 2 GB, producing an OutOfMemoryError on reactive or asynchronous Smile endpoints. A VInt crafted to overflow int yields a negative length and a NegativeArraySizeException, a RuntimeException that is not a JacksonException and so escapes the parser contract. Either outcome crashes the request or processing thread.

This is the same class of issue as CVE-2020-28491 in the CBOR parser of this library, which was fixed with a LONGESTNONCHUNKEDBINARY guard; the asynchronous Smile parser never received the equivalent guard. No privileges or user interaction beyond the ability to submit data for parsing are required.

Affected Software

1 affected component
maven/com.fasterxml.jackson.dataformat/jackson-dataformat-smile

Event History

Oct 28, 2026
CVE Published
via MITRE·12:01 AM
Data Sourced
via MITRE·12:01 AM
DescriptionSeverityWeakness
Data Sourced
via NVD·12:17 AM
DescriptionSeverityWeakness

Frequently Asked Questions

1

Which deployments are exposed to this denial of service?

Deployments that use jackson-dataformat-smile's asynchronous NonBlockingByteArrayParser to process attacker-supplied Smile data are exposed, including reactive or asynchronous Smile endpoints. The issue is triggered during parsing of raw binary data.

2

What does an attacker need to exploit it?

An attacker only needs the ability to submit data that will be parsed as Smile; no privileges or user interaction are required. A roughly ten-byte feed can declare a raw-binary length that causes an approximately 2 GB allocation.

3

What is the observable failure mode?

A large declared length can cause an OutOfMemoryError, crashing the request or processing thread. A crafted integer-overflowing VInt can instead cause a NegativeArraySizeException that escapes the parser's JacksonException contract.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203