Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify endpoint rendering user Markdown
-
DeliveryCraft large unclosed link-reference definition
-
ExploitSubmit payload to parser
-
ExecutionTrigger O(n²) cons-string flattening
-
ImpactExhaust CPU / stall event loop
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Triggered against default configurations - the advisory explicitly states 'No options are required to trigger it,' so no non-default feature or setting is needed. The one concrete prerequisite is that the target application must pass attacker-controlled Markdown text to markdown-it's parser (inline parsing does not even need to be enabled; block-only parsing is still quadratic). The specific input is a link reference definition (a line beginning with '[') whose label or title is never closed, spanning many continuation lines. Limiting factors that reduce realistic risk: the attacker needs to supply a sizeable payload - impact is negligible at small sizes and only becomes seconds-to-minutes of CPU at ~200 KB-800 KB - so endpoints that cap request/body size or Markdown input length sharply blunt exploitation; impact is confined to CPU/time (no memory-unbounded crash, no data exposure); and only markdown-it versions 14.1.0-14.3.2 and 15.0.0-15.0.2 are affected (13.x and the patched 14.3.3/15.0.3 are not). |
| Impact | This is a genuine but bounded availability risk. The provided CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, base 7.5) is internally consistent with the description: markdown-it is a library, so when an application exposes Markdown parsing to untrusted input the flaw is reachable over the network with low complexity and no authentication or user interaction, and the impact is purely availability (CWE-400 resource exhaustion), matching C:N/I:N/A:H. The GHSA advisory includes a working proof-of-concept with concrete measurements (200 KB → 3.6 s, 400 KB → 18.1 s, 800 KB → 74 s, roughly 4-5× per doubling), so publicly available exploit code exists. However, this is NOT confirmed actively exploited - there is no CISA KEV listing in the input and no EPSS score was provided, so real-world exploitation probability cannot be quantified from the data supplied. SSVC-style reasoning: technical impact is partial (single-event CPU stall, no code execution or data impact) and the flaw is automatable (trivially scriptable large payloads), but the practical ceiling is a CPU-bound slowdown rather than full outage per request. Net: treat as a real patch-worthy priority for any service that parses attacker-supplied Markdown, but it is a lower urgency than a code-execution or KEV-listed flaw - a legitimately high-CVSS availability bug rather than an emergency. |
| Exploit ScenarioDerived | An attacker submits a single large Markdown document (hundreds of KB) containing a link reference definition whose label or title is never closed to any endpoint that renders user-supplied Markdown with markdown-it (e.g. a comment, issue, chat, or wiki field). Because of the O(n²) string-flattening behavior, parsing an ~800 KB payload consumes roughly 74 seconds of CPU on one thread; repeated submissions can stall or exhaust the server's event loop. A proof-of-concept is published in the GHSA advisory, so weaponizing this requires no original research. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 20, 2026
Denial of service in the markdown-it Markdown parser (npm package markdown-it) affects versions 14.1.0 through 14.3.2 and 15.0.0 through 15.0.2, where a single link reference definition whose label or title is never closed causes quadratic-time parsing under default options. Unauthenticated remote attackers who can get attacker-controlled Markdown processed by the library can burn CPU proportional to the square of the input size - roughly 3.6 seconds at 200 KB, 18 seconds at 400 KB, and 74 seconds at 800 KB - with impact confined to availability (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, 7.5). Proof-of-concept code is published in the upstream advisory, and no active exploitation has been reported (not listed in CISA KEV); the vendor has released fixed versions 14.3.3 and 15.0.3.
RemediationAI
Vendor-released patches exist: upgrade to markdown-it 14.3.3 (for the 14.x line) or 15.0.3 (for the 15.x line), which implement the offset-tracking rewrite and the 999-code-point CommonMark label cap; the underlying fixes are commits 48fbc465812c440020c663f040ab22deaf8f1eca and d99f48839d37af6fd8a2617516c43dab90755503, documented in advisory GHSA-gfr2-rv44-r23c. Note that merely disabling inline parsing does not mitigate the issue, because block-only parsing is still quadratic. Where an immediate upgrade is impossible, actionable compensating controls are: (1) enforce a hard cap on Markdown input length at the application or reverse-proxy boundary - the advisory's measurements show impact is negligible below roughly 100 KB and becomes seconds-to-minutes of CPU at 200-800 KB, so rejecting bodies over a modest size threshold (for example 50-100 KB) sharply blunts exploitation, with the trade-off that legitimately large documents must be handled out-of-band; (2) call md.disable('reference') on instances that process untrusted input, which makes the pathological input linear per the advisory, at the cost of no longer parsing link reference definitions (documents relying on reference-style links will render differently); and (3) cap worker/request CPU time or run parsing in a process pool with timeouts and per-request admission limits so any remaining pathological input cannot monopolize a shared event loop. Validate that no vendored or transitively bundled copy of markdown-it 14.1.0-14.3.2 or 15.0.0-15.0.2 remains in the dependency tree after upgrading, and add a pathological regression test with a 100k-line unclosed title and label as the advisory recommends.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
markdown-it is a widely embedded CommonMark parser for JavaScript (runs client-side in browsers and server-side in Node.js). The bug is a CWE-400 uncontrolled resource consumption class issue caused by an algorithmic complexity flaw rather than a memory-safety bug. A regression introduced by PR #1004 in 14.0.0, the block rule in src/rules_block/reference.ts accumulates continuation lines with str += lineContent (at lines 74, 83, 100, 133 and 150) and then keeps indexing the accumulated string via str.charCodeAt(pos) in the label/whitespace loops and str.slice(...) in parseLinkTitle. Because V8 represents += as a cons-string, the next charCodeAt or slice call flattens it and copies everything collected so far, so a definition spanning n lines costs O(n²) - and this scanning happens before the rule concludes the definition is invalid. Isolation testing confirms the rule is responsible: block-only parsing with inline disabled is still quadratic, md.disable('reference') makes the same input linear, and the text without a leading '[' is linear. The upstream fix rewrites the rule to track offsets in state.src, collect line slices in an array, and enforce the CommonMark §6.3 999-code-point label limit before pulling further lines; the advisory also notes that open PR #1215 edits the same file but its label check runs after the label loop and therefore does not bound either variant.
Know when Markdown It gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Library parses untrusted input remotely with no auth or interaction (AV:N/AC:L/PR:N/UI:N); impact is pure CPU/availability exhaustion (C:N/I:N/A:H) with no scope change.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
markdown-it is a Markdown parser. From versions 14.1.0 to before 14.3.3, and 15.0.0 to before 15.0.3, a link reference definition whose label or title is never closed is O(n²) with default options. Continuation lines are pulled lazily with str += lineContent in src/rules_block/reference.ts, and the subsequent charCodeAt and slice calls flatten the V8 cons-string, copying everything collected so far; this runs before the rule decides the definition is invalid. No options are required to trigger it. This issue has been patched in versions 14.3.3 and 15.0.3.
Technical POC Analysis
Algorithmic-complexity denial of service: CWE-400 (Uncontrolled Resource Consumption) per the CVE record, with the advisory additionally classifying it as CWE-407 (Inefficient Algorithmic Complexity).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
The markdown-it npm package can be driven into quadratic CPU consumption by a single malformed link reference definition, allowing an unauthenticated attacker to slow or exhaust any application that processes untrusted Markdown; publicly available exploit code exists, although the issue is not listed in CISA KEV. Because a modest 800 KB input can consume roughly 74 seconds of CPU, the practical exposure is customer-facing latency and outages in services that render user-submitted content, not data disclosure or integrity loss. Vendor-fixed versions 14.3.3 and 15.0.3 are available, so leadership should treat this as a time-bound availability remediation rather than an unpatched crisis.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
More in Markdown It
View allDenial of service in linkify-it before 5.0.2 allows remote attackers to exhaust CPU by submitting crafted text containin
Improper Neutralization of Input During Web Page Generation (XSS or 'Cross-site Scripting') vulnerability in markdown-it
Algorithmic complexity (quadratic-time) denial of service in markdown-it's smartquotes typographic rule affects releases
markdown-it before 4.1.0 does not block data: URLs. Rated medium severity (CVSS 5.3), this vulnerability is remotely exp
Markdown-It versions up to 14.1.1 is affected by inefficient regular expression complexity (redos) (CVSS 5.3).
Quadratic processing in markdown-it (prior to 14.3.3 and 15.0.3) allows attacker-controlled Markdown to block the event
EUVD-2026-105358
GHSA-gfr2-rv44-r23c
NVD
CVE.org
EPSS
Exploit-DB