CVE-2026-89407: CWE-1333 Inefficient Regular Expression Complexity in FasterXML jackson-core
NumberInput.looksLikeValidNumber() in FasterXML jackson-core pre-validates "stringified numbers" with two regular expressions: PATTERN_FLOAT ([+-]?[0-9]*[\.]?[0-9]+([eE][+-]?[0-9]+)?), present since 2.17.0, and PATTERN_FLOAT_TRAILING_DOT, added in 2.17.2. PATTERN_FLOAT places adjacent quantifiers over the same character class -- an optional [0-9]* run, an optional dot, then a required [0-9]+ run -- so input that ultimately fails to match forces Java's backtracking engine to retry every possible split point of the digit run. Matching cost therefore grows with the square of the input length. An attacker who can supply JSON that an application deserializes into a numeric target type reaches this method through jackson-databind's default String-to-number coercion (StdDeserializer and NumberDeserializers for BigDecimal, BigInteger, Double and Float). Because StreamReadConstraints.maxStringLength defaults to 20,000,000 characters, no constraint bounds the input before it reaches the regex. Testing by the reporter confirmed O(n^2) growth across five consecutive input-size doublings, with a single 160,000-character string consuming roughly 74 seconds in one call; a small number of concurrent requests of ordinary body size can therefore exhaust a server's request-handling thread pool. The affected method does not exist before 2.17.0, so 2.16.x and earlier releases are not affected. The fix replaces both regular expressions with a hand-rolled single-pass scan.
AI Analysis
Technical Summary
The vulnerability arises from two regular expressions (PATTERN_FLOAT and PATTERN_FLOAT_TRAILING_DOT) used in jackson-core's NumberInput.looksLikeValidNumber() method to pre-validate stringified numbers. These regexes contain adjacent quantifiers over the same character class, causing Java's regex engine to backtrack extensively on inputs that fail to match, resulting in O(n^2) matching cost relative to input length. An attacker supplying large JSON numeric strings can trigger this behavior during deserialization via jackson-databind's default String-to-number coercion. The default maxStringLength constraint (20 million characters) does not prevent this. Testing showed a 160,000-character input took approximately 74 seconds to process, enabling denial-of-service by exhausting server thread pools. The issue affects jackson-core versions starting at 2.17.0 and was fixed by replacing the regexes with a hand-rolled single-pass scan.
Potential Impact
This vulnerability can cause denial-of-service (DoS) by allowing an attacker to supply specially crafted JSON numeric strings that trigger excessive regex backtracking during deserialization. This results in high CPU consumption and thread exhaustion on affected servers. There is no impact on confidentiality or integrity. The vulnerability requires no privileges or user interaction and is exploitable remotely via network access to JSON deserialization endpoints.
Mitigation Recommendations
A fix is available that replaces the vulnerable regular expressions with a more efficient single-pass scanning method. Users should upgrade to a jackson-core version later than the affected ranges (versions after 2.18.10, 2.21.6, 2.22.2, 3.1.6, and 3.2.1 respectively) where this fix is applied. No other mitigations are indicated. Patch status is confirmed by the vendor's description of the fix. There is no indication that this vulnerability is mitigated by configuration or that no action is required.
CVE-2026-89407: CWE-1333 Inefficient Regular Expression Complexity in FasterXML jackson-core
Description
NumberInput.looksLikeValidNumber() in FasterXML jackson-core pre-validates "stringified numbers" with two regular expressions: PATTERN_FLOAT ([+-]?[0-9]*[\.]?[0-9]+([eE][+-]?[0-9]+)?), present since 2.17.0, and PATTERN_FLOAT_TRAILING_DOT, added in 2.17.2. PATTERN_FLOAT places adjacent quantifiers over the same character class -- an optional [0-9]* run, an optional dot, then a required [0-9]+ run -- so input that ultimately fails to match forces Java's backtracking engine to retry every possible split point of the digit run. Matching cost therefore grows with the square of the input length. An attacker who can supply JSON that an application deserializes into a numeric target type reaches this method through jackson-databind's default String-to-number coercion (StdDeserializer and NumberDeserializers for BigDecimal, BigInteger, Double and Float). Because StreamReadConstraints.maxStringLength defaults to 20,000,000 characters, no constraint bounds the input before it reaches the regex. Testing by the reporter confirmed O(n^2) growth across five consecutive input-size doublings, with a single 160,000-character string consuming roughly 74 seconds in one call; a small number of concurrent requests of ordinary body size can therefore exhaust a server's request-handling thread pool. The affected method does not exist before 2.17.0, so 2.16.x and earlier releases are not affected. The fix replaces both regular expressions with a hand-rolled single-pass scan.
CVSS v3.1
Score 7.5high
Affected software
FasterXML
jackson-core
FasterXML
jackson-core
pkg:maven/FasterXML/com.fasterxml.jackson.core:jackson-corepkg:maven/FasterXML/tools.jackson.core:jackson-coreRun on your own infrastructure? Check whether these packages are installed with threat-finder — our free open-source scanner.
AI-Powered Analysis
Machine-generated threat intelligence
Technical Analysis
The vulnerability arises from two regular expressions (PATTERN_FLOAT and PATTERN_FLOAT_TRAILING_DOT) used in jackson-core's NumberInput.looksLikeValidNumber() method to pre-validate stringified numbers. These regexes contain adjacent quantifiers over the same character class, causing Java's regex engine to backtrack extensively on inputs that fail to match, resulting in O(n^2) matching cost relative to input length. An attacker supplying large JSON numeric strings can trigger this behavior during deserialization via jackson-databind's default String-to-number coercion. The default maxStringLength constraint (20 million characters) does not prevent this. Testing showed a 160,000-character input took approximately 74 seconds to process, enabling denial-of-service by exhausting server thread pools. The issue affects jackson-core versions starting at 2.17.0 and was fixed by replacing the regexes with a hand-rolled single-pass scan.
Potential Impact
This vulnerability can cause denial-of-service (DoS) by allowing an attacker to supply specially crafted JSON numeric strings that trigger excessive regex backtracking during deserialization. This results in high CPU consumption and thread exhaustion on affected servers. There is no impact on confidentiality or integrity. The vulnerability requires no privileges or user interaction and is exploitable remotely via network access to JSON deserialization endpoints.
Mitigation Recommendations
A fix is available that replaces the vulnerable regular expressions with a more efficient single-pass scanning method. Users should upgrade to a jackson-core version later than the affected ranges (versions after 2.18.10, 2.21.6, 2.22.2, 3.1.6, and 3.2.1 respectively) where this fix is applied. No other mitigations are indicated. Patch status is confirmed by the vendor's description of the fix. There is no indication that this vulnerability is mitigated by configuration or that no action is required.
Technical Details
- Data Version
- 5.2
- Assigner Short Name
- HeroDevs
- Date Reserved
- 2026-09-11T16:07:58.141Z
- Cvss Version
- 3.1
- State
- PUBLISHED
Threat ID: 6ab298c1f7a7c54106535a25
Added to database: 09/22/2026, 15:03:29 UTC
Last enriched: 09/22/2026, 15:17:41 UTC
Last updated: 09/23/2026, 01:58:06 UTC
Views: 12
Community Reviews
0 reviewsCrowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.
Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.
Actions
Updates to AI analysis require Pro Console access. Upgrade inside Console → Billing.
Need more coverage?
Upgrade to Pro Console for AI refresh and higher limits.
For incident response and remediation, OffSeq services can help resolve threats faster.
Latest Threats
Check if your credentials are on the dark web
Instant breach scanning across billions of leaked records. Free tier available.