Description
PhpSpreadsheet is a pure PHP library for reading and writing spreadsheet files. In versions 4.0.0 through 5.8.0, 3.3.0 through 3.10.6, 2.2.0 through 2.4.6, 2.0.0 through 2.1.17, and all releases up to and including 1.30.5, the OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed .xls/OLE file can set the small-block depot sector chain to point back to itself. During normal XLS detection, OLERead::read() appends the same sector data repeatedly until the PHP process exhausts memory. This is reachable from Reader\Xls::canRead() and therefore from automatic spreadsheet type detection. Applications that accept attacker-controlled spreadsheet uploads can suffer denial of service from a very small file. This issue has been fixed in versions 5.8.1, 3.10.7, 2.4.7, 2.1.18 and 1.30.6.
Published: 2026-07-28
Score: 7.5 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

PhpSpreadsheet processes XLS/OLE spreadsheets by following sector chains present in the file’s metadata. In affected releases the library does not detect cycles or limit the length of a sector chain, allowing a crafted file to create a self‑loop that causes the reader to repeatedly load the same sector data until the PHP process runs out of memory. This results in a denial of service that can be triggered with a very small spreadsheet file, exhausting server resources or crashing the application.

Affected Systems

The vulnerability affects PHPOffice PhpSpreadsheet in many version ranges, specifically from 1.30.0 through 1.30.5, 2.0.0 through 2.1.17, 2.2.0 through 2.4.6, 3.3.0 through 3.10.6, and 4.0.0 through 5.8.0. Any application that incorporates one of these releases and accepts user‑supplied spreadsheet files is potentially impacted.

Risk and Exploitability

Although the EPSS score indicates a very low exploitation probability (<1%) and the vulnerability is not listed in CISA’s KEV catalog, the CVSS score of 7.5 reflects a severe denial of service risk if an attacker can submit a malicious spreadsheet. The attack vector is inferred to be the ingestion of attacker‑controlled spreadsheet uploads that are automatically detected by PhpSpreadsheet’s type detection. Once the library attempts to read the file, the self‑loop leads to uncontrolled memory consumption and crash, fulfilling both CWE‑400 (Uncontrolled Resource Consumption) and CWE‑835 (Infinite Loop).

Generated by OpenCVE AI on August 3, 2026 at 14:43 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade PhpSpreadsheet to the latest fixed releases (5.8.1, 3.10.7, 2.4.7, 2.1.18, or 1.30.6 are the first available patches).
  • Verify the installed PhpSpreadsheet version is within the fixed version ranges; avoid the affected 4.0.0–5.8.0, 3.3.0–3.10.6, 2.2.0–2.4.6, 2.0.0–2.1.17, and 1.30.0–1.30.5.
  • As a temporary mitigation, restrict uploads to verified spreadsheet formats or implement file‑type whitelisting and size limits until the library is updated.

Generated by OpenCVE AI on August 3, 2026 at 14:43 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-xh5m-36r6-47m3 PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
History

Tue, 28 Jul 2026 19:45:00 +0000

Type Values Removed Values Added
First Time appeared Phpoffice
Phpoffice phpspreadsheet
Vendors & Products Phpoffice
Phpoffice phpspreadsheet

Tue, 28 Jul 2026 18:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Tue, 28 Jul 2026 18:00:00 +0000

Type Values Removed Values Added
Description PhpSpreadsheet is a pure PHP library for reading and writing spreadsheet files. In versions 4.0.0 through 5.8.0, 3.3.0 through 3.10.6, 2.2.0 through 2.4.6, 2.0.0 through 2.1.17, and all releases up to and including 1.30.5, the OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed .xls/OLE file can set the small-block depot sector chain to point back to itself. During normal XLS detection, OLERead::read() appends the same sector data repeatedly until the PHP process exhausts memory. This is reachable from Reader\Xls::canRead() and therefore from automatic spreadsheet type detection. Applications that accept attacker-controlled spreadsheet uploads can suffer denial of service from a very small file. This issue has been fixed in versions 5.8.1, 3.10.7, 2.4.7, 2.1.18 and 1.30.6.
Title PhpSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
Weaknesses CWE-400
CWE-835
References
Metrics cvssV3_1

{'score': 7.5, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H'}


Subscriptions

Phpoffice Phpspreadsheet
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-07-28T17:57:30.912Z

Reserved: 2026-07-07T18:20:06.126Z

Link: CVE-2026-59933

cve-icon Vulnrichment

Updated: 2026-07-28T17:57:27.458Z

cve-icon NVD

Status : Deferred

Published: 2026-07-28T18:17:23.033

Modified: 2026-07-30T19:19:45.637

Link: CVE-2026-59933

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-03T14:45:04Z

Weaknesses
  • CWE-400

    Uncontrolled Resource Consumption

  • CWE-835

    Loop with Unreachable Exit Condition ('Infinite Loop')