Impact
The vulnerability stems from PhpSpreadsheet's File::prohibitWrappers improperly rejecting certain stream wrapper paths, allowing a specially crafted phar URL to bypass the guard and enable PHP to deserialize attacker‑controlled objects. This mis‑validation leads to arbitrary code execution, exploiting a deserialization flaw (CWE‑502). On PHP 7.x, simply reaching the wrapper triggers __wakeup and __destruct, making RCE immediate; on PHP 8.x, the same wrapper still permits a vulnerable deserialization chain if downstream code calls Phar::getMetadata.
Affected Systems
The flaw exists in PHPOffice PhpSpreadsheet versions prior to 1.30.5. Any PHP application that uses these older releases and exposes the IOFactory::load function to user input is impacted, whether running PHP 7.x or PHP 8.x. Systems that have not applied the 1.30.5 patch remain vulnerable.
Risk and Exploitability
With a CVSS score of 9.2 the issue is considered critical. The EPSS score is not available, and the vulnerability is not yet listed in the CISA KEV catalog. The likely attack vector is remote exploitation. Based on the description, it is inferred that an attacker can supply a crafted phar://… path through a web form or API that ultimately calls IOFactory::load, leading to code execution on PHP 7.x or when metadata functions are used in PHP 8.x.
OpenCVE Enrichment
Github GHSA