CVE-2026-89407
📛 CVE Title
jackson-core: quadratic backtracking in NumberInput.PATTERN_FLOAT via looksLikeValidNumber() enables ReDoS
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.
Overview
- State
- PUBLISHED
- Assigner (CNA)
- HeroDevs
- CVSS severity
- HIGH
- CVSS score
- 7.5 / 10
- CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H- Effective score
- 7.5 / 10 HIGH source: CNA overview
- CWE(s)
-
CWE-1333,CWE-400 - Reserved
- 2026-09-11
- Published
- 2026-09-22 14:53 UTC
- Last updated
- 2026-09-22 15:52 UTC
- Source
- https://raw.githubusercontent.com/CVEProject/cvelistV5/main/cves/2026/89xxx/CVE-2026-89407.json
- Linked Threat
- CVE-2026-89407 — jackson-core: quadratic backtracking in NumberInput.PATTERN_FLOAT via looksLikeValidNumber() enables ReDoS
NVD triage scoring NVD CVE 2.0
Layer NVD adds on top of the CNA's CVE record — published / last-modified timestamps, exploitability / impact subscores, and the FIRST.org EPSS probability that this CVE will be exploited in the wild in the next 30 days.
- NVD published
- 2026-09-22 15:17:21 UTC
- NVD last modified
- 2026-09-22 20:00:03 UTC
- NVD CVSS v3.1
- 7.5 / 10 HIGH source: 36c7be3b-2937-45df-85ea-ca7133ea542c
- NVD CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H- Exploitability subscore
- 3.9 / 10
- Impact subscore
- 3.6 / 10
NVD / KEV / EPSS data refreshed 2026-09-23 02:34 UTC. Re-run the 🛰 Backfill from NVD button above to refresh.
European Union Vulnerability Database ENISA EUVD
ENISA's official EU repository for curated vulnerability intelligence. Carries a separate identifier (EUVD-YYYY-NNNN) and frequently exposes an earlier-published description + CVSS than NVD does.
- EUVD ID
-
EUVD-2026-84498 - Assigner
- HeroDevs
- Published
- Sep 22, 2026, 2:53:20 PM
- Updated
- Sep 22, 2026, 3:52:44 PM
- EUVD base score (CVSS 3.1)
-
7.5 / 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - EUVD-reported EPSS
- 0.0000
- Vendors
- FasterXML
- Products
-
jackson-core (2.17.0 ≤2.18.10)jackson-core (3.2.0 ≤3.2.1)jackson-core (2.19.0 ≤2.21.6)jackson-core (2.22.0 ≤2.22.2)jackson-core (3.0.0 ≤3.1.6)
ENISA 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.
Affected products (2)
| Vendor | Product | Versions | Platforms |
|---|---|---|---|
| FasterXML | jackson-core |
2.17.0 (affected),
2.19.0 (affected),
2.22.0 (affected)
|
— |
| FasterXML | jackson-core |
3.0.0 (affected),
3.2.0 (affected)
|
— |
Vendor references (4)
References embedded in the original CVE record by the assigning CNA.
- GHSA-p6pp-m3f8-5c89 vendor-advisory
- FasterXML/jackson-core#1649 issue-tracking
- FasterXML/jackson-core#1650 patch
- FasterXML/jackson-core#1701 (2.18 backport) patch
Web references (0)
DuckDuckGo results ranked by threat-intel / vendor advisory domains. Generated by the 🔎 Find references (web) button above — same flow as the Remediations search.
No web references attached yet.
NVD-tagged references (5)
Reference list NVD curates from the CNA record, vendor advisories, and third-party reports. The tag chips below are NVD's analyst-assigned categories.
- https://github.com/FasterXML/jackson-core/issues/1649 36c7be3b-2937-45df-85ea-ca7133ea542c
- https://github.com/FasterXML/jackson-core/pull/1650 36c7be3b-2937-45df-85ea-ca7133ea542c
- https://github.com/FasterXML/jackson-core/pull/1701 36c7be3b-2937-45df-85ea-ca7133ea542c
- https://github.com/FasterXML/jackson-core/security/advisories/GHSA-p6pp-m3f8-5c89 36c7be3b-2937-45df-85ea-ca7133ea542c
- https://github.com/FasterXML/jackson-core/security/advisories/GHSA-p6pp-m3f8-5c89 134c704f-9b21-4f2e-91b3-4a467353bcc0
Remediations (10)
Remediations are stored against the linked Threat row; the list below is deduplicated across both pages.
-
web:catalog.update.microsoft.com
Welcome to the Microsoft Update Catalog site. We want your feedback! Visit our newsgroup or send us an email to provide us with your thoughts and suggestions. To get started using the site, enter in your search terms in the Search box above or visit our FAQ for search tips. |Newsgroup|Send us your feedback
2026-09-23 15:14 UTC -
web:cvealert.net
CVE-2026-89407 - HIGH vulnerability with CVSS score 7.5
2026-09-23 15:14 UTC -
web:cvetodo.com
CVE-2026-89407 is a CVSS 7.5 high-severity vulnerability in FasterXML Jackson-core. Includes technical details, affected versions, and mitigation steps.
2026-09-23 15:14 UTC -
web:feedly.com
Possible patch version of 2.18 , open for development as of August 2026 . Following fixes would be included in this patch release. Changes, core Streaming #1649 : Optimize NumberInput.looksLikeValidNumber [ CVE-2026-89407 ] #1698 : Honor maxErrorTokenLength in UTF8DataInputJsonParser [GHSA-7hhh-6rmp-j9qf] Databind #6185 : Unresolved IPv6 InetSocketAddress serialized without brackets, losing port ...
2026-09-23 15:14 UTC -
web:fixitphill.com
Patch Microsoft Exchange CVE - 2026 -42897 with June 2026 security updates, keep EEMS mitigations during rollout, and verify OWA and mail flow.
2026-09-23 15:14 UTC -
web:guide.sonatype.com
Technical security analysis for CVE-2026-89407 . CVSS 7.5 severity. View CVSS vectors, CWE classifications, and exploit maturity ratings.
2026-09-23 15:14 UTC -
web:senserva.com
Every Microsoft security patch (KB) and the CVEs it fixes, with severity, CVSS, and CISA KEV status. Cross-linked to the CVE reference.
2026-09-23 15:14 UTC -
web:support.microsoft.com
Be aware that the update in the Microsoft Download Center applies to the Microsoft Installer (.msi)-based edition of Office 2016. It doesn't apply to the Office 2016 Click-to-Run editions, such as Microsoft Office 365 Home. (See What version of Office am I using?) How to get and install the update Method 1: Microsoft Update This update is available from Microsoft Update. When you turn on ...
2026-09-23 15:14 UTC -
web:windowsforum.com
Microsoft's Fastest Fix Is a Mitigation , Not a Patch The important detail in Microsoft's May 14 notice is that there is no permanent Exchange security update available yet for CVE - 2026 -42897. Microsoft says it is working on one and will release it later for affected supported paths, but today's defensive action is mitigation .
2026-09-23 15:14 UTC -
web:www.cisecurity.org
<p>Multiple vulnerabilities have been discovered in Microsoft products, the most severe of which could allow for remote code execution. Successful exploitation of the most severe of these vulnerabilities could result in an attacker gaining the same privileges as the logged-on user. Depending on the privileges associated with the user, an attacker could then install programs; view, change, or ...
2026-09-23 15:14 UTC
AI Forensic Analysis
Only Available for Registered Users. Sign in to view.
Raw JSON
The full cvelistV5 record. Download as CVE-2026-89407.json.
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-89407",
"options": [
{
"Exploitation": "poc"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-22T15:52:15.349840Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-22T15:52:44.881Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"references": [
{
"tags": [
"exploit"
],
"url": "https://github.com/FasterXML/jackson-core/security/advisories/GHSA-p6pp-m3f8-5c89"
}
],
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://repo1.maven.org/maven2",
"defaultStatus": "unaffected",
"packageName": "com.fasterxml.jackson.core:jackson-core",
"product": "jackson-core",
"programRoutines": [
{
"name": "com.fasterxml.jackson.core.io.NumberInput.looksLikeValidNumber"
}
],
"repo": "https://github.com/FasterXML/jackson-core",
"vendor": "FasterXML",
"versions": [
{
"lessThanOrEqual": "2.18.10",
"status": "affected",
"version": "2.17.0",
"versionType": "maven"
},
{
"lessThanOrEqual": "2.21.6",
"status": "affected",
"version": "2.19.0",
"versionType": "maven"
},
{
"lessThanOrEqual": "2.22.2",
"status": "affected",
"version": "2.22.0",
"versionType": "maven"
}
]
},
{
"collectionURL": "https://repo1.maven.org/maven2",
"defaultStatus": "unaffected",
"packageName": "tools.jackson.core:jackson-core",
"product": "jackson-core",
"programRoutines": [
{
"name": "tools.jackson.core.io.NumberInput.looksLikeValidNumber"
}
],
"repo": "https://github.com/FasterXML/jackson-core",
"vendor": "FasterXML",
"versions": [
{
"lessThanOrEqual": "3.1.6",
"status": "affected",
"version": "3.0.0",
"versionType": "maven"
},
{
"lessThanOrEqual": "3.2.1",
"status": "affected",
"version": "3.2.0",
"versionType": "maven"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "manqingzhou"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "<p>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. </p><p>Matching cost therefore grows with the square of the input length. </p><p>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). </p><p>Because StreamReadConstraints.maxStringLength defaults to 20,000,000 characters, no constraint bounds the input before it reaches the regex. </p><p>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. </p><p>The affected method does not exist before 2.17.0, so 2.16.x and earlier releases are not affected. </p><p>The fix replaces both regular expressions with a hand-rolled single-pass scan.</p>"
}
],
"value": "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.\u00a0\n\n\n\nMatching cost therefore grows with the square of the input length.\u00a0\n\n\n\nAn 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).\u00a0\n\n\n\nBecause StreamReadConstraints.maxStringLength defaults to 20,000,000 characters, no constraint bounds the input before it reaches the regex.\u00a0\n\n\n\nTesting 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.\u00a0\n\n\n\nThe affected method does not exist before 2.17.0, so 2.16.x and earlier releases are not affected.\u00a0\n\n\n\nThe fix replaces both regular expressions with a hand-rolled single-pass scan."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-1333",
"description": "CWE-1333 Inefficient Regular Expression Complexity",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-400",
"description": "CWE-400 Uncontrolled Resource Consumption",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-22T14:53:20.999Z",
"orgId": "36c7be3b-2937-45df-85ea-ca7133ea542c",
"shortName": "HeroDevs"
},
"references": [
{
"name": "GHSA-p6pp-m3f8-5c89",
"tags": [
"vendor-advisory"
],
"url": "https://github.com/FasterXML/jackson-core/security/advisories/GHSA-p6pp-m3f8-5c89"
},
{
"name": "FasterXML/jackson-core#1649",
"tags": [
"issue-tracking"
],
"url": "https://github.com/FasterXML/jackson-core/issues/1649"
},
{
"name": "FasterXML/jackson-core#1650",
"tags": [
"patch"
],
"url": "https://github.com/FasterXML/jackson-core/pull/1650"
},
{
"name": "FasterXML/jackson-core#1701 (2.18 backport)",
"tags": [
"patch"
],
"url": "https://github.com/FasterXML/jackson-core/pull/1701"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "<p>Upgrade to com.fasterxml.jackson.core:jackson-core 2.18.11, 2.21.7 or 2.22.3, or to tools.jackson.core:jackson-core 3.1.7 or 3.2.2. The 2.17.x, 2.19.x, 2.20.x and 3.0.x lines received no fix on their own branch and are no longer maintained upstream; consumers of those lines must move forward to a maintained release.</p>"
}
],
"value": "Upgrade to com.fasterxml.jackson.core:jackson-core 2.18.11, 2.21.7 or 2.22.3, or to tools.jackson.core:jackson-core 3.1.7 or 3.2.2. The 2.17.x, 2.19.x, 2.20.x and 3.0.x lines received no fix on their own branch and are no longer maintained upstream; consumers of those lines must move forward to a maintained release."
}
],
"title": "jackson-core: quadratic backtracking in NumberInput.PATTERN_FLOAT via looksLikeValidNumber() enables ReDoS",
"workarounds": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "<p>Until upgrading, lower StreamReadConstraints.maxStringLength well below its default of 20,000,000 characters so that oversized string tokens are rejected before number coercion, and apply wall-clock timeouts to parse and coercion operations. Because matching cost is quadratic in token length, a tight length bound substantially reduces worst-case cost. These are mitigations, not a complete fix.</p>"
}
],
"value": "Until upgrading, lower StreamReadConstraints.maxStringLength well below its default of 20,000,000 characters so that oversized string tokens are rejected before number coercion, and apply wall-clock timeouts to parse and coercion operations. Because matching cost is quadratic in token length, a tight length bound substantially reduces worst-case cost. These are mitigations, not a complete fix."
}
]
}
},
"cveMetadata": {
"assignerOrgId": "36c7be3b-2937-45df-85ea-ca7133ea542c",
"assignerShortName": "HeroDevs",
"cveId": "CVE-2026-89407",
"datePublished": "2026-09-22T14:53:20.999Z",
"dateReserved": "2026-09-11T16:07:58.141Z",
"dateUpdated": "2026-09-22T15:52:44.881Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}