Skip to main content

markdown-it EUVDEUVD-2026-104538

| CVE-2026-111759 HIGH
Uncontrolled Resource Consumption (CWE-400)
2026-10-19 GitHub_M GHSA-r7fv-28h4-cvq7
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
    Submit crafted Markdown to renderer
  2. Exploit
    Trigger quadratic smartquotes stack rescans
  3. Impact
    Exhaust CPU and deny service

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

Requires the consuming application to configure markdown-it with typographer: true (the smartquotes typographic replacement feature), which is NOT the default (default typographer: false is unaffected) - the advisory notes this option is nonetheless commonly enabled. The application must also pass attacker-controlled/untrusted Markdown into the parser. The specific trigger is input containing many opening double quotes followed by unmatched closing single quotes (or the same with quote types reversed), which forces repeated scans of the entire opener stack (quadratic time). Limiting factors: non-default configuration required, impact is availability/CPU exhaustion only (no code execution or data exposure), and affected versions are those prior to 14.3.2 and 15.0.2.

Impact

This is a CWE-400 uncontrolled resource consumption (algorithmic complexity) flaw in markdown-it's smartquotes rule. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, base 7.5 HIGH) is availability-only - no confidentiality or integrity impact - reflecting a denial-of-service, not RCE or data exposure. The network vector and lack of required privileges or user interaction are plausible because markdown-it is typically invoked server-side on user-submitted content, so an unauthenticated remote user can supply the malicious Markdown. However, a critical caveat tempers the PR:N/AC:L reading: exploitation is gated on the application running with typographer: true, which is NOT the default (typographer: false). This is a deployment precondition rather than an attack complexity factor, so it does not lower the CVSS AC, but defenders must verify their own configuration. No EPSS score, SSVC decision, KEV listing, or explicit POC flag was provided in the input. The commit evidence includes a pathological test case ('"a '.repeat(100000) + "b' ".repeat(100000)) that demonstrates the trigger, so a working trigger pattern is effectively public via the upstream fix, but there is no indication of active exploitation. Net: a genuine, easily-triggered DoS against affected configurations, but availability-only and config-dependent - a real priority for services that parse untrusted Markdown with typographer enabled, lower priority for default deployments.

Exploit ScenarioDerived

An application (e.g., a comment system, wiki, or chat renderer) uses markdown-it with typographer: true to render user-submitted content. A remote unauthenticated attacker posts a message containing many opening double quotes followed by unmatched closing single quotes, forcing the smartquotes rule into repeated full scans of the opener stack. The quadratic processing time pins a CPU core and stalls or hangs the request, and repeated submissions can exhaust server resources. The upstream pathological test demonstrates the exact trigger pattern.

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

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

Alert me

AnalysisAIv1 – Oct 19, 2026

Algorithmic complexity (quadratic-time) denial of service in markdown-it's smartquotes typographic rule affects releases prior to 14.3.2 and 15.0.2 when the parser is configured with typographer: true. Unauthenticated remote attackers who can submit Markdown for rendering - for example in comment fields, chat messages, or wiki pages - can supply a document containing many opening double quotes followed by unmatched closing single quotes (or the same pattern with quote types reversed), forcing the smartquotes matching loop to rescan the entire opener stack on every quote and driving CPU consumption up quadratically with input size. The default typographer: false configuration is unaffected, and the impact is limited to availability (CVSS 3.1: AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, 7.5); no public exploit code was identified at time of analysis and the issue is not confirmed actively exploited (CISA KEV), though the advisory notes the vulnerable option is enabled with high probability in real deployments.

RemediationAI

Vendor-released patch: upgrade markdown-it to 14.3.2 or 15.0.2 (or later) - release notes at https://github.com/markdown-it/markdown-it/releases/tag/14.3.2 and https://github.com/markdown-it/markdown-it/releases/tag/15.0.2, advisory at https://github.com/markdown-it/markdown-it/security/advisories/GHSA-r7fv-28h4-cvq7; the underlying fixes are the commits 1b379c1b6d0522421bd1a51b77337c79af2c8670, cf27366035edf9196667110c47d9d67b030a4152 and daf5a3c32303e5d9de01b12eeb725fb5990b8162. Because markdown-it is frequently a transitive dependency, regenerate lockfiles and audit the resolved version rather than only the top-level manifest. If an immediate upgrade is not possible, the most effective compensating control is to leave typographer at its default false, or - where typographic output is still wanted - disable only the affected rule with md.core.ruler.disable('smartquotes') while keeping typographer: true; the trade-off is loss of curly-quote substitution in rendered output, which is cosmetic. As a secondary layer, cap accepted Markdown input length and quote density before parsing, apply per-request CPU timeouts or run rendering in a worker with a hard execution budget, and rate-limit endpoints that render untrusted user content; these reduce but do not eliminate the quadratic blow-up for sufficiently large payloads and add latency or false rejections for legitimate long documents.

Affected VersionsENISA

markdown-it 15.0.0, < 15.0.2
markdown-it < 14.3.2

Affected Packages

npm markdown-it fix: 14.3.2, 15.0.2

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 JavaScript/TypeScript Markdown parser whose core rule chain includes a 'smartquotes' typographer rule that replaces straight quotes with locale-specific curly quotes after inline tokenization. The rule maintains a stack of candidate opening quotes across inline tokens; when a candidate closing quote was encountered, the original implementation rewound the stack with a linear backward scan (for j = stack.length - 1; j >= 0; j--) looking for a matching opener at the same nesting level and of the same quote type. Because that scan ran once per quote character and could traverse the full stack each time, an attacker who supplies many openers of one quote type followed by many unmatched closers of the other type (or the mirrored pattern) induces O(n²) work - a classic CWE-400 uncontrolled resource consumption / algorithmic complexity weakness with no memory-safety or injection component. The upstream fix replaces the linear rewind with a per-nesting-level index: a QuoteOpener record stores token, position, quote type, level and a prevSame link, and a heads Map tracks the most recent single- and double-quote opener index for each level. Lookup for a closing quote becomes a constant-time Map read (heads.get(thisLevel)?.[isSingle ? 'single' : 'double']), and a truncateStack(length) helper pops entries once, repairing the per-level head pointers as it goes. The commits also add a pathological-input regression test exercising '"a '.repeat(100000) + "b' ".repeat(100000) with typographer: true.

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

Untrusted Markdown is parsed remotely without auth or interaction, and a short crafted input reliably causes quadratic CPU blowup; the typographer:true requirement is a deployment precondition, not attack complexity, and impact is availability-only.

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 19, 2026 - 19:03 EUVD
CVE Published
Oct 19, 2026 - 17:39 cve.org
HIGH 7.5

DescriptionCVE.org

markdown-it is a Markdown parser. Prior to 14.3.2 and 15.0.2, when typographer: true is enabled, specially crafted Markdown can cause quadratic processing time in the smartquotes rule, potentially leading to denial of service in applications processing untrusted input. Many opening double quotes followed by unmatched closing single quotes cause repeated scans of the entire opener stack. The same issue occurs with the quote types reversed. The default configuration (typographer: false) is not affected, but this option is enabled with high probability. This issue is fixed in versions 14.3.2 and 15.0.2.

Blast Radius

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

Ecosystem-wide dependent count for version 15.0.0.

Technical POC Analysis

CWE-400 (Uncontrolled Resource Consumption), mapped by the advisory additionally to CWE-407 (Inefficient Algorithmic Complexity): a quadratic-time (O(n^2)) algorithmic complexity flaw in markdown-it'…

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

markdown-it, the Markdown rendering library embedded in our comment, chat, and wiki features, contains a denial-of-service flaw that lets an unauthenticated visitor exhaust application server CPU with a single crafted message. Any internet-facing surface that renders user-submitted Markdown and has the library's typographic-quote option enabled is exposed, so public comment forms and collaboration tools could be degraded or taken offline for all users during an attack. No public exploit code has been identified and there is no confirmed active exploitation, making this an availability and resilience exposure rather than an active incident.

Business Impact: High
Compensating Controls

Apply vendor patch (markdown-it 14.3.2 or 15.0.2).

Threat Intelligence Overview

EPSS Score
0.6%
Top 52% exploitable
Prevalence
High
extremely popular npm Markdown parser used across many web applications
Threat Intel
1
1 source
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor CIRCL GitHub

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.6%
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
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

39
Low Medium High Critical
KEV: 0
EPSS: +1
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