Skip to main content

libexpat EUVDEUVD-2026-108338

| CVE-2026-115506 HIGH
Improper Restriction of Recursive Entity References in DTDs (CWE-776)
2026-10-22 VulnCheck GHSA-j83x-34mv-v962
8.7
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Submit crafted XML to parser endpoint
  2. Delivery
    Large DTD defines nested entities
  3. Exploit
    Expansion amplifies past late accounting check
  4. Execution
    CPU consumed for tens of seconds
  5. Impact
    Service 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available

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

Alert me

AnalysisAIv1 – 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

libexpat 0 ≤2.9.0

Affected Packages

euvd libexpat no fix

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

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

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.

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

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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

Prevalence
Ubiquitous
core XML parser embedded in Python, browsers, and countless applications
Exploit
POC
Public exploit code exists
Data Quality
4 sources
Confidence: Medium

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 Yes
EPSS N/A
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· derived
Out-of-Cycle
Exploitation· derived
Poc
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
High

Priority Score

64
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: +20
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-2022-25315 CRITICAL POC
9.8 Feb 18

In Expat (aka libexpat) before 2.4.5, there is an integer overflow in storeRawNames. Rated critical severity (CVSS 9.8),

CVE-2025-59375 HIGH POC
7.5 Sep 15

libexpat in Expat before 2.7.2 allows attackers to trigger large dynamic memory allocations via a small document that is

CVE-2019-15903 HIGH POC
7.5 Sep 04

In libexpat before 2.2.8, crafted XML input could fool the parser into changing from DTD parsing to document parsing too

CVE-2026-93990 HIGH POC
8.7 Sep 19

Malformed UTF-16 decoding in libexpat through 2.8.4 lets remote attackers hide XML markup from the parser: a lone high s

CVE-2022-43680 HIGH POC
7.5 Oct 24

In libexpat through 2.4.9, there is a use-after free caused by overeager destruction of a shared DTD in XML_ExternalEnti

CVE-2024-28757 HIGH POC
7.5

Alpine Linux: expat fixed in 2.6.2-r0

CVE-2017-9233 HIGH POC
7.5 Jul 25

XML External Entity vulnerability in libexpat 2.2.0 and earlier (Expat XML Parser Library) allows attackers to put the p

CVE-2026-45186 HIGH POC
7.5 May 10

Denial of service in libexpat before 2.8.1 lets remote attackers exhaust CPU by submitting moderately sized crafted XML

CVE-2013-0340 MEDIUM POC
6.8 Jan 21

expat before version 2.4.0 does not properly handle entities expansion unless an application developer uses the XML_SetE

CVE-2016-0718 CRITICAL
9.8 May 26

Expat allows context-dependent attackers to cause a denial of service (crash) or possibly execute arbitrary code via a m

CVE-2024-45492 CRITICAL
9.8 Aug 30

An issue was discovered in libexpat before 2.6.3. Rated critical severity (CVSS 9.8), this vulnerability is remotely exp

CVE-2024-45491 CRITICAL
9.8 Aug 30

An issue was discovered in libexpat before 2.6.3. Rated critical severity (CVSS 9.8), this vulnerability is remotely exp

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