Skip to main content

markdown-it EUVDEUVD-2026-105358

| CVE-2026-111758 HIGH
Uncontrolled Resource Consumption (CWE-400)
2026-10-20 GitHub_M GHSA-gfr2-rv44-r23c
7.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify endpoint rendering user Markdown
  2. Delivery
    Craft large unclosed link-reference definition
  3. Exploit
    Submit payload to parser
  4. Execution
    Trigger O(n²) cons-string flattening
  5. Impact
    Exhaust 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.5% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

markdown-it 15.0.0, < 15.0.3
markdown-it 14.1.0, < 14.3.3

Affected Packages

npm markdown-it fix: 14.3.3, 15.0.3

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

Vendor (GitHub_M) PRIMARY 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 7.5 HIGH

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.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Red Hat 7.5 HIGH

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

Lifecycle Timeline

2
Patch available
Oct 20, 2026 - 22:19 EUVD
CVE Published
Oct 20, 2026 - 20:28 cve.org
HIGH 7.5

DescriptionCVE.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.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 333 npm packages depend on markdown-it (113 direct, 225 indirect)

Ecosystem-wide dependent count for version 14.1.0.

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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.5%
Top 62% exploitable
Prevalence
High
extremely popular npm Markdown parser embedded in many web apps
Threat Intel
1
1 source
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.5%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
High

Priority Score

38
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy