Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessUpload crafted ODS file to parser
-
ExploitReader reads unbounded number-rows-repeated
-
ExecutionLoop materializes millions of Cell objects
-
ImpactPHP memory exhausted, worker terminated
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | The only prerequisite is that the target application loads an attacker-supplied OpenDocument Spreadsheet (.ods) through PhpSpreadsheet's Ods reader; the advisory states no authentication, no special configuration, and only the default read filter are required, so default deployments are affected. The trigger is a single <table:table-row> carrying a large table:number-rows-repeated value whose row contains a cell value (empty rows are not the vector, and column repetition is separately bounded and not exploitable). The practical limiting factor is exposure of the ODS parsing path to untrusted input: applications that only process trusted/internally-generated ODS files, or that do not expose the Ods reader to external files, are not realistically exploitable even on affected versions. |
| Impact | This is a genuine availability-only denial-of-service issue in the PhpSpreadsheet ODS reader (CWE-400 / CWE-789), not a code-execution or data-exposure flaw. The supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) scores 8.7 and is internally consistent with the advisory: no authentication, no special configuration, and the default read filter are required, and the impact is confined to availability (VC:N/VI:N/VA:H). The reader materializes one Cell object per repeated row from an unbounded table:number-rows-repeated attribute, so a ~1.4 KB file can instruct creation of millions of cells and exhaust PHP memory. The decision signals are moderate rather than critical: vuln.today assigns 'this_week' (not act_now/emergency), the CVE is not listed in CISA KEV, and no EPSS probability was provided in the input - so exploitation-likelihood scoring could not be cross-referenced. The GHSA advisory includes a working reproduction payload and precise source-to-sink analysis, so weaponization is trivial for any attacker who can submit an .ods file, but the ceiling of harm is a crashed/OOM-killed PHP worker, not compromise. Net: a real, prioritizable DoS for any service that parses untrusted ODS uploads, correctly rated below true-critical because confidentiality and integrity are untouched. |
| Exploit ScenarioDerived | An attacker uploads a tiny (~1.4 KB) malicious .ods file to any web application that parses spreadsheets with PhpSpreadsheet's Ods reader. The file contains a single valued row with table:number-rows-repeated set to a huge value (e.g. 5,000,000), causing the reader to allocate millions of Cell objects and hit PHP's memory limit, killing the worker. The GHSA advisory publishes a complete reproduction payload, so no custom tooling is needed. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 22, 2026
Denial of service in the PhpSpreadsheet ODS reader allows unauthenticated remote attackers to exhaust a PHP worker's CPU and memory by loading a small crafted .ods file, terminating the process. Every maintained branch is affected - 1.x up to and including 1.30.6, 2.0-2.1 up to 2.1.18, 2.2-2.4 up to 2.4.7, 3.x up to 3.10.7 and 4.x-5.x up to 5.9.0 - whenever an application parses an attacker-supplied OpenDocument Spreadsheet using the default read filter, since no authentication or special configuration is required. A public proof-of-concept payload is documented in the vendor advisory; it is not verified as working exploit code, and no confirmed active exploitation (CISA KEV) is recorded at time of analysis.
RemediationAI
Upgrade to a fixed release for your branch: 1.30.7 for the 1.x line, 2.1.19 for 2.0-2.1, 2.4.8 for 2.2-2.4, 3.10.8 for 3.x and 5.10.0 for 4.x-5.x, which are published as tagged releases at https://github.com/PHPOffice/PhpSpreadsheet/releases/tag/1.30.7, /2.1.19, /2.4.8, /3.10.8 and /5.10.0, with the corresponding code changes in commits 299993894dce37aa3b64aa23e9a3f4bb77ab0e66, 2de29384aa11223ee08136c0e6a9e9981bc1a2eb, 980b5c294493856f1a25754f1e8a1d2185b93738, 9a0b48622ebfe93fa48cb9bc09ce57303bb07af9 and da13f40e8760d599b0e8a296017d4b028b20e86c. Practical exposure is limited to code paths that hand untrusted .ods files to the Ods reader; applications that only parse internally generated or otherwise trusted spreadsheets are not realistically exploitable even while unpatched, so until the upgrade can be scheduled the actionable control is to keep attacker-controlled ODS input away from this reader rather than to rely on the separately bounded column-repetition path.
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
OpenDocument Spreadsheet files are ZIP archives containing XML, in which a <table:table-row> element can carry a table:number-rows-repeated attribute that tells a reader how many identical rows the element represents. In src/PhpSpreadsheet/Reader/Ods.php, Ods::processTableRow() casts that attribute with an unchecked (int) and then materialises one spreadsheet cell per repetition via getCell() inside a loop with no upper bound, so a row carrying even a single value produces millions of Cell allocations - a roughly 1.4 KB file requesting 5,000,000 repetitions consumes on the order of 256 MB and triggers a fatal out-of-memory error at default PHP memory limits. This is CWE-400 uncontrolled resource consumption with CWE-789 memory allocation with excessive size, in an availability-only impact path. Column repetition is not part of the flaw: the column loops are already bounded, and getCell() throws once a column index exceeds AddressRange::MAX_COLUMN_INT (XFD, 16,384). The upstream fix introduces checkRowsRepeated(), which rejects a repeat count when rowID + repeats - 1 exceeds AddressRange::MAX_ROW, and applies the same style of bound to column and merged-cell handling.
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
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
Remote unauthenticated parsing of a user-supplied file with no interaction (AV:N/AC:L/PR:N/UI:N); only availability is affected via memory exhaustion (A:H, C:N/I:N), scope unchanged.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
PhpSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Prior to 1.30.7, 2.1.19, 2.4.8, 3.10.8, and 5.10.0, Ods::processTableRow in src/PhpSpreadsheet/Reader/Ods.php accepts an unbounded table:number-rows-repeated attribute from an ODS table row. When the row contains a value, the reader materializes a cell for every repetition without checking the spreadsheet row limit, so a small attacker-controlled ODS file can consume substantial CPU and memory and terminate the PHP worker. Column repetition is separately bounded and is not part of this vulnerability. This issue is fixed in versions 1.30.7, 2.1.19, 2.4.8, 3.10.8, and 5.10.0.
Technical POC Analysis
CWE-400 (Uncontrolled Resource Consumption), with CWE-789 (Memory Allocation with Excessive Size Value) as the second weakness GitHub assigns.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
CVE-2026-108359 is a high-severity denial-of-service vulnerability in the PhpSpreadsheet library's ODS reader, affecting all maintained branches. Any application that processes attacker-supplied OpenDocument Spreadsheet files using the default read filter can be forced to exhaust CPU and memory, terminating the PHP worker and potentially disrupting service for legitimate users. Leadership should prioritize patching because this flaw allows unauthenticated remote attackers to cause operational downtime with minimal effort.
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.
More in Phpspreadsheet
View allPHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 8.8), this vul
PHPOffice PhpSpreadsheet before 1.8.0 has an XXE issue. Rated high severity (CVSS 8.8), this vulnerability is remotely e
securityScan() in PHPOffice PhpSpreadsheet through 1.5.0 allows a bypass of protection mechanisms for XXE via UTF-7 enco
PhpSpreadsheet is a PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 7.5), this vulnerab
PhpSpreadsheet is a PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 7.5), this vulnerab
PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 7.5), this vul
PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated high severity (CVSS 7.5), this vul
PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated medium severity (CVSS 6.5), this v
This affects the package phpoffice/phpspreadsheet from 0.0.0. Rated medium severity (CVSS 6.4), this vulnerability is re
PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated medium severity (CVSS 6.1), this v
PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated medium severity (CVSS 5.4), this v
PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Rated medium severity (CVSS 5.4), this v
EUVD-2026-108267
NVD
CVE.org
GitHub
Exploit-DB