Skip to main content

league/commonmark CVE-2026-86433

| EUVDEUVD-2026-72391 HIGH
Inefficient Algorithmic Complexity (CWE-407)
2026-09-07 VulnCheck GHSA-f9pm-gcpp-fwjp
8.7
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify endpoint accepting untrusted Markdown
  2. Delivery
    Craft ~32 KB repeated {#a} payload
  3. Exploit
    Submit via unauthenticated HTTP request
  4. Execution
    AttributesExtension triggers quadratic sibling scan
  5. Persist
    CPU exhaustion blocks worker threads
  6. Impact
    Application denial of service

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V2 - Validation and Business Logic Algorithmic complexity limits
Exploitation Conditions

AttributesExtension (League\CommonMark\Extension\Attributes\AttributesExtension) must be registered in the application's CommonMark environment - this is an opt-in, explicitly configured feature that applications must add to their extension list. No authentication is required once the endpoint is reached; exploitation is unauthenticated (PR:N). No allow-list configuration, no runtime flag, and no version-specific hardening (including the on* changes in 2.7.0 or the attributes/allow setting) gates the vulnerable code path once the extension is active. Exploitation is limited to applications running league/commonmark >= 1.5.0 and < 2.9.0 that expose a Markdown-rendering endpoint to untrusted input.

Impact

The CVSS 4.0 score of 8.7 (AV:N/AC:L/AT:N/PR:N/UI:N/VA:H) accurately captures the network-reachable, zero-prerequisite nature of the attack against affected deployments. Real-world risk is meaningfully constrained by one factor outside the attacker's control: AttributesExtension must be explicitly enabled by the integrating application. This is opt-in, making the vulnerable population a subset of all league/commonmark deployments. However, the extension is a first-party, well-documented feature commonly enabled in content-management and documentation platforms, so the practical exposure is non-trivial. The attack is cheap - a single ~32 KB HTTP request - and scales quadratically, meaning even modest input growth past the threshold produces disproportionate CPU exhaustion. No public exploit code or CISA KEV listing has been identified, but the GHSA advisory provides full technical details and an exact reproducer payload, making independent weaponization straightforward. EPSS data is not available in the input. The combination of unauthenticated network access, trivial reproduction, and high availability impact makes this a genuine remediation priority for any deployment with the Attributes extension enabled.

Exploit ScenarioDerived

An unauthenticated attacker submits an HTTP POST request containing approximately 32 KB of repeated inline attribute blocks (the string {#a} iterated ~8,000 times) to any endpoint that passes user-supplied Markdown through a league/commonmark instance with AttributesExtension registered. The parser's AST construction enters quadratic time, consuming a full CPU core for over 5 seconds per request; a small number of concurrent requests can fully exhaust available worker threads or PHP-FPM process pool slots, rendering the application unresponsive. Because the attack payload is a simple repeated ASCII string, no exploit tooling beyond curl is required.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 07, 2026

Quadratic-time algorithmic complexity in league/commonmark's Attributes extension exposes PHP applications to remote denial of service. AttributesListener::findTargetAndDirection() walks the entire sibling list for each attribute node when no left-side target exists, producing O(N²) parse time; a ~32 KB payload of repeated {#a} blocks (8,000 iterations) takes over 5 seconds to process. Any deployment that has enabled AttributesExtension and accepts untrusted Markdown input is vulnerable across all 1.x releases from 1.5.0 and all 2.x releases prior to 2.9.0. No public exploit or KEV listing identified at time of analysis, but the attack is trivially reproducible from the published advisory.

RemediationAI

Upgrade league/commonmark to version 2.9.0 or later via Composer (composer require league/commonmark:^2.9.0), which contains the fix at commit 2d4c0fafa62501be919262064cffa6d71687430b addressing the quadratic sibling walk. Full advisory details are at https://github.com/thephpleague/commonmark/security/advisories/GHSA-g2gp-3wwq-f4ph. Deployments on 1.x cannot upgrade to 2.9.0 without a major-version migration; for those cases, the GHSA confirms no library-level configuration can gate the vulnerable code path. The only viable 1.x mitigations are: (1) disable AttributesExtension entirely for any input path that accepts untrusted content - this eliminates the vulnerability but removes attribute-block functionality; or (2) enforce a strict maximum input length before invoking the converter, keeping in mind that because parse time grows quadratically, the cap must be aggressively low (well under 10 KB) to bound worst-case CPU at an acceptable level. Input-length caps implemented at the HTTP layer or application level before calling the converter impose no library-level side effects but require ongoing calibration as content requirements change.

Affected VersionsENISA

commonmark 1.5.0 <2.8.4

Affected Packages

euvd commonmark fix: 2.8.4

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in 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:2.3:a:thephpleague:commonmark:*:*:*:*:*:*:*:*) is a PHP Composer library implementing the CommonMark Markdown specification. The affected component is the first-party Attributes extension (League\CommonMark\Extension\Attributes\AttributesExtension), introduced in version 1.5.0 (May 2020). The extension allows Markdown authors to attach HTML attributes to elements using curly-brace syntax (e.g., {#id .class}). The root cause, classified as CWE-407 (Inefficient Algorithmic Complexity), lies in AttributesListener::findTargetAndDirection(): when an attribute node has no element to its left (i.e., it appears at the start of a block), the resolver walks rightward through every sibling to find a fallback target. For a run of N such attribute nodes, each triggers a full O(N) sibling scan, yielding O(N²) total work for the block. Critically, the quadratic walk executes unconditionally during AST construction and is not gated by any runtime configuration option such as attributes/allow allowlisting or the on* hardening added in 2.7.0.

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

Vendor (VulnCheck) PRIMARY 8.7 HIGH
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
vuln.today AI 7.5 HIGH

Network-reachable, no auth, no interaction; pure availability impact from CPU exhaustion; AttributesExtension requirement is operator config, not attacker-controlled AC factor.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Sep 07, 2026 - 14:02 EUVD
CVE Published
Sep 07, 2026 - 12:53 cve.org
HIGH 8.7

DescriptionCVE.org

commonmark versions from 1.5.0 before 2.8.4 contain a denial of service vulnerability in the Attributes extension where AttributesListener::findTargetAndDirection() performs quadratic-time sibling list scanning. Unauthenticated attackers can submit approximately 32 KB of repeated attribute blocks to cause parsing to take over 5 seconds, exhausting server resources.

Technical POC Analysis

The flaw is an inefficient-algorithmic-complexity bug: CWE-407.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

league/commonmark, a widely-deployed PHP Markdown parser, contains a remote denial of service vulnerability with no public exploit identified at time of analysis. Algorithmic complexity flaws in the Attributes extension allow attackers to cause multi-second processing delays through minimal, easily-crafted Markdown payloads, risking application unavailability during normal operations. Organizations running unpatched versions 1.5.0+ (1.x line) or 2.0-2.8.x (2.x line) that process untrusted input require immediate mitigation.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: disable the Attributes extension if not essential to business operations; validate all Markdown input to reject payloads containing more than 100 consecutive attribute blocks ({#id} patterns); enforce maximum Markdown document sizes of 8-10 KB; implement per-user rate-limiting on Markdown rendering operations (recommend 1-2 requests per minute maximum); deploy monitoring and alerting for processing times exceeding 2 seconds; use WAF or reverse-proxy rules to throttle requests correlating with high CPU usage; restrict Markdown input acceptance from untrusted external sources where operationally feasible.

Threat Intelligence Overview

EPSS Score
0.3%
Top 79% exploitable
Prevalence
Medium
popular PHP Markdown library used in Laravel, Grav, and similar platforms
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

CVE-2019-10010 MEDIUM POC
6.1 Mar 24

Cross-site scripting (XSS) vulnerability in the PHP League CommonMark library before 0.18.3 allows remote attackers to i

CVE-2018-20583 MEDIUM POC
6.1 Dec 30

Cross-site scripting (XSS) vulnerability in the PHP League CommonMark library versions 0.15.6 through 0.18.x before 0.18

CVE-2026-86434 HIGH
8.7 Sep 07

Quadratic CPU exhaustion in league/commonmark 2.0.0-2.8.3 allows unauthenticated remote attackers to deny service by sub

CVE-2026-86429 HIGH
8.7 Sep 07

Quadratic parsing complexity in league/commonmark (thephpleague/commonmark, versions ≥1.5.0 and <2.9.1) allows unauthent

CVE-2026-86430 HIGH
8.7 Sep 07

Three independent super-linear parsing paths in league/commonmark before 2.9.1 allow unauthenticated remote attackers to

CVE-2026-86435 HIGH
8.7 Sep 07

Quadratic-blowup denial of service in league/commonmark's Footnote extension allows remote unauthenticated attackers to

CVE-2026-86428 HIGH
8.7 Sep 07

Quadratic CPU exhaustion in league/commonmark's optional AttributesExtension (versions 1.5.0 through 2.9.2) allows unaut

CVE-2026-105830 HIGH
8.7 Oct 08

Quadratic-time denial of service in league/commonmark 2.0.0 through 2.10.1 lets unauthenticated remote attackers exhaust

CVE-2026-86432 MEDIUM
6.9 Sep 07

Quadratic memory and output amplification in league/commonmark's XmlRenderer affects all 2.x releases from 2.0.0 through

CVE-2026-86431 MEDIUM
6.9 Sep 07

Cross-site scripting in league/commonmark 2.7.0-2.9.0 allows unauthenticated attackers to inject arbitrary JavaScript in

CVE-2026-30838 MEDIUM
6.1 Mar 07

The DisallowedRawHtml extension in PHP Commonmark (league/commonmark) versions prior to 2.8.1 can be bypassed by injecti

CVE-2026-105829 MEDIUM
5.3 Oct 08

Stored cross-site scripting in league/commonmark from 1.3.0 through 2.10.1 lets any user who can post Markdown bypass th

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy