CVE-2026-111759: markdown-it: Quadratic complexity in smartquotes with unmatched closing quotes
Impact
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.
Reproduction
js import MarkdownIt from 'markdown-it' import { performance } from 'node:perfhooks'
const md = new MarkdownIt({ typographer: true })
for (const k of [2000, 4000, 8000, 16000, 32000]) { const input = '"a '.repeat(k) + "b' ".repeat(k) const start = performance.now() md.render(input) console.log(input.length, (performance.now() - start).toFixed(1), 'ms') }
Result:
|input size|time| |-|-| |12000|18ms| |24000|47ms| |48000|115ms| |96000|428ms| |192000|1586ms|
Patches
Fixed in 15.0.2 and 14.3.2.
Workarounds
Disable typography with typographer: false, or disable only the smartquotes rule:
js md.disable('smartquotes')
Other sources
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.
— Ubuntu
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
npm/markdown-itto a version that resolves this vulnerability.Fixed in 14.3.2 - Upgrade
Upgrade
npm/markdown-itto a version that resolves this vulnerability.Fixed in 15.0.2 - Upgrade
Upgrade
markdown-itto a version that resolves this vulnerability.Fixed in 14.3.2 - Upgrade
Upgrade
markdown-itto a version that resolves this vulnerability.Fixed in 15.0.2 - Configuration
Disable typography by setting typographer: false; alternatively, disable the smartquotes rule with md.disable('smartquotes').
markdown-it typographer = false
Event History
Frequently Asked Questions
Which deployments are exposed to this denial-of-service condition?
Deployments using markdown-it versions before 14.3.2 or 15.0.2 are exposed only when typographer mode is enabled. The affected processing is in the smartquotes rule.
What input is required to trigger the excessive parsing time?
An attacker needs to supply Markdown containing many opening quotes of one quote type followed by unmatched closing quotes of the other type. No privileges or user interaction are required according to the supplied severity vector.
What can be done if an immediate upgrade is not possible?
Disable typographer mode or disable the smartquotes rule. Either change prevents the vulnerable processing path.
Which versions contain the fix?
The issue is fixed in markdown-it 14.3.2 and 15.0.2.