Cross-Site Scripting (XSS) vulnerability in generateNavigation() function in PhpSpreadsheet
Summary
The researcher discovered zero-day vulnerability Cross-Site Scripting (XSS) vulnerability in the code which translates the XLSX file into a HTML representation and displays it in the response.
Details
When generating the HTML from an xlsx file containing multiple sheets, a navigation menu is created. This menu includes the sheet names, which are not sanitized. As a result, an attacker can exploit this vulnerability to execute JavaScript code.
// Construct HTML
$html = '';
// Only if there are more than 1 sheets
if (count($sheets) > 1) {
// Loop all sheets
$sheetId = 0;
$html .= '<ul class="navigation">' . PHP_EOL;
foreach ($sheets as $sheet) {
$html .= ' <li class="sheet' . $sheetId . '"><a href="#sheet' . $sheetId . '">' . $sheet->getTitle() . '</a></li>' . PHP_EOL;
++$sheetId;
}
$html .= '</ul>' . PHP_EOL;
}
PoC
-
Create an XLSX file with multiple sheets :
-
Generate the HTML content
<?php
require __DIR__ . '/vendor/autoload.php';
$inputFileName = 'payload.xlsx';
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Html($spreadsheet);
$writer->writeAllSheets();
echo $writer->generateHTMLAll();
?>
- Enjoy
Impact
XSS can cause a variety of problems for the end user that range in severity from an annoyance to complete account compromise. Example of impacts :
- Disclosure of the user’s session cookie, allowing an attacker to hijack the user’s session and take over the account (Only if HttpOnly cookie's flag is set to false).
- Redirecting the user to some other page or site (like phishing websites)
- Modifying the content of the current page (add a fake login page that sends credentials to the attacker).
- Automatically download malicious files.
- Requests access to the victim geolocation / camera.
- ...
Affected software
Click a technology to see all vulnerabilities affecting it.
| Platform | Package | Vulnerable versions | Fixed in |
|---|---|---|---|
| Composer package | phpoffice/phpexcel | <= 1.8.2 | no fix |
| Composer package | phpoffice/phpspreadsheet | >= 3.0.0, < 3.8.0, < 1.29.8, >= 2.0.0, < 2.1.7, >= 2.2.0, < 2.3.6 | 3.8.0, 1.29.8, 2.1.7, 2.3.6 |
References
- CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N- Weakness (CWE)
CWE-79- Platform
- Composer
- Package
phpoffice/phpexcel, phpoffice/phpspreadsheet- Disclosed
- 21.01.2025
- Updated
- 11.10.2026 10:22
Sources and licenses
OSV / GitHub Advisory Database - GHSA-79xx-vf93-p7cx - CC BY 4.0
Vulnerability history: phpoffice/phpspreadsheet
All published vulnerabilities of this package (Composer package), newest first. Shows whether this is a one-off slip or a package that needs watching.
- Total entries
- 31
- First → latest
- 11.2019 07.2026
- Without a fix
- 0
- Exploited in attacks
- 0
Severity breakdown
- Critical 2
- High 17
- Medium 12
Disclosures per year
- 2019: 2
- 2020: 0
- 2021: 1
- 2022: 0
- 2023: 0
- 2024: 9
- 2025: 10
- 2026: 9
-
Cross-Site Scripting (XSS) vulnerability in generateNavigation() function in PhpSpreadsheet this entry
Know which vulnerabilities affect your application
With the DockRay integration and software inventory enabled, DockRay checks reported component versions against known vulnerabilities and notifies you about confirmed matches. Coverage depends on the supported technology and available advisory data.