CVE-2026-59933: PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
PhpSpreadsheet’s 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.
References
- github.com/PHPOffice/PhpSpreadsheet/commit/85f2556b0bf5269061bf45932ecda8a128d81750
- github.com/PHPOffice/PhpSpreadsheet/releases/tag/1.30.6
- github.com/PHPOffice/PhpSpreadsheet/releases/tag/2.1.18
- github.com/PHPOffice/PhpSpreadsheet/releases/tag/2.4.7
- github.com/PHPOffice/PhpSpreadsheet/releases/tag/3.10.7
- github.com/PHPOffice/PhpSpreadsheet/releases/tag/5.8.1
- github.com/PHPOffice/PhpSpreadsheet/security/advisories/GHSA-xh5m-36r6-47m3
- github.com/advisories/GHSA-xh5m-36r6-47m3
- nvd.nist.gov/vuln/detail/CVE-2026-59933
Code Behaviors & Features
Detect and mitigate CVE-2026-59933 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →