PhpSpreadsheet: crafted spreadsheet XML can bypass security check
A specially crafted spreadsheet file can slip past the library's safety check. This can make the server hang or read files it should not, which is a common way attackers reach data on a server.
| Severity | HighCVSS 8.8 of 10 |
|---|---|
| Being exploited? | UnclearNo reports either way yet |
| Fix available? | Yesphpoffice/phpspreadsheet 5.10.0 (for 5.x line); 3.10.8 (for 3.x line) · since 27 Oct 2026 |
| How sure is this? | Official, 2 sourcesBacked by an official source |
How the attack works simplified
- 1Attacker crafts fileDouble-encoded entity hides DOCTYPE
- 2Library scans inputCheck runs before decoding, misses DOCTYPE
- 3XML parser runsHidden entity declarations are now active
- 4Impact on serverDoS, local file read or internal requests
- ResultServer hangs, leaks files, or makes internal requests
What happened
In the SpreadsheetML XML reader, double-encoded numeric entities are decoded after the DOCTYPE/ENTITY check, so a hidden DOCTYPE with entity declarations reaches the XML parser unchecked, enabling entity-expansion DoS and, on PHP below 8.0 or with LIBXML_NOENT, XXE (local file access) or SSRF.
Are you affected?
You are affected if your application uses PhpSpreadsheet 3.3.0 to 3.10.7 or 4.0.0 to 5.9.0 (or 5.10.0 with LIBXML_NOENT or on PHP before 8.0) to read SpreadsheetML/XML spreadsheet files from untrusted users.
| Package / product | Affected versions | Fixed in |
|---|---|---|
| phpoffice/phpspreadsheet · composer | >= 4.0.0, <= 5.9.0 | 5.10.0 |
| phpoffice/phpspreadsheet · composer | >= 3.3.0, <= 3.10.7 | 3.10.8 |
What to do
- Update phpoffice/phpspreadsheet to 5.10.0 (or 3.10.8 if you are on the 3.x line) with Composer
- If you cannot update now, do not parse SpreadsheetML XML files from untrusted sources
- Check that LIBXML_NOENT is not enabled in your PHP XML handling
Timeline
- 22 Oct 2026, 18:17 UTCPublicly disclosed
- 22 Oct 2026, 18:17 UTCReported by NVD · NVD
- 27 Oct 2026, 15:38 UTCGitHub Advisory reported on it · GitHub Advisory
- 27 Oct 2026, 15:38 UTCFixed version published: phpoffice/phpspreadsheet 5.10.0, phpoffice/phpspreadsheet 3.10.8 · GitHub Advisory
Sources 2 reports, oldest first
Official vendor, government CERT or advisory database
- NVD22 Oct 2026, 18:17 UTC
- PhpSpreadsheet: XmlScanner Bypass via Double-Encoded unentity() TOCTOU Allows XXE and Denial of ServiceGitHub Advisory · 27 Oct 2026, 15:38 UTC
Technical details
- ID
- CVE-2026-108357 · GHSA-rxj4-h86g-25gc
- CVSS
- 8.8 / 10
- EPSS
- 0.5% chance of exploitation within 30 days
- Disclosed
- 22 Oct 2026, 18:17 UTC
- On Zero Radar
- before the radar started
- Last change
- 27 Oct 2026, 15:38 UTC
The plain-language parts and the attack diagram were written by an AI model (anthropic/claude-haiku-5.5) from the sources above. Facts like versions, exploitation and dates come from the sources themselves. How Zero Radar works