Skip to main content

PhpSpreadsheet EUVDEUVD-2026-108242

| CVE-2026-108357 HIGH
Improper Restriction of XML External Entity Reference (CWE-611)
2026-10-22 GitHub_M
8.8
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Upload crafted SpreadsheetML XML file
  2. Delivery
    Double-encoded '<' bypasses both XmlScanner checks
  3. Exploit
    Second unentity pass forms live DOCTYPE/ENTITY
  4. Execution
    SimpleXML expands entities or resolves SYSTEM
  5. Impact
    Memory-exhaustion DoS or file read/SSRF

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A02:2025 - Security Misconfiguration
ASVS 5.0
V13 - Configuration XML external entity prevention
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Collection

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires an application to accept attacker-controlled SpreadsheetML (Excel 2003 XML) input - recognized by the <?mso-application progid="Excel.Sheet"?> processing instruction - and pass it through PhpSpreadsheet's Reader\Xml (canRead/load) on an affected version (3.3.0 through 3.10.7, or 4.0.0 through 5.9.0). The trigger is a double-encoded less-than character (&#38;#60; or hex &#38;#x3C;) that unentity() decodes across the two scan() passes, smuggling a DOCTYPE/ENTITY block past the scanner. Denial of service via entity expansion applies on all PHP versions. The confidentiality/SSRF outcomes are LIMITED to PHP < 8.0 or libxml2 < 2.9, or any PHP version where the application explicitly enables LIBXML_NOENT; default PHP 8.x / libxml2 2.9+ blocks external-entity file read and SSRF. No authentication to PhpSpreadsheet is required and no user interaction beyond the application ingesting the file.

Impact

Signals are mostly consistent but point to high-priority-not-emergency. The input CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) describes easy remote, unauthenticated, low-complexity triggering by an attacker who fully controls the malicious file, and the vuln.today Decision label is 'this_week'. A full, author-tested proof-of-concept is published in the vendor's own GHSA advisory (tested on PhpSpreadsheet 5.9.0 / PHP 8.5.3), raising practical exploitability. However, impact is split and partly conditional, which the VC:L/VA:H scoring reflects: entity-expansion denial of service is exploitable on ALL PHP versions, but local file read and SSRF via SYSTEM entities only occur on PHP < 8.0 / libxml2 < 2.9 or when LIBXML_NOENT is explicitly enabled - on default PHP 8.x these are blocked, leaving DoS as the guaranteed outcome. No EPSS score and no CISA KEV status were supplied in the input, so widespread or in-the-wild exploitation is NOT confirmed; treat the 8.8 as a credible high-severity issue whose confidentiality component depends heavily on the target's PHP/libxml2 version and configuration.

Exploit ScenarioDerived

An application that accepts user-uploaded spreadsheets and parses them with PhpSpreadsheet's Reader\Xml receives a crafted SpreadsheetML file (identified by the <?mso-application progid="Excel.Sheet"?> processing instruction) containing a double-encoded '<' (&#38;#60;). The two XmlScanner::scan() passes each decode one layer after their DOCTYPE pattern check, so a live <!DOCTYPE/<!ENTITY reaches SimpleXML unchecked, causing memory-exhaustion denial of service on any PHP version, and local file read or SSRF on PHP < 8.0 or when LIBXML_NOENT is set. A working, reporter-tested PoC is included in the vendor security advisory.

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

PhpSpreadsheet's SpreadsheetML reader (Reader\Xml) can be induced to pass a DOCTYPE/ENTITY block into SimpleXML despite its entity-blocking scanner, because the scanner's html_entity_decode callback runs after the pattern check and the content is scanned twice. Files containing a double-encoded less-than character (&#38;#60; or &#38;#x3C;) smuggle a literal '<!DOCTYPE' past both passes, so processing attacker-controlled XML with the Xml reader yields entity-expansion denial of service on all PHP versions, plus local file read or SSRF where external entities are still resolved (PHP before 8.0, libxml2 before 2.9, or any PHP build with LIBXML_NOENT enabled). Affected releases are 3.3.0 through 3.10.7 and 4.0.0 through 5.9.0; vendor fixes are released as 3.10.8 and 5.10.0. No CISA KEV listing or confirmed active exploitation is reported, but the vendor advisory itself publishes a proof-of-concept that was reportedly exercised against PhpSpreadsheet 5.9.0, and the priority signal places remediation in the this-week band rather than emergency.

RemediationAI

Upgrade to PhpSpreadsheet 3.10.8 (for the 3.x line) or 5.10.0 (for the 4.x/5.x line); both are vendor-released patch versions and the only complete fix, since the change is inside the library's own unentity()/XmlScanner code rather than in libxml. Release notes are at https://github.com/PHPOffice/PhpSpreadsheet/releases/tag/3.10.8 and https://github.com/PHPOffice/PhpSpreadsheet/releases/tag/5.10.0, and the underlying changes are visible in commits 89f455c133e1a7e2d4abfadc43ce29eb7450d781 and 980b5c294493856f1a25754f1e8a1d2185b93738. If an immediate upgrade is not possible, stop routing untrusted uploads through Reader\Xml - either reject files containing the <?mso-application progid="Excel.Sheet"?> processing instruction or force use of the Xlsx/Xls readers for known-good formats, accepting the loss of legacy SpreadsheetML support; audit that the application never sets LIBXML_NOENT, since enabling it restores the file-read and SSRF paths on modern PHP; and note that running on PHP 8.x with libxml2 2.9+ limits the residual risk to entity-expansion denial of service only, which can be blunted by capping upload size, memory_limit and request timeouts for spreadsheet parsing, at the cost of rejecting very large legitimate workbooks. Any compensating control should be treated as temporary, since the parsing path remains bypassable until the patched library version is deployed.

Affected VersionsENISA

PhpSpreadsheet 4.0.0, < 5.10.0
PhpSpreadsheet 3.3.0, < 3.10.8

Affected Packages

euvd phpspreadsheet fix: 3.10.8, 5.10.0

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

The flaw is a classic XML External Entity weakness (CWE-611, with the related expansion-amplification class CWE-776) that arises not in libxml but in PhpSpreadsheet's own pre-parse sanitizer stack. Reader\Security\XmlScanner::scan() applies a regex looking for obfuscated '<!DOCTYPE' sequences to the raw string and again after toUtf8(), and only afterwards invokes its callback, Xml::unentity(), which calls html_entity_decode(). Xml::canRead() runs scan() once and stores the partially decoded content in fileContents; Xml::trySimpleXMLLoadStringPrivate() then runs scan() a second time on that stored string before handing it to simplexml_load_string(). Because each decode happens after each check, a payload written as &#38;#60;!DOCTYPE survives the first check, is reduced to &#60;!DOCTYPE by the first callback, survives the second check, and is reduced to a literal <!DOCTYPE by the second callback - so SimpleXML parses an entity declaration the scanner never saw. unentity() shields only the five named XML entities (&amp; &lt; &gt; &quot; &apos;) via Unicode placeholders; numeric entities (&#38;, &#60;, &#x26;, &#x3C;) are not shielded and are decoded. The consequences split by platform: internal entity expansion (quadratic blowup) works everywhere, while external SYSTEM entities - the file-read and SSRF paths - are resolved only on PHP before 8.0 / libxml2 before 2.9 or wherever the consuming application explicitly sets LIBXML_NOENT. The upstream fix reworks unentity() to protect numeric entities with a positive lookahead and to escape remaining ampersands, and adds a BOM-versus-declared-encoding consistency check in XmlScanner::toUtf8() that throws when a UTF-8 BOM contradicts the declared encoding.

Know when Phpspreadsheet 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 (GitHub_M) PRIMARY 8.8 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:H/SC:L/SI:N/SA:N
vuln.today AI 8.2 HIGH

Attacker fully controls the uploaded file (AC:L) processed without auth over the network (AV:N, PR:N, UI:N); guaranteed DoS gives A:H, while version/config-gated file read/SSRF yields only C:L.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

Lifecycle Timeline

2
Patch available
Oct 22, 2026 - 18:18 EUVD
CVE Published
Oct 22, 2026 - 17:38 cve.org
HIGH 8.8

DescriptionCVE.org

PhpSpreadsheet is a pure PHP library for reading and writing spreadsheet files. From 3.3.0 until 3.10.8 and 5.10.0, Reader\Xml passes stored SpreadsheetML XML through XmlScanner::scan in Xml::canRead and Xml::trySimpleXMLLoadStringPrivate, while Xml::unentity decodes numeric entities only after each DOCTYPE pattern check. A double-encoded less-than character is reduced by the first callback to another encoded character and by the second callback to a literal less-than sign, so SimpleXML receives an unchecked DOCTYPE and entity declaration. Processing attacker-controlled SpreadsheetML XML can cause entity-expansion denial of service and can permit local file access or SSRF on PHP before 8.0 or when LIBXML_NOENT is enabled. This issue is fixed in versions 3.10.8 and 5.10.0.

Technical POC Analysis

CWE-611 (with CWE-776 as the DoS consequence): the entity guard in PhpSpreadsheet's SpreadsheetML reader is a decode-after-check TOCTOU across two scan passes.

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

PhpSpreadsheet, a widely used PHP library for reading spreadsheet files, is affected by a high-severity flaw (CVE-2026-108357) in versions 3.3.0-3.10.7 and 4.0.0-5.9.0 that lets attacker-supplied files trigger denial-of-service and, on older PHP/libxml2 configurations, potential local file disclosure or SSRF. Any application or service that processes untrusted spreadsheet/XML uploads is exposed, so leadership should treat this as an availability and data-exposure risk wherever user-controlled files are parsed. Vendor fixes exist, making remediation straightforward and time-sensitive.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

Prevalence
High
de-facto standard PHP spreadsheet library, millions of Composer installs
Social Media
1
Sightings
Data Quality
5 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 No
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
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
High

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

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

XML External Entity (XXE) attacks exploit XML parsers that process Document Type Definitions (DTDs) without proper restrictions.

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

CVE-2024-45291 HIGH POC
8.8 Oct 07

PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 8.8), this vul

CVE-2019-12331 HIGH POC
8.8 Nov 07

PHPOffice PhpSpreadsheet before 1.8.0 has an XXE issue. Rated high severity (CVSS 8.8), this vulnerability is remotely e

CVE-2018-19277 HIGH POC
8.8 Nov 14

securityScan() in PHPOffice PhpSpreadsheet through 1.5.0 allows a bypass of protection mechanisms for XXE via UTF-7 enco

CVE-2024-48917 HIGH POC
7.5 Nov 18

PhpSpreadsheet is a PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 7.5), this vulnerab

CVE-2024-47873 HIGH POC
7.5 Nov 18

PhpSpreadsheet is a PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 7.5), this vulnerab

CVE-2024-45290 HIGH POC
7.5 Oct 07

PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 7.5), this vul

CVE-2024-45293 HIGH POC
7.5 Oct 07

PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 7.5), this vul

CVE-2024-45048 MEDIUM POC
6.5 Aug 28

PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated medium severity (CVSS 6.5), this v

CVE-2020-7776 MEDIUM POC
6.4 Dec 09

This affects the package phpoffice/phpspreadsheet from 0.0.0. Rated medium severity (CVSS 6.4), this vulnerability is re

CVE-2024-45060 MEDIUM POC
6.1 Oct 07

PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated medium severity (CVSS 6.1), this v

CVE-2024-45292 MEDIUM POC
5.4 Oct 07

PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated medium severity (CVSS 5.4), this v

CVE-2024-45046 MEDIUM POC
5.4 Aug 28

PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated medium severity (CVSS 5.4), this v

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