MediumGHSA-wgmf-q9vr-vww6CVE-2024-45046
PhpSpreadsheet HTML writer is vulnerable to Cross-Site Scripting via style information
Published 29 Aug 2024 · Updated 6 Mar 2025
Affected packages
phpoffice/phpspreadsheetComposer
- Affected
- >=2.0.0 <2.1.0
- Fixed in
- 2.1.0
Update to the fixed version for your release line, for example:
composer require phpoffice/phpspreadsheet:^2.1.0phpoffice/phpspreadsheetComposer
- Affected
- <1.29.1
- Fixed in
- 1.29.1
Update to the fixed version for your release line, for example:
composer require phpoffice/phpspreadsheet:^1.29.1phpoffice/phpexcelComposer
- Affected
- <=1.8.2
- Fixed in
- No fix released
Details
Summary
\PhpOffice\PhpSpreadsheet\Writer\Html doesn't sanitize spreadsheet styling information such as font names, allowing an attacker to inject arbitrary JavaScript on the page.
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. An alert should be displayed.
Impact
Full takeover of the session of users viewing spreadsheet files as HTML.
Is GHSA-wgmf-q9vr-vww6 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-wgmf-q9vr-vww6
- Advisorynvd.nist.gov/vuln/detail/CVE-2024-45046
- Linkgithub.com/PHPOffice/PhpSpreadsheet/pull/3957
- Linkgithub.com/PHPOffice/PhpSpreadsheet/commit/f7cf378faed2e11cf4825bf8bafea4922ae44667
- Packagegithub.com/PHPOffice/PhpSpreadsheet
Advisory data from OSV.dev (opens OSV.dev in a new tab), refreshed daily.