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

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.0
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.1
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

Advisory data from OSV.dev (opens OSV.dev in a new tab), refreshed daily.