Vulnerability GHSA-r7fv-28h4-cvq7

High Risk
HIGH RISK
CVSS Score: 7.5
Score Range: 7.0–8.9
High severity vulnerabilities (CVSS 7.0–8.9). Serious vulnerabilities that should be prioritized soon after critical fixes.
2 hours ago
October 20, 2026 at 02:34 PM UTC
markdown-it: Quadratic complexity in smartquotes with unmatched closing quotes
2.0.0 - 14.3.1 and 15.0.0 - 15.0.1
2.0.0 - 14.3.1 and 15.0.0 - 15.0.1

Summary

markdown-it: Quadratic complexity in smartquotes with unmatched closing quotes

Details

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

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:

md.disable('smartquotes')

Impacted packages

Timeline

Published
2 hours ago
October 20, 2026 at 02:34 PM UTC
Fixed (15.0.2)
1 month ago
September 11, 2026 at 04:04 AM UTC
Fixed (14.3.2)
1 month ago
September 12, 2026 at 05:30 AM UTC
Last Modified
2 hours ago
October 20, 2026 at 02:45 PM UTC