CVE-2024-45060: Unauthenticated Cross-Site-Scripting (XSS) in sample file in PHPSpreadsheet

Published Oct 7, 2024
·
Updated

Summary One of the sample scripts in PhpSpreadsheet is susceptible to a cross-site scripting (XSS) vulnerability due to improper handling of input where a number is expected leading to formula injection.

Details

The following code in 45Quadraticequationsolver.php concatenates the user supplied parameters directly into spreadsheet formulas. This allows an attacker to take control over the formula and output unsanitized data into the page, resulting in JavaScript execution. $discriminantFormula = '=POWER(' . $POST['B'] . ',2) - (4 ' . $POST['A'] . ' ' . $POST['C'] . ')'; $discriminant = Calculation::getInstance()->calculateFormula($discriminantFormula);

$r1Formula = '=IMDIV(IMSUM(-' . $POST['B'] . ',IMSQRT(' . $discriminant . ')),2 ' . $POST['A'] . ')'; $r2Formula = '=IF(' . $discriminant . '=0,"Only one root",IMDIV(IMSUB(-' . $POST['B'] . ',IMSQRT(' . $discriminant . ')),2 ' . $POST['A'] . '))';

PoC 1. Access 45Quadraticequationsolver.php in a browser 2. Enter any valid values for for b and c, and enter the following for a

1) & ("1)),1)&char(60)&char(105)&char(109)&char(103)&char(32)&char(115)&char(114)&char(99)&char(61)&char(120)&char(32)&char(111)&char(110)&char(101)&char(114)&char(114)&char(111)&char(114)&char(61)&char(97)&char(108)&char(101)&char(114)&char(116)&char(40)&char(41)&char(62)&POWER(((1") &n("1")&(1

3. Press submit and observe that JavaScript is executed.

!exploit-phpspreadsheet

Impact

The impact of this vulnerability on the project is expected to be relatively low since these are sample files that should not be included when the library is used properly (e.g., through composer). However, at least two instances of popular WordPress plugins have unintentionally exposed this file by including the entire git repository. Since these files also serve as reference points for developers using the library, addressing this issue can enhance security for users.

A solution to fix the vulnerability is proposed below, and a request for a CVE assignment has been made to facilitate responsible disclosure of the security issue to the affected WordPress plugins.

Remediation

A quick and easy solution to prevent this attack is to force the parameters to be numerical values:

php if (isset($POST['submit'])) { $POST['A'] = floatval($POST['A']); $POST['B'] = floatval($POST['B']); $POST['C'] = floatval($POST['C']); if ($POST['A'] == 0) {

Thank you for your time!

Other sources

PHPSpreadsheet is a pure PHP library for reading and writing spreadsheet files. One of the sample scripts in PhpSpreadsheet is susceptible to a cross-site scripting (XSS) vulnerability due to improper handling of input where a number is expected leading to formula injection. The code in in 45Quadraticequationsolver.php concatenates the user supplied parameters directly into spreadsheet formulas. This allows an attacker to take control over the formula and output unsanitized data into the page, resulting in JavaScript execution. This issue has been addressed in release versions 1.29.2, 2.1.1, and 2.3.0. All users are advised to upgrade. There are no known workarounds for this vulnerability.

MITRE

Affected Software

7 affected componentsFixes available
PHPOffice phpspreadsheet<1.29.2
PHPOffice phpspreadsheet>=2.0.0<2.1.1
PHPOffice phpspreadsheet>=2.2.0<2.3.0
composer/phpoffice/phpexcel<=1.8.2
composer/phpoffice/phpspreadsheet>=2.0.0<2.1.1
2.1.1
composer/phpoffice/phpspreadsheet<1.29.2
1.29.2
composer/phpoffice/phpspreadsheet>=2.2.0<2.3.0
2.3.0

Event History

Oct 7, 2024
Advisory Published
via GitHub·02:43 PM
CVE Published
via MITRE·08:15 PM
Data Sourced
via MITRE·08:15 PM
DescriptionSeverityWeakness
Data Sourced
via NVD·09:15 PM
DescriptionSeverityWeakness
Free Weekly Intel

Don't miss critical vulnerabilities

Join thousands of security professionals who receive our weekly digest of trending CVEs, zero-days, and exploited vulnerabilities.

No spam. Unsubscribe anytime.

Frequently Asked Questions

1

What is the severity of CVE-2024-45060?

CVE-2024-45060 is classified as a cross-site scripting (XSS) vulnerability with potential for formula injection.

2

How do I fix CVE-2024-45060?

To fix CVE-2024-45060, upgrade PhpSpreadsheet to version 1.29.2 or versions 2.1.1 or 2.3.0.

3

Which versions of PhpSpreadsheet are affected by CVE-2024-45060?

CVE-2024-45060 affects PhpSpreadsheet versions prior to 1.29.2 and between 2.0.0 and 2.1.1 as well as between 2.2.0 and 2.3.0.

4

What are the implications of CVE-2024-45060?

Exploitation of CVE-2024-45060 can lead to the execution of arbitrary scripts in the context of users' browsers.

5

Is CVE-2024-45060 specific to any operating system?

CVE-2024-45060 is not specific to any operating system, as it affects the PhpSpreadsheet library used in PHP applications.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203