The fix released in jackson-core 2.18.6 and 2.21.1 for CVE-2026-18401 (GHSA-72hv-8253-57qq, number length constraint bypass in the non-blocking parser) is incomplete. This record covers the remaining bypass.
The earlier fix wired validateIntegerLength() into a new _setIntLength() helper and invoked it wherever the integer portion of a number is decided: a terminator byte arrives, a '.' or 'e'/'E' is seen, or input ends inside a fully buffered value. It was not invoked on the attacker-relevant path where the parser runs out of input while still inside the MINOR_NUMBER_INTEGER_DIGITS minor state and returns NOT_AVAILABLE to the caller.
As a result, an attacker who streams JSON to a non-blocking parser in many small chunks, without ever sending a terminator byte, keeps the parser inside MINOR_NUMBER_INTEGER_DIGITS indefinitely. _textBuffer.expandCurrentSegment() grows the accumulator on every chunk while validateIntegerLength() is never called. The accumulator is bounded only by maxStringLength (20 MiB by default) rather than by maxNumberLength (1000 by default), an amplification of roughly 20,000x over the documented limit. Because Java char values occupy two bytes, a single connection can be driven to approximately 40 MiB of heap before the validator finally fires when the value completes.
The equivalent fraction-path code is correct: _finishFloatFraction() calls _setFractLength() before its NOT_AVAILABLE return. The missing call affects the integer-digit paths in _startPositiveNumber(), _startNegativeNumber() and _finishNumberIntegralPart() in NonBlockingUtf8JsonParserBase.
Impact: reactive frameworks such as Spring WebFlux/Reactor, Quarkus, Helidon and Vert.x feed inbound HTTP or gRPC bytes to the async parser as they arrive, which is precisely the chunked-feed shape required. Operators who set StreamReadConstraints.maxNumberLength expecting it to cap memory per number value do not get that guarantee; memory accumulates per concurrent connection and attacker-controlled concurrency can exhaust the JVM heap. The synchronous parsers (UTF8StreamJsonParser, ReaderBasedJsonParser) and the async parser operating on complete input are not affected.
Exploitation requires only the ability to stream data to a parsing endpoint; no privileges or user interaction are needed.
This issue affects com.fasterxml.jackson.core:jackson-core from version 2.15.0 through 2.18.7, and from 2.19.0 through 2.21.3, and tools.jackson.core:jackson-core from 3.0.0 through 3.1.3. Versions prior to 2.15.0 are not affected, because StreamReadConstraints -- which defines the maxNumberLength setting -- was first introduced in jackson-core 2.15.0, so no such constraint exists to be bypassed in earlier releases. Note that GHSA-r7wm-3cxj-wff9 states the affected 2.x range without a lower bound. The 2.22.x and 3.2.x release lines are not affected: those branches were created after the fix commit landed on 2026-05-21 and therefore contain it from their initial releases (2.22.0, tagged 2026-06-03, and 3.2.0, tagged 2026-06-08).
CVSS Details
- CVSS 4.0 Base Score: 8.7 (HIGH)
- CVSS 4.0 Vector: (CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Red Hat Jboss Eap | — | Upgrade Red Hat JBoss EAP to the latest version | Aug 12, 2026 | Aug 4, 2026 |
| Redhat_linux | — | Upgrade eap8-hibernate-enversUpgrade eap8-netty-transport-native-unix-commonUpgrade eap8-jbossws-common-toolsUpgrade eap8-ironjacamar-common-spiUpgrade eap8-jbossws-apiUpgrade eap8-netty-commonUpgrade eap8-jackson-dataformats-textUpgrade eap8-codemodelUpgrade eap8-ironjacamarUpgrade eap8-undertowUpgrade eap8-jackson-databindUpgrade eap8-slf4j-apiUpgrade eap8-wildfly-elytronNo solution existsUpgrade eap8-eap-product-conf-wildfly-ee-feature-packUpgrade eap8-netty-codec-socksUpgrade eap8-ironjacamar-validatorUpgrade eap8-activemq-artemis-hqclient-protocolUpgrade eap8-netty-transport-native-epoll-debuginfoUpgrade eap8-txw2Upgrade eap8-netty-codec-httpUpgrade eap8-wildfly-javadocsUpgrade eap8-netty-transport-classes-epollUpgrade eap8-ironjacamar-core-apiUpgrade eap8-neethiUpgrade eap8-xsomUpgrade eap8-activemq-artemis-jakarta-raUpgrade eap8-activemq-artemis-jdbc-storeUpgrade eap8-jackson-jaxrs-baseUpgrade eap8-netty-transportUpgrade eap8-apache-cxf-servicesUpgrade eap8-ironjacamar-jdbcUpgrade eap8-activemq-artemis-cliUpgrade eap8-activemq-artemis-serverUpgrade eap8-activemq-artemis-jakarta-clientUpgrade eap8-jaxb-coreUpgrade eap8-saaj-implUpgrade eap8-jboss-remotingUpgrade eap8-jackson-datatype-jsr310Upgrade eap8-netty-resolverUpgrade eap8-rngomUpgrade eap8-log4jUpgrade eap8-jackson-modules-baseUpgrade eap8-activemq-artemis-commonsUpgrade eap8-activemq-artemisUpgrade eap8-jbossws-spiUpgrade eap8-jbossws-cxfUpgrade eap8-bouncycastle-pkixUpgrade eap8-xml-securityUpgrade eap8-activemq-artemis-journalUpgrade eap8-relaxng-datatypeUpgrade eap8-wildfly-java-jdk21Upgrade eap8-jakarta-xml-bind-apiUpgrade eap8-netty-codecUpgrade eap8-httpcomponents-asyncclientUpgrade eap8-netty-resolver-dnsUpgrade eap8-netty-codec-dnsUpgrade eap8-nettyUpgrade eap8-jaxbintrosUpgrade eap8-jbossws-jaxws-undertow-httpspiUpgrade eap8-jackson-jaxrs-json-providerUpgrade eap8-activemq-artemis-core-clientUpgrade eap8-jackson-annotationsUpgrade eap8-wildfly-elytron-toolUpgrade eap8-bouncycastle-pgUpgrade eap8-apache-cxfUpgrade eap8-activemq-artemis-jakarta-serverUpgrade eap8-parssonUpgrade eap8-jaxbUpgrade eap8-activemq-artemis-hornetq-protocolUpgrade eap8-wildfly-modulesUpgrade eap8-wildflyUpgrade eap8-cryptacularUpgrade eap8-nimbus-jose-jwtUpgrade eap8-netty-handler-proxyUpgrade eap8-jaxb-xjcUpgrade eap8-hibernateUpgrade eap8-eap-product-conf-parentUpgrade eap8-bouncycastle-provUpgrade eap8-artemis-wildfly-integrationUpgrade eap8-ironjacamar-common-apiUpgrade eap8-apache-cxf-rtUpgrade eap8-netty-transport-native-epollUpgrade eap8-netty-bufferUpgrade eap8-netty-handlerUpgrade eap8-hibernate-coreUpgrade eap8-slf4jUpgrade eap8-activemq-artemis-selectorUpgrade eap8-activemq-artemis-jakarta-service-extensionsUpgrade eap8-bouncycastleUpgrade eap8-ws-commons-XmlSchemaUpgrade eap8-jackson-datatype-jdk8Upgrade eap8-jackson-modules-java8Upgrade eap8-bouncycastle-jmailUpgrade eap8-jsf-implUpgrade eap8-ironjacamar-common-implUpgrade eap8-apache-cxf-toolsUpgrade eap8-jaxb-jxcUpgrade eap8-jackson-module-jakarta-xmlbind-annotationsUpgrade eap8-jackson-coreUpgrade eap8-jboss-loggingUpgrade eap8-jaxb-runtimeUpgrade eap8-ironjacamar-deployers-commonUpgrade eap8-jackson-dataformat-yamlUpgrade eap8-ironjacamar-core-implUpgrade eap8-activemq-artemis-dtoUpgrade eap8-bouncycastle-util | Aug 10, 2026 | Aug 4, 2026 |
Prioritise with Active Threat Intelligence
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub