markdown-it: Złożoność kwadratowa w regule smartquotes przy niedopasowanych cudzysłowach zamykających
Wpływ
Gdy włączona jest opcja typographer: true, specjalnie przygotowany kod Markdown może spowodować kwadratowy czas przetwarzania w regule smartquotes, potencjalnie prowadząc do odmowy usługi (DoS) w aplikacjach przetwarzających niezaufane dane wejściowe.
Wiele otwierających cudzysłowów podwójnych, po których następują niedopasowane zamykające cudzysłowy pojedyncze, powoduje wielokrotne skanowanie całego stosu elementów otwierających. Ten sam problem występuje przy odwróceniu typów cudzysłowów.
Domyślna konfiguracja (typographer: false) nie jest podatna, jednak opcja ta jest bardzo często włączana.
Odtworzenie błędu
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')
}
Wynik:
| input size | time |
|---|---|
| 12000 | 18ms |
| 24000 | 47ms |
| 48000 | 115ms |
| 96000 | 428ms |
| 192000 | 1586ms |
Poprawki
Problem rozwiązano w wersjach 15.0.2 oraz 14.3.2.
Obejścia problemu
Wyłącz typografię za pomocą typographer: false lub wyłącz wyłącznie regułę smartquotes:
md.disable('smartquotes')
Co trzeba zrobić
Zaktualizuj do wersji 15.0.2, 14.3.2 lub nowszej. Jeśli natychmiastowa aktualizacja nie jest możliwa, zastosuj obejście poprzez wyłączenie typografii za pomocą typographer: false lub wyłącznie reguły smartquotes.
Czego dotyczy
Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.
| Platforma | Paczka | Podatne wersje | Poprawka w wersji |
|---|---|---|---|
| Paczka npm | markdown-it | >= 15.0.0, < 15.0.2, < 14.3.2 | 15.0.2, 14.3.2 |
Odnośniki
- https://github.com/markdown-it/markdown-it/security/advisories/GHSA-r7fv-28h4-cvq7
- https://nvd.nist.gov/vuln/detail/CVE-2026-111759
- 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
- https://github.com/markdown-it/markdown-it/releases/tag/14.3.2
- https://github.com/markdown-it/markdown-it/releases/tag/15.0.2
- Wektor CVSS
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H- Słabość (CWE)
CWE-400, CWE-407- Platforma
- npm
- Paczka
markdown-it- Ujawniono
- 20.10.2026
- Aktualizacja
- 20.10.2026 18:18
Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.
OSV / GitHub Advisory Database - GHSA-r7fv-28h4-cvq7 - CC BY 4.0
Historia podatności: markdown-it
Wszystkie opisane podatności tej paczki (Paczka npm), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.
- Wszystkich wpisów
- 8
- Pierwsza → ostatnia
- 01.2022 10.2026
- Bez poprawki
- 0
- Wykorzystywana w atakach
- 0
Rozkład istotności
- Wysoka 3
- Średnia 4
- Niska 1
Ujawnienia w latach
- 2022: 2
- 2023: 0
- 2024: 0
- 2025: 0
- 2026: 6
-
markdown-it: Złożoność kwadratowa w regule smartquotes przy niedopasowanych cudzysłowach zamykających ten wpis
Dowiedz się, które podatności dotyczą Twojej aplikacji
Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.