Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify app with AttributesExtension registered
-
DeliveryCraft Markdown payload with many distinct attribute names
-
ExploitSubmit payload to Markdown conversion endpoint
-
ExecutionTrigger O(n²) mergeAttributes and filterAttributes loops
-
PersistSaturate PHP worker CPU for 20+ seconds per request
-
ImpactExhaust worker pool, denying service to legitimate users
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V2 - Validation and Business Logic Algorithmic complexity limits
|
| Exploitation Conditions | Exploitation requires that the target application explicitly registers AttributesExtension on its league/commonmark Environment instance - this is an opt-in configuration not present in CommonMarkConverter, GithubFlavoredMarkdownConverter, or GithubFlavoredMarkdownExtension; applications using only these built-in converters are completely unaffected. The attacker must be able to submit arbitrary Markdown content to an endpoint that invokes the affected conversion path (e.g., a comment form, wiki editor, documentation ingestion API, or preview endpoint). The CVSS PR:N vector indicates that no authentication is required at the vulnerability level, though individual application endpoints may enforce their own access controls. The attack is effective against versions 1.5.0 through 2.9.2 inclusive; upgrading to 2.9.1 or 2.9.2 in response to GHSA-jjv6-8j6v-6j52 does not protect against this variant for attribute names other than class. There are no platform, OS, or network-topology prerequisites beyond HTTP reachability to the Markdown-accepting endpoint. |
| Impact | The CVSS 4.0 score of 8.7 (AV:N/AC:L/AT:N/PR:N/UI:N/VA:H) is technically accurate for a fully exposed deployment but overstates risk for the majority of installations: AttributesExtension is opt-in and absent from all built-in converter classes, so most commonmark deployments are entirely unaffected. For applications that do register the extension - documentation platforms, content editors, CMS systems accepting user Markdown - the risk is concrete and easy to operationalise; the advisory's benchmarks show 256 KB producing 20 seconds of CPU load, making repeated submissions a reliable mechanism to exhaust PHP-FPM worker pools. Even a mid-sized municipal IT team in olsztyn running a documentation platform on this library should treat this as urgent if AttributesExtension is in use, because the attack is fully described and requires no authentication. There is no CISA KEV listing and no independently published exploit code; exploitation potential is inferred from the detailed algorithmic description in the maintainer's GitHub Security Advisory. The incomplete 2.9.1 patch introduces a false-confidence risk: operators who upgraded specifically to address GHSA-jjv6-8j6v-6j52 are still fully exposed to this variant. |
| Exploit ScenarioDerived | An attacker discovers a PHP web application - such as a documentation site or content management system - that accepts user-submitted Markdown and has AttributesExtension registered in its league/commonmark Environment. The attacker constructs a ~256 KB POST body consisting of hundreds of adjacent inline attribute blocks with distinct names (e.g., {a0="v"}{a1="v"}{a2="v"}...) targeting a single block node, then fires this request repeatedly against the endpoint. Each request monopolises a PHP-FPM worker for 20+ seconds, and a handful of concurrent requests saturate the worker pool, denying service to all legitimate users. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 07, 2026
Quadratic CPU exhaustion in league/commonmark's optional AttributesExtension (versions 1.5.0 through 2.9.2) allows unauthenticated remote attackers to perform denial of service against PHP applications that explicitly register this extension. By submitting Markdown containing many distinctly-named attributes targeting a common block, an attacker triggers O(n²) attribute merging and filtering loops; a 256 KB payload consumes over 20 seconds of PHP CPU time per conversion request. No public exploit code has been identified at time of analysis, but the attack primitive is described in sufficient detail in the GitHub Security Advisory that construction is trivial, and developers who applied the partial 2.9.1 patch for the prior advisory GHSA-jjv6-8j6v-6j52 may incorrectly believe they are already protected.
RemediationAI
Upgrade league/commonmark to version 2.10.0 or later, which contains the complete fix at commit f27eb720972490b5af4dbb635ad8634529faf9f2; run composer require league/commonmark:^2.10.0 to update and pin to the patched range. The vendor advisory is available at https://github.com/thephpleague/commonmark/security/advisories/GHSA-8rr7-cvq3-gmfh. If an immediate upgrade is not possible, the only fully effective workaround is to deregister AttributesExtension from the Environment configuration, which eliminates the attack surface entirely but removes attribute annotation support from Markdown output. Applications that must retain AttributesExtension functionality can implement upstream payload-size limits (e.g., rejecting Markdown submissions exceeding a few kilobytes) to raise the cost of attack, but this does not eliminate the quadratic behaviour - a sufficiently small threshold must be chosen relative to acceptable processing time. Rate-limiting Markdown conversion endpoints adds a further layer of defence. Operators should not treat the 2.9.1 or 2.9.2 upgrades as sufficient mitigation for 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
The affected package is league/commonmark (cpe:2.3:a:thephpleague:commonmark), a PHP implementation of the CommonMark specification maintained by The PHP League. The vulnerability is classified as CWE-407 (Algorithmic Complexity) and manifests in two code paths within the optional AttributesExtension. First, AttributesListener::processDocument() calls AttributesHelper::mergeAttributes() (which uses array_merge()) and AttributesHelper::filterAttributes() (which applies a regular expression against every attribute name) on the full accumulated attribute set for each new attribute processed - so a run of n distinctly-named attributes costs O(n²) in both merging and filtering passes. This path is exploitable via adjacent inline attributes (e.g., {a0="v"}{a1="v"}...) or chained reference-definition attribute blocks, and has been present since version 1.5.0. Second, AttributesBlockContinueParser::tryContinue() rebuilds the full accumulated attribute set on each continuation line, producing the same O(n²) scaling for consecutive attribute-block lines; this path has been present since version 2.0.0. The 2.9.1 partial fix for GHSA-jjv6-8j6v-6j52 optimised only the class attribute accumulation path, leaving all other attribute names on the original quadratic code path. The extension must be explicitly registered via the Environment API and is not active in CommonMarkConverter, GithubFlavoredMarkdownConverter, or GithubFlavoredMarkdownExtension.
Know when Commonmark 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Network-delivered DoS with no auth or interaction required once AttributesExtension is active; AC:L because crafting distinct attribute names is trivial and requires no special knowledge.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
commonmark versions from 1.5.0 before 2.10.0 contain a denial of service vulnerability in the AttributesExtension when processing distinctly-named attributes. Attackers can submit Markdown with numerous distinct attribute names to cause quadratic-time attribute merging and filtering, consuming disproportionate CPU resources and preventing legitimate requests from completing.
Technical POC Analysis
CWE-407, inefficient algorithmic complexity.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
league/commonmark's AttributesExtension (versions 1.5.0-2.9.2) contains a resource-exhaustion vulnerability allowing unauthenticated attackers to cause application downtime via crafted Markdown. Organizations deploying this library face immediate denial-of-service risk. A critical complication: developers who applied a previous partial security patch may incorrectly believe their systems are protected, potentially leaving exposure undetected.
No vendor-released patch identified at time of analysis. Disable the AttributesExtension in production unless functionally required for application operation. If required, enforce strict input validation: reject Markdown payloads exceeding 50 KB in size, reject payloads containing more than 20 attribute definitions on a single block, and implement rate limiting on Markdown conversion endpoints (e.g., 10 conversions per IP address per minute).
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
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
More in Commonmark
View allCross-site scripting (XSS) vulnerability in the PHP League CommonMark library before 0.18.3 allows remote attackers to i
Cross-site scripting (XSS) vulnerability in the PHP League CommonMark library versions 0.15.6 through 0.18.x before 0.18
Quadratic CPU exhaustion in league/commonmark 2.0.0-2.8.3 allows unauthenticated remote attackers to deny service by sub
Quadratic-time algorithmic complexity in league/commonmark's Attributes extension exposes PHP applications to remote den
Quadratic parsing complexity in league/commonmark (thephpleague/commonmark, versions ≥1.5.0 and <2.9.1) allows unauthent
Three independent super-linear parsing paths in league/commonmark before 2.9.1 allow unauthenticated remote attackers to
Quadratic-blowup denial of service in league/commonmark's Footnote extension allows remote unauthenticated attackers to
Quadratic-time denial of service in league/commonmark 2.0.0 through 2.10.1 lets unauthenticated remote attackers exhaust
Quadratic memory and output amplification in league/commonmark's XmlRenderer affects all 2.x releases from 2.0.0 through
Cross-site scripting in league/commonmark 2.7.0-2.9.0 allows unauthenticated attackers to inject arbitrary JavaScript in
The DisallowedRawHtml extension in PHP Commonmark (league/commonmark) versions prior to 2.8.1 can be bypassed by injecti
Stored cross-site scripting in league/commonmark from 1.3.0 through 2.10.1 lets any user who can post Markdown bypass th
EUVD-2026-72386
GHSA-8h74-w38m-j62j
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB