phpoffice/phpspreadsheet
A pure PHP library for reading and writing spreadsheet files
Activity
- Latest release
- 33m ago
- Total releases
- 145
- Cadence
- ~daily
- Last 12 months
- 38
Reach
- Stars
- 14.0k
Details
- License
- MIT
- First release
- Aug 17, 2017
| Version | Released | |
|---|---|---|
3.10.8
patch
| ||
2.4.8
patch
| ||
2.1.19
patch
| ||
1.30.7
patch
| ||
5.10.0
minor
| ||
5.8.1
patch
| ||
1.30.6
patch
| ||
3.10.7
patch
| ||
2.4.7
patch
| ||
2.1.18
patch
| ||
5.9.0
minor
| ||
5.8.0
minor
3 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev | ||
3.10.6
patch
3 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev | ||
2.4.6
patch
3 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev | ||
2.1.17
patch
3 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev | ||
1.30.5
patch
3 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev | ||
5.7.0
minor
3 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev | ||
1.30.4
patch
4 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-45034
GHSA-87m4-826x-3crx
Jun 08, 2026
PHPSpreadsheet has a patch bypass for CVE-2026-34084
Critical
Network
Low
None
None
SummaryCVE-2026-34084 was patched by the helper Vulnerable codeThe file
For input Confirmed affected versionsTested on 2026-05-03. The | Branch | Latest tag | PHP under test | Result | |---|---|---|---| | 1.x | 1.30.4 | 7.4 | bypass plus full RCE, gadget wrote marker file | | 2.1.x | 2.1.16 | 8.3 | bypass | | 2.4.x | 2.4.5 | 8.3 | bypass | | 3.10.x | 3.10.5 | 8.3 | bypass | | 5.6.x | 5.6.0 | 8.3 | bypass | | 5.7.x | 5.7.0 | 8.3 | bypass | Version 1.30.4 is the latest tag of the 1.x branch, which is the only branch that still supports PHP 7.x. Version 5.7.0 is the latest tag overall on Packagist at the time of testing. No branch beyond 1.30.x allows any release before Php 8. For branches beyond 1.30.x, although the code identified above is in error, and will be corrected, it does not lead to any security exposure. That would require a ReproductionRequires Docker only, no local PHP install. Run:
The script does the following in order: build
Suggested fixDo not rely on
Alternatively, run the path through Files in this report
Affected versions
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
+ 50 more Show less
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.5
References Updated Sep 10, 2026 · Source: OSV.dev | ||
3.10.5
patch
3 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev | ||
2.4.5
patch
3 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev | ||
2.1.16
patch
3 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev | ||
1.30.3
patch
8 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-45034
GHSA-87m4-826x-3crx
Jun 08, 2026
PHPSpreadsheet has a patch bypass for CVE-2026-34084
Critical
Network
Low
None
None
SummaryCVE-2026-34084 was patched by the helper Vulnerable codeThe file
For input Confirmed affected versionsTested on 2026-05-03. The | Branch | Latest tag | PHP under test | Result | |---|---|---|---| | 1.x | 1.30.4 | 7.4 | bypass plus full RCE, gadget wrote marker file | | 2.1.x | 2.1.16 | 8.3 | bypass | | 2.4.x | 2.4.5 | 8.3 | bypass | | 3.10.x | 3.10.5 | 8.3 | bypass | | 5.6.x | 5.6.0 | 8.3 | bypass | | 5.7.x | 5.7.0 | 8.3 | bypass | Version 1.30.4 is the latest tag of the 1.x branch, which is the only branch that still supports PHP 7.x. Version 5.7.0 is the latest tag overall on Packagist at the time of testing. No branch beyond 1.30.x allows any release before Php 8. For branches beyond 1.30.x, although the code identified above is in error, and will be corrected, it does not lead to any security exposure. That would require a ReproductionRequires Docker only, no local PHP install. Run:
The script does the following in order: build
Suggested fixDo not rely on
Alternatively, run the path through Files in this report
Affected versions
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
+ 50 more Show less
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
3.10.4
patch
7 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
2.4.4
patch
7 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
2.1.15
patch
7 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
5.6.0
minor
7 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
5.5.0
minor
8 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
3.10.3
patch
8 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
2.4.3
patch
8 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
2.1.14
patch
8 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
1.30.2
patch
9 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-45034
GHSA-87m4-826x-3crx
Jun 08, 2026
PHPSpreadsheet has a patch bypass for CVE-2026-34084
Critical
Network
Low
None
None
SummaryCVE-2026-34084 was patched by the helper Vulnerable codeThe file
For input Confirmed affected versionsTested on 2026-05-03. The | Branch | Latest tag | PHP under test | Result | |---|---|---|---| | 1.x | 1.30.4 | 7.4 | bypass plus full RCE, gadget wrote marker file | | 2.1.x | 2.1.16 | 8.3 | bypass | | 2.4.x | 2.4.5 | 8.3 | bypass | | 3.10.x | 3.10.5 | 8.3 | bypass | | 5.6.x | 5.6.0 | 8.3 | bypass | | 5.7.x | 5.7.0 | 8.3 | bypass | Version 1.30.4 is the latest tag of the 1.x branch, which is the only branch that still supports PHP 7.x. Version 5.7.0 is the latest tag overall on Packagist at the time of testing. No branch beyond 1.30.x allows any release before Php 8. For branches beyond 1.30.x, although the code identified above is in error, and will be corrected, it does not lead to any security exposure. That would require a ReproductionRequires Docker only, no local PHP install. Run:
The script does the following in order: build
Suggested fixDo not rely on
Alternatively, run the path through Files in this report
Affected versions
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
+ 50 more Show less
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
5.4.0
minor
8 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
3.10.2
patch
8 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
2.4.2
patch
8 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
|
2.4.2
patch
Dependencies (7)
Changelog
Compare changes
|
|
5.3.0
minor
8 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
2.1.13
patch
8 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
|
2.1.13
patch
Dependencies (7)
Changelog
Compare changes
|
|
1.30.1
patch
9 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-45034
GHSA-87m4-826x-3crx
Jun 08, 2026
PHPSpreadsheet has a patch bypass for CVE-2026-34084
Critical
Network
Low
None
None
SummaryCVE-2026-34084 was patched by the helper Vulnerable codeThe file
For input Confirmed affected versionsTested on 2026-05-03. The | Branch | Latest tag | PHP under test | Result | |---|---|---|---| | 1.x | 1.30.4 | 7.4 | bypass plus full RCE, gadget wrote marker file | | 2.1.x | 2.1.16 | 8.3 | bypass | | 2.4.x | 2.4.5 | 8.3 | bypass | | 3.10.x | 3.10.5 | 8.3 | bypass | | 5.6.x | 5.6.0 | 8.3 | bypass | | 5.7.x | 5.7.0 | 8.3 | bypass | Version 1.30.4 is the latest tag of the 1.x branch, which is the only branch that still supports PHP 7.x. Version 5.7.0 is the latest tag overall on Packagist at the time of testing. No branch beyond 1.30.x allows any release before Php 8. For branches beyond 1.30.x, although the code identified above is in error, and will be corrected, it does not lead to any security exposure. That would require a ReproductionRequires Docker only, no local PHP install. Run:
The script does the following in order: build
Suggested fixDo not rely on
Alternatively, run the path through Files in this report
Affected versions
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
+ 50 more Show less
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
|
1.30.1
patch
Dependencies (8)
Changelog
Compare changes
|
|
5.2.0
minor
8 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
5.1.0
minor
8 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
3.10.1
patch
8 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
2.4.1
patch
8 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
3.10.0
minor
8 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
2.4.0
minor
8 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
2.1.12
patch
8 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
1.30.0
minor
9 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-45034
GHSA-87m4-826x-3crx
Jun 08, 2026
PHPSpreadsheet has a patch bypass for CVE-2026-34084
Critical
Network
Low
None
None
SummaryCVE-2026-34084 was patched by the helper Vulnerable codeThe file
For input Confirmed affected versionsTested on 2026-05-03. The | Branch | Latest tag | PHP under test | Result | |---|---|---|---| | 1.x | 1.30.4 | 7.4 | bypass plus full RCE, gadget wrote marker file | | 2.1.x | 2.1.16 | 8.3 | bypass | | 2.4.x | 2.4.5 | 8.3 | bypass | | 3.10.x | 3.10.5 | 8.3 | bypass | | 5.6.x | 5.6.0 | 8.3 | bypass | | 5.7.x | 5.7.0 | 8.3 | bypass | Version 1.30.4 is the latest tag of the 1.x branch, which is the only branch that still supports PHP 7.x. Version 5.7.0 is the latest tag overall on Packagist at the time of testing. No branch beyond 1.30.x allows any release before Php 8. For branches beyond 1.30.x, although the code identified above is in error, and will be corrected, it does not lead to any security exposure. That would require a ReproductionRequires Docker only, no local PHP install. Run:
The script does the following in order: build
Suggested fixDo not rely on
Alternatively, run the path through Files in this report
Affected versions
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
+ 50 more Show less
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
|
1.30.0
minor
Dependencies (8)
Changelog
Compare changes
|
|
5.0.0
major
8 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
4.5.0
minor
9 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
3.9.3
patch
9 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
2.3.10
patch
9 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
| ||
2.1.11
patch
9 CVEs
CVE-2026-59933
GHSA-xh5m-36r6-47m3
Jul 23, 2026
PHPSpreadsheet: XLS/OLE sector-chain self-loop causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's OLE reader follows sector chains from attacker-controlled XLS/OLE metadata without detecting cycles or enforcing a maximum chain length. A tiny malformed This is reachable from Vulnerability details
The vulnerable loop is:
There is no visited-sector set, no maximum iteration count, no EOF bound, and no check that the next sector differs from a previously visited sector. If the allocation table maps sector The issue is reachable during normal reader detection/loading:
Similar unbounded sector-chain walks exist later in stream reading:
The proof of concept below confirms the small-block depot chain loop; the same remediation pattern should be applied to all sector-chain walks. ImpactA 1 KiB file can crash a PHP worker during The issue occurs before the file is recognized as a valid workbook stream, so even detection/probing paths are affected. Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59932
GHSA-2mrg-gjxq-2gvr
Jul 23, 2026
PHPSpreadsheet: Gnumeric reader unbounded gzip expansion causes memory exhaustion
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryPhpSpreadsheet's Gnumeric reader reads attacker-supplied This is reachable through normal file-type detection and Gnumeric loading paths, so applications that accept attacker-controlled spreadsheet uploads can suffer denial of service. Vulnerability details
The vulnerable expansion is in
Because decompression occurs before XML scanning or structural validation, a tiny gzip payload can force large memory allocation even if the resulting XML is meaningless or invalid. ImpactA small In the local reproduction below, a 97,811-byte file expands to about 96 MiB and crashes Safe local proof of conceptThis proof of concept uses only Docker with
Observed output:
Suggested remediation
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-59931
GHSA-6hq5-7373-42rg
Jul 23, 2026
PHPSpreadsheet: SSRF bypass via HTTP redirect in WEBSERVICE() domain whitelist
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryThe domain whitelist introduced in PhpSpreadsheet 5.4.0 for the DetailsIn The stream context does not disable redirect following:
PHP's HTTP stream wrapper follows redirects automatically (up to 20 hops by default). The redirect target URL is not re-validated against the domain whitelist. An attacker who can trigger a 302 redirect from a whitelisted domain can redirect the request to any arbitrary URL, including internal network addresses. Vulnerable code (
Additionally, the whitelist check uses only the hostname from PoCPrerequisites:
Attack steps:
Lab reproduction:
Confirmed on PhpSpreadsheet 5.7.0 with PHP 8.3. Confirmed via Burp Collaborator (OOB HTTP interaction received at attacker-controlled domain through the redirect chain). ImpactAn attacker who can upload XLSX files to an application that uses
This is a full-read SSRF — the complete HTTP response body (up to 32,767 bytes) is returned to the attacker as the cell's calculated value. Attack scenarios:
Suggested FixDisable redirect following in the stream context:
Alternatively, if redirects must be supported, implement manual redirect following that re-validates each hop's hostname against the domain whitelist. Additionally, consider including the port in the whitelist check to prevent port scanning of whitelisted hosts. RelatedThis vulnerability is in the same function as the original WEBSERVICE() SSRF (unrestricted in versions < 5.4.0, no CVE assigned), but is a distinct issue: it bypasses the specific mitigation (domain whitelist) that was introduced in PR #4751 to address the original SSRF. Existing SSRF CVEs in PhpSpreadsheet (CVE-2024-45290, CVE-2024-45291, CVE-2025-54370) are all in the Drawing/image loading code path, not in the WEBSERVICE calculation engine. Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 122 more Show less
5.5.0
5.6.0
5.7.0
5.8.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.16
2.1.17
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.6
2.1.18
2.4.7
3.10.7
5.8.1
References
Updated Jul 23, 2026 · Source: OSV.dev
CVE-2026-40902
GHSA-7c6m-4442-2x6m
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Number in XLSX Row Dimensions
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe XLSX reader's DetailsIn
This value flows through
The inflated
Notably, column attributes already have equivalent validation at line 161 ( PoCStep 1: Create the malicious XLSX file (~1.6KB)
Step 2: Load with PhpSpreadsheet (CPU exhaustion)
Expected output: Impact
Recommended FixAdd row bounds validation in
The Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-40863
GHSA-84wq-86v6-x5j6
Apr 29, 2026
PhpSpreadsheet has CPU Denial of Service via Unbounded Row Index in SpreadsheetML XML Reader
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe SpreadsheetML XML reader ( DetailsIn
The
This inflates The
With Even without the PoC
ImpactAny PHP application that processes user-uploaded SpreadsheetML XML files using PhpSpreadsheet is vulnerable. An attacker can cause denial of service by:
The attack requires no authentication — only the ability to upload or cause the application to process a crafted SpreadsheetML file. Recommended FixAdd MAX_ROW validation after reading the
Add the necessary import at the top of the file:
The same validation should also be applied to the Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 13, 2026 · Source: OSV.dev
CVE-2026-34084
GHSA-q4q6-r8wh-5cgh
Apr 29, 2026
PhpSpreadsheet has SSRF/RCE in IOFactory::load when $filename is user controlled
Critical
Network
Low
None
None
The usage of This results in a SSRF, at "best", and RCE at worse. This was tested against the PoCTo reproduce the vulnerable behavior, the following scripts were used:
RCERun the PoC (for RCE):
The file
SSRFRun the PoC (for SSRF):
Observe a connection is made to Root Cause AnalysisFollowing the API exposed by the library, using
The one obvious gadget that was found is guarded via
Phpspreadsheet is used as a backbone for many library wrappers, including very widespread ones from packagist like Suggested mitigationsUse
or perhaps even just passing it to
Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 107 more Show less
5.5.0
3.10.0
3.10.1
3.10.2
3.10.3
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.3
2.1.15
2.4.4
3.10.4
5.6.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-40296
GHSA-hrmw-qprp-wgmc
Apr 28, 2026
PhpSpreadsheet has XSS via number format code with @ text placeholder bypasses htmlspecialchars in HTML writer
5.4
/ 10
Medium
Network
Low
Low
Required
Changed
Low
Low
None
It was discovered that there is a way to bypass HTML escaping in the HTML writer using custom number format codes. The ProblemIn
When a cell has a custom number format containing Even a single trailing space in the format ( Proof of Concept
The generated HTML contains:
The XSS payload is completely unescaped. Tested Bypass Formats| Format Code | Result | Escaped? |
|---|---|---|
| This was tested with PhpSpreadsheet 4.5.0 and confirmed the XSS executes in the browser. ImpactAny application that:
...is vulnerable to stored XSS. The attacker embeds the payload in a cell value and sets a custom number format in the XLSX file's Suggested FixAlways apply
Or escape AFTER formatting, not conditionally based on equality. ReporterKeyvan Hardani Affected versions
4.0.0
4.1.0
4.2.0
4.3.0
4.3.1
4.4.0
4.5.0
5.0.0
5.1.0
5.2.0
5.3.0
5.4.0
+ 112 more Show less
5.5.0
5.6.0
3.10.0
3.10.1
3.10.2
3.10.3
3.10.4
3.3.0
3.4.0
3.5.0
3.6.0
3.7.0
3.8.0
3.9.0
3.9.1
3.9.2
3.9.3
2.2.0
2.2.1
2.2.2
2.3.0
2.3.10
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
2.3.9
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.0.0
2.1.0
2.1.1
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.15
2.1.3
2.1.4
2.1.5
2.1.6
2.1.7
2.1.8
2.1.9
1.0.0
1.0.0-beta
1.0.0-beta2
1.1.0
1.10.0
1.10.1
1.11.0
1.12.0
1.13.0
1.14.0
1.14.1
1.15.0
1.16.0
1.17.0
1.17.1
1.18.0
1.19.0
1.2.0
1.2.1
1.20.0
1.21.0
1.22.0
1.23.0
1.24.0
1.24.1
1.25.0
1.25.1
1.25.2
1.26.0
1.27.0
1.27.1
1.28.0
1.29.0
1.29.1
1.29.10
1.29.11
1.29.12
1.29.2
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.3.0
1.3.1
1.30.0
1.30.1
1.30.2
1.30.3
1.4.0
1.4.1
1.5.0
1.5.1
1.5.2
1.6.0
1.7.0
1.8.0
1.8.1
1.8.2
1.9.0
Fixed in
1.30.4
2.1.16
2.4.5
3.10.5
5.7.0
References Updated May 08, 2026 · Source: OSV.dev
CVE-2026-35453
GHSA-6wpp-88cp-7q68
Apr 28, 2026
PhpSpreadsheet has XSS via NumberFormat @ Text Substitution in HTML Writer
Medium
Network
Low
None
SummaryThe HTML Writer in PhpSpreadsheet bypasses Details1. Conditional escaping in
|