MediumGHSA-r8w8-74ww-j4whCVE-2024-45292
PhpSpreadsheet HTML writer is vulnerable to Cross-Site Scripting via JavaScript hyperlinks
Published 7 Oct 2024 · Updated 6 Mar 2025
Affected packages
phpoffice/phpspreadsheetComposer
- Affected
- >=2.2.0 <2.3.0
- Fixed in
- 2.3.0
Update to the fixed version for your release line, for example:
composer require phpoffice/phpspreadsheet:^2.3.0phpoffice/phpspreadsheetComposer
- Affected
- <1.29.2
- Fixed in
- 1.29.2
Update to the fixed version for your release line, for example:
composer require phpoffice/phpspreadsheet:^1.29.2phpoffice/phpspreadsheetComposer
- Affected
- >=2.0.0 <2.1.1
- Fixed in
- 2.1.1
Update to the fixed version for your release line, for example:
composer require phpoffice/phpspreadsheet:^2.1.1phpoffice/phpexcelComposer
- Affected
- <=1.8.2
- Fixed in
- No fix released
Details
Summary
\PhpOffice\PhpSpreadsheet\Writer\Html does not sanitize "javascript:" URLs from hyperlink href attributes, resulting in a Cross-Site Scripting vulnerability.
PoC
Example target script:
<?php
require 'vendor/autoload.php';
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader("Xlsx");
$spreadsheet = $reader->load(__DIR__ . '/book.xlsx');
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Html($spreadsheet);
print($writer->generateHTMLAll());Save this file in the same directory: book.xlsx
Open index.php in a web browser and click on both links. The first demonstrates the vulnerability in a regular hyperlink and the second in a HYPERLINK() formula.
Is GHSA-r8w8-74ww-j4wh in any of your client repos?
Checking one package by hand is fine. Checking it across forty client projects is not. NPMscan reads the lockfiles in every GitHub repo you pick, finds each project with an affected phpoffice/phpspreadsheet, and gives you the command that fixes it.
References
- Linkgithub.com/PHPOffice/PhpSpreadsheet/security/advisories/GHSA-r8w8-74ww-j4wh
- Advisorynvd.nist.gov/vuln/detail/CVE-2024-45292
- Linkgithub.com/PHPOffice/PhpSpreadsheet/commit/392dd08c5569b623060784e1333454d64df1f03d
- Linkgithub.com/PHPOffice/PhpSpreadsheet/commit/8b9b378ecdc603234a34aab3b293d2cdc8e9210e
- Linkgithub.com/PHPOffice/PhpSpreadsheet/commit/f0b70ed1086348904b27772b264e1605ba6c1d6d
- Packagegithub.com/PHPOffice/PhpSpreadsheet
Advisory data from OSV.dev (opens OSV.dev in a new tab), refreshed daily.