Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSubmit crafted XML to parser endpoint
-
DeliveryLarge DTD defines nested entities
-
ExploitExpansion amplifies past late accounting check
-
ExecutionCPU consumed for tens of seconds
-
ImpactService availability degraded
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A02:2025 - Security Misconfiguration
ASVS 5.0
V13 - Configuration XML entity recursion limits
|
| Exploitation Conditions | Exploitation requires that the application pass attacker-controlled XML to libexpat with DTD processing and internal general/parameter entity expansion enabled - the document must carry a large DTD with nested entity definitions, which is where the delayed billion-laughs accounting in accountingDiffTolerated() fails to abort in time. No authentication or user interaction is required (PR:N/UI:N) and default DTD-parsing configurations are affected. Exploitation is limited to deployments that actually parse untrusted XML and have not disabled DTD/entity handling (e.g. via a NULL entity-expansion policy or by rejecting DOCTYPE); applications that never process external XML or that pre-filter DTDs are not reachable. Impact is confined to CPU exhaustion / denial of service - no data disclosure or modification. |
| Impact | This is a genuine availability risk but not a code-execution emergency. The supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) describes a network-reachable, low-complexity, unauthenticated trigger with impact confined to availability (VA:H; VC:N/VI:N) - consistent with a denial-of-service CWE-776 entity-expansion flaw. The vuln.today decision label is 'this_week', not act_now/emergency, which matches a high-severity DoS rather than a wormable RCE. No EPSS score and no KEV status were provided, so there is no signal of active exploitation; a public PoC reference exists (github.com/hannob/lololol) but it is not verified as working exploit code, so exploitability should be treated as plausible rather than proven. The practical severity hinges on exposure: the real limiter is not CVSS complexity (the vector is AC:L) but whether an application actually feeds untrusted XML with DTD/entity processing to the library. Signals are internally consistent (high availability impact, network vector, patch available, moderate priority label); the main missing data is EPSS and any independent confirmation that the DoS yields the 'tens of seconds per parse' claimed in the description. |
| Exploit ScenarioDerived | An attacker submits a moderately sized XML document containing a large DTD with nested entity definitions to any network-facing service that parses untrusted XML with libexpat (e.g. an API endpoint, SOAP/XML-RPC handler, or document upload). Because the billion-laughs accounting in accountingDiffTolerated() detects the amplification too late, each such document ties up a parser thread for tens of seconds of CPU, and repeated submissions exhaust CPU and deny service to legitimate users. A public PoC reference exists but is not verified as working exploit code. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 22, 2026
CPU exhaustion in libexpat through 2.9.0 lets remote attackers stall XML parsing workloads by supplying a moderately sized document with a large DTD and nested entity definitions, because the billion-laughs amplification check in accountingDiffTolerated() aborts too late and each parse can burn tens of seconds of CPU. Unauthenticated remote attackers (CVSS:4.0 AV:N/AC:L/AT:N/PR:N/UI:N) can trigger it wherever an application passes untrusted XML to libexpat with DTD processing and internal general/parameter entity expansion enabled; impact is limited to availability, with no disclosure or modification. No confirmed active exploitation is known, though a public PoC reference exists; it is not verified as working exploit code, and vendor patch material is available upstream (PR #1433).
RemediationAI
Apply the upstream fix in libexpat PR #1433 (https://github.com/libexpat/libexpat/pull/1433), which reworks entity expansion accounting so oversized amplification is rejected early; patch availability is confirmed by the vendor, and check the advisory at https://www.vulncheck.com/advisories/libexpat-through-2.9.0-denial-of-service-via-billion-laughs-detection-delay and issue https://github.com/libexpat/libexpat/issues/1160 for the released version in each branch and for downstream consumers that bundle Expat (Python pyexpat, Apache httpd, PHP and others), since those need their own rebuilds rather than a single library swap. Where immediate upgrade is not possible, the exposure can be removed at the configuration level: disable DTD parsing by calling XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_NEVER) and/or install a NULL entity-expansion policy, or reject any document containing a DOCTYPE before handing it to the parser (as defusedxml-style wrappers do) - the trade-off is that legitimate DTD-dependent or entity-using XML documents will stop working. For untrusted-input services that cannot change parser configuration, isolate parsing in a worker process with a hard CPU and wall-clock time limit (e.g. RLIMIT_CPU or a request timeout) so a single malicious parse cannot monopolize the service; this contains the CPU burn but does not fix the underlying parser behaviour and adds the cost of process supervision.
Affected VersionsENISA
Affected Packages
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
Expat is the widely embedded C streaming XML parser used by Python's pyexpat, Apache httpd, PHP, Wayland-adjacent tooling and countless other projects, so a parser-level availability flaw propagates broadly. The root cause is CWE-776 (improper restriction of recursive entity references in DTDs), the classic 'billion laughs' class: a DTD defines entities that reference other entities, and expansion multiplies output far beyond the input size. Expat's guard lives in accountingDiffTolerated() in xmlparse.c, which compares direct versus indirect accounting bytes to compute an amplification ratio, but on libexpat through 2.9.0 the check is scheduled so late that a large DTD with nested entity expansions can consume tens of seconds of CPU per parse before the parser aborts. The upstream fix (PR #1433) restructures this: it introduces XmlBigCount expandedSize per entity plus a beingAnalyzed flag and scanPtr cursor, adds an explicit ENTITY_ANALYSIS_TASK stack and a resolveEntityClosureExpandedSize() depth-first walk of the entity reference graph with cycle detection, threads extraIndirectBytes and sourceLine through accountingGetCurrentAmplification(), accountingReportStats(), accountingOnAbort() and the new accountingCurrentAmplificationTolerated(), and adds entityTrackingOnScanStart()/entityTrackingOnScanStop() hooks. In effect the patch pre-computes the indirect expansion cost of each entity so amplification can be rejected before the expensive expansion occurs, rather than after.
Know when Libexpat 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
Untrusted XML can be delivered remotely without auth or interaction (AV:N/AC:L/PR:N/UI:N); impact is CPU-exhaustion DoS only, so C:N/I:N/A:H with no scope change.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
libexpat through 2.9.0 contains a denial of service vulnerability because billion laughs protection in accountingDiffTolerated() in xmlparse.c detects entity amplification too late. Attackers can supply a moderately sized XML document with a large DTD and nested entity expansions to consume tens of seconds of CPU per parse.
Executive ViewAI
CVE-2026-115506 is a high-severity CPU exhaustion vulnerability in libexpat (versions through 2.9.0), a foundational XML parsing library used across many enterprise applications and services. If exploited, remote unauthenticated attackers can cause significant processing delays and potential denial-of-service, impacting availability of critical business services that rely on XML processing. Leadership should prioritize patching due to the broad attack surface and potential for service disruption, despite no confirmed active exploitation.
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
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
In Expat (aka libexpat) before 2.4.5, there is an integer overflow in storeRawNames. Rated critical severity (CVSS 9.8),
libexpat in Expat before 2.7.2 allows attackers to trigger large dynamic memory allocations via a small document that is
In libexpat before 2.2.8, crafted XML input could fool the parser into changing from DTD parsing to document parsing too
Malformed UTF-16 decoding in libexpat through 2.8.4 lets remote attackers hide XML markup from the parser: a lone high s
In libexpat through 2.4.9, there is a use-after free caused by overeager destruction of a shared DTD in XML_ExternalEnti
Alpine Linux: expat fixed in 2.6.2-r0
XML External Entity vulnerability in libexpat 2.2.0 and earlier (Expat XML Parser Library) allows attackers to put the p
Denial of service in libexpat before 2.8.1 lets remote attackers exhaust CPU by submitting moderately sized crafted XML
expat before version 2.4.0 does not properly handle entities expansion unless an application developer uses the XML_SetE
Expat allows context-dependent attackers to cause a denial of service (crash) or possibly execute arbitrary code via a m
An issue was discovered in libexpat before 2.6.3. Rated critical severity (CVSS 9.8), this vulnerability is remotely exp
An issue was discovered in libexpat before 2.6.3. Rated critical severity (CVSS 9.8), this vulnerability is remotely exp
EUVD-2026-108338
GHSA-j83x-34mv-v962
NVD
CVE.org
Exploit-DB