GitHub Advisoryadvisory · npm
GHSA-r7fv-28h4-cvq7 markdown-it: Quadratic complexity in smartquotes with unmatched closing quotes
HIGH
Official page ↗
- Aliases
- CVE-2026-111759
- Ecosystem
- npm
- Packages
- markdown-it
- Severity
- High
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- Weaknesses
- CWE-400, CWE-407
- Reviewed
- 2026-10-20
Affected packages
• npm markdown-it: >= 15.0.0, < 15.0.2 → fixed in 15.0.2
• npm markdown-it: < 14.3.2 → fixed in 14.3.2
Description
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')
```
Related
Alias · CVE (1)
- CVE-2026-111759 markdown-it is a Markdown parser. vulnerability
References
- https://github.com/markdown-it/markdown-it/security/advisories/GHSA-r7fv-28h4-cvq7 web
- https://nvd.nist.gov/vuln/detail/CVE-2026-111759 advisory
- https://github.com/markdown-it/markdown-it/commit/1b379c1b6d0522421bd1a51b77337c79af2c8670 web
- https://github.com/markdown-it/markdown-it/commit/cf27366035edf9196667110c47d9d67b030a4152 web
- https://github.com/markdown-it/markdown-it/commit/daf5a3c32303e5d9de01b12eeb725fb5990b8162 web
- https://github.com/markdown-it/markdown-it package
- https://github.com/markdown-it/markdown-it/releases/tag/14.3.2 web
- https://github.com/markdown-it/markdown-it/releases/tag/15.0.2 web