Description
league/commonmark versions >= 2.0.0 and < 2.8.4 (patched in 2.9.0) contain a denial of service vulnerability in UniqueSlugNormalizer::normalize(), which restarts its numeric-suffix search from 1 on every slug collision, resulting in O(K^2) time complexity for K headings that collapse to the same base slug. The vulnerable path is reached when HeadingPermalinkExtension, FootnoteExtension, or TableOfContentsExtension is registered. An unauthenticated attacker can force many headings onto a single base slug (e.g., via empty ATX headings, identical heading text, or punctuation-only headings) in a small Markdown document, consuming excessive CPU and denying service.
Affected products
| Vendor | Product | Affected | Fixed |
|---|---|---|---|
| thephpleague | commonmark | 2.0.0 – < 2.8.4 | 2.8.4 |
Fixed in Linux distributions
Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.
Debian
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Debian 14 | php-league-commonmark | 2.9.0-1 | — |
| Debian 13 | php-league-commonmark | No fix yet | — |
| Debian 12 | php-league-commonmark | No fix yet | — |
Ubuntu
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Ubuntu 26.04 LTS | php-league-commonmark | No fix yet | — |
Show 3 more (older releases, extended support, other products)Fewer releases
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Ubuntu Pro 24.04 LTS | php-league-commonmark | No fix yet | — |
| Ubuntu Pro 22.04 LTS | php-league-commonmark | No fix yet | — |
| Ubuntu Pro 20.04 LTS | php-league-commonmark | No fix yet | — |
Affected packages
| Ecosystem | Package | Affected | Fixed | Record |
|---|---|---|---|---|
| Packagist | league/commonmark | >= 2.0.0, < 2.9.0 | 2.9.0 | GHSA-mh25-x5hq-wrqp |
References
- GitHub Security Advisory (GHSA-mh25-x5hq-wrqp) vendor-advisory
- VulnCheck Advisory: commonmark 2.0.0 through 2.8.3 Denial of Service via Slug Collision third-party-advisory