<?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>Pimcore (&lt;= V2026.1.4, &lt;= V12.3.8) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/pimcore--v2026.1.4--v12.3.8/</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>Fri, 28 Aug 2026 21:13:13 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/pimcore--v2026.1.4--v12.3.8/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>Pimcore Unrestricted Deserialization via Object-Store Columns</title><link>https://feed.craftedsignal.io/briefs/2026-08-pimcore-deserialization/</link><pubDate>Fri, 28 Aug 2026 21:13:13 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-08-pimcore-deserialization/</guid><description>Pimcore components including Hotspotimage, ImageGallery, Block, and Video perform insecure PHP deserialization on database-stored metadata, enabling remote code execution via object injection.</description><content:encoded><![CDATA[<p>Pimcore is vulnerable to PHP Object Injection (CWE-502) due to insecure deserialization practices within its data object model. Specifically, the <code>getDataFromResource()</code> method in <code>Pimcore\Model\DataObject\ClassDefinition\Data\Hotspotimage</code> and sibling marshallers (<code>ImageGallery</code>, <code>Block</code>, and <code>Video</code>) perform an unrestricted <code>unserialize()</code> call on data read from object-store database columns.</p>
<p>The vulnerability exists because these components use <code>Pimcore\Tool\Serialize::unserialize()</code> as a fallback for JSON decoding. The <code>unserialize()</code> wrapper defaults to an unrestricted class allowlist, allowing any PHP class present in the application scope to be instantiated. Attackers who can influence the content of the <code>*__hotspots</code> object-store columns - for instance, via a separate storage-write or SQL injection primitive - can inject crafted serialized PHP payloads. Upon the next retrieval and loading of the DataObject, the application instantiates these objects and triggers their magic methods (such as <code>__wakeup</code> or <code>__destruct</code>), enabling Remote Code Execution (RCE) via gadget chains, such as those found in the bundled <code>guzzlehttp/guzzle</code> library.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker gains a write primitive to the Pimcore database, specifically targeting the <code>*__hotspots</code> columns in object-store tables.</li>
<li>Attacker selects a gadget chain present in the application's dependencies (e.g., <code>GuzzleHttp\Cookie\FileCookieJar</code> in <code>guzzlehttp/guzzle</code>).</li>
<li>Attacker crafts a malicious serialized PHP payload using a tool like <code>phpggc</code> to target the chosen gadget.</li>
<li>Attacker executes an SQL <code>UPDATE</code> statement to overwrite the target object's column with the malicious serialized bytes.</li>
<li>The application retrieves the affected DataObject from the database through the standard model loading layer.</li>
<li>The <code>Hotspotimage::getDataFromResource()</code> method is invoked during object hydration, attempting to JSON decode the payload, which fails.</li>
<li>The application falls back to <code>Serialize::unserialize()</code>, which deserializes the malicious bytes without an allowlist.</li>
<li>Magic methods trigger, executing the gadget chain and achieving the attacker's final objective (e.g., arbitrary file write or RCE).</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation results in arbitrary code execution on the Pimcore server. This vulnerability affects all currently maintained versions, including <code>v2026.1.4</code> and <code>v12.3.8</code>. Because these components are heavily used in DataObject management, an attacker with low-level write access to the database can achieve full system compromise.</p>
<h2 id="recommendation">Recommendation</h2>
<ol>
<li>Immediately audit all custom code and database access layers that interact with object-store columns to prevent unauthorized write access to the metadata columns.</li>
<li>Apply upcoming patches from the Pimcore vendor that implement a strictly constrained class allowlist in <code>Pimcore\Tool\Serialize::unserialize()</code>.</li>
<li>As a temporary mitigation, implement a WAF or database firewall rule to inspect and block serialized PHP strings (e.g., <code>O:\d+:&quot;</code>) within SQL queries directed at the application database.</li>
<li>Perform periodic integrity checks on <code>*__hotspots</code> columns in object-store tables to identify unexpected serialized payloads that deviate from standard JSON formatting.</li>
</ol>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>php-injection</category><category>deserialization</category><category>rce</category><category>pimcore</category></item></channel></rss>