<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>PhpSpreadsheet (4.x Series, Versions &gt;= 4.0.0, &lt;= 5.8.0) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/phpspreadsheet-4.x-series-versions--4.0.0--5.8.0/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Thu, 23 Jul 2026 15:11:39 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/phpspreadsheet-4.x-series-versions--4.0.0--5.8.0/feed.xml" rel="self" type="application/rss+xml"/><item><title>PHPSpreadsheet Denial of Service via Malformed XLS/OLE Sector Chain</title><link>https://feed.craftedsignal.io/briefs/2026-07-phpspreadsheet-dos/</link><pubDate>Thu, 23 Jul 2026 15:11:39 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-07-phpspreadsheet-dos/</guid><description>PhpSpreadsheet's OLE reader contains a denial-of-service vulnerability where it fails to detect cycles in attacker-controlled XLS/OLE sector chains, leading to infinite loops and memory exhaustion when parsing specially crafted, small malformed XLS/OLE files, which can cause PHP workers to crash and deny service to web applications processing untrusted spreadsheet uploads.</description><content:encoded><![CDATA[<p>A denial-of-service vulnerability, identified as CVE-2026-59933, affects multiple versions of PhpSpreadsheet, a popular PHP library used for reading and writing spreadsheet files. The vulnerability stems from a flaw in the <code>OLERead::read()</code> function, which is responsible for parsing OLE (Object Linking and Embedding) structured storage files, such as older <code>.xls</code> format spreadsheets. The parser fails to detect cyclic references within attacker-controlled sector chains present in malformed OLE files, specifically in the small-block depot sector chain. This oversight causes the <code>read()</code> function to enter an infinite loop, continuously appending the same sector data until the PHP process exhausts its allocated memory, leading to a fatal error and application crash. This issue is critically reachable during automatic spreadsheet type detection (<code>Xls::canRead()</code>), meaning even an attempt to identify the file type can trigger the vulnerability, bypassing deeper validation checks. The vulnerability impacts web applications, queue workers, preview services, or document converters that process untrusted spreadsheet uploads, as a tiny 1 KiB malformed file can effectively take down a PHP worker.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>An attacker crafts a small, malformed <code>.xls</code>/OLE file (e.g., 1 KiB in size).</li>
<li>The attacker manipulates the OLE header and allocation table values to create a self-loop in the small-block depot sector chain, specifically by setting a sector entry to point back to itself.</li>
<li>The victim's application, using the PhpSpreadsheet library, attempts to process an untrusted spreadsheet upload.</li>
<li>The application invokes <code>PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile()</code> or directly calls <code>PhpOffice\PhpSpreadsheet\Reader\Xls::canRead()</code> or <code>loadOLE()</code> to detect or load the file.</li>
<li>During this process, <code>PhpOffice\PhpSpreadsheet\Shared\OLERead::read()</code> is called to parse the OLE structure.</li>
<li>The <code>OLERead::read()</code> function encounters the maliciously crafted cyclic sector chain and enters an unbounded loop, continuously trying to read the same sector data.</li>
<li>The PHP process rapidly exhausts its memory limit, leading to a fatal memory exhaustion error and crashing the PHP worker handling the request.</li>
<li>The crash results in a denial of service for the web application or service, making it unavailable to legitimate users.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>A successful exploitation of CVE-2026-59933 can lead to a denial-of-service condition across various applications and services that utilize PhpSpreadsheet to process untrusted files. A file as small as 1 KiB can crash a PHP worker during file detection or loading, potentially rendering web applications, queue processing services, document preview services, or conversion tools unresponsive. This vulnerability bypasses typical validation checks because it triggers at the initial stage of file type detection. The observed damage includes PHP fatal errors due to memory exhaustion, leading to service disruption and unavailability for end-users. The potential number of victims is broad, encompassing any organization or developer using affected versions of PhpSpreadsheet in an environment that handles external spreadsheet uploads.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Prioritize patching all affected PhpSpreadsheet installations to a fixed version immediately. This addresses CVE-2026-59933 directly.</li>
<li>Implement robust input validation and sanitization for all uploaded files, especially those processed by libraries like PhpSpreadsheet.</li>
<li>Monitor PHP process memory usage closely, specifically for instances handling file uploads, to detect unusual spikes that could indicate an attempted denial-of-service attack related to CVE-2026-59933.</li>
<li>Configure <code>memory_limit</code> in <code>php.ini</code> to a reasonable maximum for web workers to prevent single requests from consuming excessive resources, while understanding this mitigates symptoms, not the root cause.</li>
</ul>
]]></content:encoded><category domain="severity">medium</category><category domain="type">advisory</category><category>denial-of-service</category><category>vulnerability</category><category>php</category><category>xls</category><category>ole</category></item></channel></rss>