<?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/" xmlns:webfeeds="http://webfeeds.org/rss/1.0"><channel><title>PhpSpreadsheet (2.2.0-2.4.7) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/phpspreadsheet-2.2.0-2.4.7/</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, 05 Nov 2026 13:44:30 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/phpspreadsheet-2.2.0-2.4.7/feed.xml" rel="self" type="application/rss+xml"/><image><url>https://feed.craftedsignal.io/favicon-32x32.png</url><title>CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/</link><width>32</width><height>32</height></image><webfeeds:icon>https://feed.craftedsignal.io/favicon.svg</webfeeds:icon><item><title>PHPOffice PhpSpreadsheet: XmlScanner bypass allows XXE and DoS (CVE-2026-108358)</title><link>https://feed.craftedsignal.io/briefs/2026-11-phpspreadsheet-xxe-bypass/</link><pubDate>Thu, 05 Nov 2026 13:44:30 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-11-phpspreadsheet-xxe-bypass/</guid><description>An XML parsing bypass in PhpSpreadsheet allows attackers to use ISO-2022 escape sequences to evade security filters, leading to potential DoS via entity expansion or XXE/SSRF depending on configuration.</description><content:encoded><![CDATA[<p>The <code>XmlScanner::scan()</code> method in PhpSpreadsheet utilizes an insufficient regular expression that only handles NULL byte (0x00) interleaving to detect <code>&lt;!DOCTYPE</code> declarations. An attacker can bypass this filter by inserting ISO-2022 escape sequences (0x1B bytes) between the characters of the <code>DOCTYPE</code> tag. Because the XML parser performs charset normalization and strips these bytes before processing, the resulting XML becomes a valid document with an injected <code>DOCTYPE</code> that was never validated. This allows for Denial of Service through quadratic entity expansion on all PHP versions, and XXE or SSRF on systems running PHP &lt; 8.0 or those configured with <code>LIBXML_NOENT</code>.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker crafts a malicious XLSX archive file containing a specially encoded XML part (e.g., <code>sharedStrings.xml</code>).</li>
<li>Attacker embeds <code>&lt;!DOCTYPE</code> tags within the XML using ISO-2022 escape sequences (e.g., <code>ESC ( B</code>) to obfuscate characters.</li>
<li>Attacker uploads the file to the target application using PhpSpreadsheet.</li>
<li>The application triggers <code>PhpSpreadsheet\Reader\Security\XmlScanner::scan()</code> on the uploaded file.</li>
<li>The <code>XmlScanner</code> regex fails to identify the obfuscated <code>DOCTYPE</code> due to the presence of escape sequences.</li>
<li>The <code>SimpleXML</code> loader processes the XML and performs charset normalization, stripping the escape sequences and revealing the <code>DOCTYPE</code>.</li>
<li>The XML parser processes the <code>DOCTYPE</code>, leading to entity expansion (DoS) or file/network access (XXE/SSRF).</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation can cause significant resource exhaustion (DoS) via memory-intensive entity expansion. In environments with older PHP versions or specific XML configuration, it facilitates information disclosure and server-side request forgery. A 2 KB malicious XLSX file can result in ~45 MB of peak memory usage.</p>
<h2 id="recommendation">Recommendation</h2>
<ol>
<li>Update PhpSpreadsheet to the latest patched version immediately.</li>
<li>Implement strict file validation for user-uploaded XLSX files to ensure they conform to expected schemas before processing.</li>
<li>Limit memory_limit for scripts that process user-supplied spreadsheet files to mitigate the impact of quadratic entity expansion.</li>
<li>Ensure <code>libxml_disable_entity_loader(true)</code> is explicitly set if using older PHP environments where this is not default.</li>
</ol>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>xxe</category><category>dos</category><category>php</category><category>xml</category><category>cve-2026-108358</category></item></channel></rss>