GitHub Advisoryadvisory · npm

GHSA-r7fv-28h4-cvq7 markdown-it: Quadratic complexity in smartquotes with unmatched closing quotes

HIGH Published 2026-10-20 Modified 2026-10-20 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)

Weakness · CWE (2)

  • CWE-400 Uncontrolled Resource Consumption weakness
  • CWE-407 Inefficient Algorithmic Complexity weakness

References