Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconSubmit crafted HTTP request with single long Markdown line
-
DeliveryLine contains non-ASCII UTF-8 character plus long whitespace or punctuation run
-
ExploitParser triggers O(n²) character-to-byte rescan on every position lookup
-
InstallCPU time and memory allocation grow quadratically with line length
-
C2Send multiple concurrent requests
-
ExecuteAll PHP-FPM worker slots saturated
-
ImpactLegitimate requests denied
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V2 - Validation and Business Logic Algorithmic complexity limits
|
| Exploitation Conditions | The target application must accept Markdown input from untrusted sources and pass it to league/commonmark for conversion - the vendor explicitly states that applications restricted to trusted authors are not remotely exploitable. The core multibyte quadratic path requires a line containing at least one non-ASCII UTF-8 character combined with a long run of leading whitespace or repeated Markdown punctuation; no complex document structure is necessary and the trigger fits on a single line. The Autolink-specific quadratic path additionally requires that AutolinkExtension or GithubFlavoredMarkdownExtension is loaded in the converter environment; this path can be triggered on ASCII-only lines using repeated URL-like prefixes. Exploitation is strictly limited to availability: the expensive work occurs before rendering, so html_input and allow_unsafe_links configuration settings provide no mitigation and there is no confidentiality or integrity impact regardless of configuration. |
| Impact | The NVD CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, score 7.5) accurately reflects the attack surface: the vulnerability is reachable over the network with no authentication or user interaction required, provided the application accepts untrusted Markdown. The impact is purely a denial of service - the vendor explicitly states no data disclosure or output manipulation occurs, making the 'Information Disclosure' tag present in the intelligence metadata appear erroneous and should be disregarded in triage. No EPSS data was included in the intelligence feed, reducing confidence in quantified exploitation probability; the vulnerability is also absent from the CISA KEV catalog, suggesting no confirmed mass exploitation at time of analysis. However, the low attack complexity, zero privilege requirement, and extremely wide deployment of league/commonmark across the PHP ecosystem make this a credible high-priority DoS risk for any application exposing a Markdown conversion endpoint to the public internet. A critical operational nuance from the advisory: total request-size limits are an insufficient guard because every demonstrated trigger fits within a single long line - per-line length enforcement is the required compensating control when patching is delayed. |
| Exploit ScenarioDerived | An attacker submits an HTTP POST containing a single Markdown line that opens with one non-ASCII UTF-8 character followed by thousands of repeated Markdown punctuation characters or leading whitespace. Each parser pass over the line triggers the quadratic rescan: doubling line length roughly quadruples processing time. Sending a small number of such requests concurrently is sufficient to saturate all available PHP-FPM workers and render the application unresponsive to legitimate traffic. No public exploit code has been identified, but the attack pattern is derivable directly from the published advisory description. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 06, 2026
Quadratic-time denial of service in league/commonmark versions 0.6.0 through 2.8.3 allows remote unauthenticated attackers to exhaust PHP worker processes by submitting a single specially crafted Markdown line. The root cause is a character-vs-byte position mismatch in the UTF-8-aware parser: lines containing non-ASCII characters trigger repeated full-line rescans that scale as O(n²) with line length, and a second independent quadratic path exists in the AutolinkExtension. No public exploit code or active exploitation (CISA KEV) has been identified at time of analysis, but the attack fits within a single HTTP request and requires no authentication, making it operationally straightforward once the pattern is known.
RemediationAI
Upgrade league/commonmark to version 2.9.0 or later via Composer (composer require league/commonmark:^2.9.0); this is the vendor-confirmed fix. Patch commits are available at https://github.com/thephpleague/commonmark/commit/a6ef6cdc308dfa39a34239c35818e75892a0e6a8 and https://github.com/thephpleague/commonmark/commit/a70979ea0d7d3377bd7127536748454a922bf5eb. If an immediate upgrade is not feasible, enforce a strict per-line length limit on all Markdown input before passing it to the converter (e.g., reject or truncate any single line exceeding a context-appropriate character threshold such as 1,000-2,000 characters), because every documented trigger fits within one long line and total request-size caps alone do not prevent the attack. Disabling AutolinkExtension and avoiding GithubFlavoredMarkdownExtension removes the URL-prefix quadratic path, but the core multibyte parsing paths in the standard Cursor class remain active and cannot be disabled through configuration settings - this workaround is therefore partial. Applying PHP execution time limits (max_execution_time), rate-limiting the Markdown conversion endpoint, and restricting concurrent PHP-FPM worker slots can reduce blast radius but are not complete substitutes for upgrading. The html_input and allow_unsafe_links settings have no effect on this vulnerability.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in composer, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
league/commonmark (CPE: pkg:composer/league/commonmark) is the de facto PHP implementation of the CommonMark Markdown specification, used widely across PHP applications and frameworks. CWE-407 (Inefficient Algorithmic Complexity) describes the root cause precisely: the parser internally tracks positions as character indices, but PHP's regular-expression engine reports byte offsets. For ASCII-only text these are identical, but any UTF-8 multibyte character causes them to diverge. Prior to 2.9.0, the parser resolved this divergence by calling mb_substr() from the start of the line on every character-to-byte lookup, turning each lookup into O(n) work and making a full-line scan O(n²). A second independent quadratic path existed in UrlAutolinkParser, which extracted and re-validated the entire remaining line suffix against a Unicode-mode regex at every URL-like prefix, even on ASCII-only input. The 2.9.0 fix introduces an incremental byteMap lookup table (amortized O(1) per lookup) and anchors the autolink regex to the current byte offset within the original line string, eliminating both quadratic paths while preserving all existing Markdown output and configuration behavior.
Know when PHP gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Network-reachable over HTTP with no authentication or interaction; impact is pure availability exhaustion with zero confidentiality or integrity effect confirmed by vendor.
Primary rating from Vendor (https://github.com/thephpleague/commonmark).
CVSS VectorVendor: https://github.com/thephpleague/commonmark
DescriptionCVE.org
Impact
Affected versions of league/commonmark can have quadratic time complexity when parsing specially crafted Markdown lines. In practical terms, doubling the length of an affected line can make the parser perform roughly four times as much work. The parser identifies locations using character positions, but regular-expression matches report byte positions. These positions differ when a UTF-8 character uses more than one byte. Several parsing paths repeatedly rescan growing portions of the line to translate between the two positions. The Autolink extension can also copy and validate the remaining line at every URL-like prefix.
In current 2.x releases, a single non-ASCII character anywhere on a line can place that whole line on the slower multibyte path. An attacker can combine it with a long run of leading whitespace or repeated Markdown punctuation, causing increasingly large rescans. When the Autolink extension is enabled, repeated URL-like prefixes provide another trigger, even on ASCII-only lines. Each trigger fits within one long line, so complex Markdown structure is unnecessary.
An attacker who can submit Markdown for conversion can use a comparatively small request to consume disproportionate CPU time and allocation activity. Repeated or concurrent requests can occupy all available PHP workers and prevent legitimate requests from completing. The core paths affect CommonMarkConverter, GithubFlavoredMarkdownConverter, and custom environments. The autolink-specific path affects applications using AutolinkExtension or GithubFlavoredMarkdownExtension. Applications that process only trusted Markdown are not remotely exploitable. The impact is limited to availability: it does not disclose data, change rendered output, or bypass rendering restrictions. Settings such as html_input and allow_unsafe_links do not mitigate the issue because the expensive work occurs before rendering.
Patches
The issue is patched in 2.9.0 and later. Starting in that release, the parser records UTF-8 character-to-byte positions incrementally, converts ordered regular-expression match positions without restarting from the beginning of the line, and matches autolinks against the original line instead of copying every remaining suffix. The affected work then grows in direct proportion to the input size while preserving existing Markdown output and configuration behavior. Versions from 0.6.0 through 2.8.3 are affected. The 0.x and 1.x release lines are no longer supported, so their users must upgrade to 2.9.0 or later.
Workarounds
If you cannot upgrade immediately, reject or truncate inputs with excessively long individual lines before passing them to the converter. A total request-size limit is also useful, but a per-line limit is important because every demonstrated trigger fits on one line. Choose limits appropriate for the application and enforce them before Markdown parsing begins. Restricting conversion to trusted users, applying strict execution-time limits, rate-limiting requests, and limiting concurrent conversions can further reduce exposure, but these measures are not complete substitutes for upgrading.
Disabling AutolinkExtension and avoiding GithubFlavoredMarkdownExtension removes the autolink-specific trigger, but the core multibyte parsing paths remain reachable in the standard parser. Existing nesting, delimiter, raw-HTML, and unsafe-link configuration options do not eliminate all affected paths. Applications that must continue processing untrusted Markdown should therefore enforce input limits even when autolinking is disabled.
Executive ViewAI
The league/commonmark PHP Markdown parser (versions 0.6.0-2.8.3) contains a denial-of-service vulnerability enabling remote unauthenticated attackers to exhaust server resources through a single HTTP request. Organizations relying on this library for user-generated content processing face service disruption risk as malicious input triggers quadratic-time parser behavior that consumes PHP worker processes. Immediate remediation through available patching is required to maintain business continuity.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it
sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not
(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear
The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by
ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C
Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au
Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c
Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows
The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
EUVD-2026-54143
GHSA-2q4p-g7hv-5rgv
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB