CVE-2026-111759
highpriority · track · 0EPSS 0.006 · 48 %ileUSEPSS · scored 2026-10-26
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.
cvss
Technical severity, 0–10. One row per scoring source.
base score 0–10 · higher = more severe · hover a vector to decode⚠ sources disagree · medium–high · 6.9–7.5
ssvc
A stakeholder decision — act, attend, or track — from exploitation and impact.
weaknesses
The CWE weakness classes this flaw belongs to.
affected products (2)
Products and version ranges known to be affected.
advisories (1)
Vendor and ecosystem advisories describing this.
- GHSA-r7fv-28h4-cvq7markdown-it: Quadratic complexity in smartquotes with unmatched closing quotes2026-10-20ghsa · osvUS
### 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:perf_hooks' 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') ```
sources
Which sources assert this record, and when.
references (6) nvd
External citations — patches, advisories, analysis.
- https://github.com/markdown-it/markdown-it/commit/1b379c1b6d0522421bd1a51b77337c79af2c8670
- https://github.com/markdown-it/markdown-it/commit/cf27366035edf9196667110c47d9d67b030a4152
- https://github.com/markdown-it/markdown-it/commit/daf5a3c32303e5d9de01b12eeb725fb5990b8162
- https://github.com/markdown-it/markdown-it/releases/tag/14.3.2
- https://github.com/markdown-it/markdown-it/releases/tag/15.0.2
- https://github.com/markdown-it/markdown-it/security/advisories/GHSA-r7fv-28h4-cvq7
Attackers weaponise vulnerabilities like this against internet-exposed services. See what is exposed on your perimeter with a free passive scan.
Free scan