CVE-2026-55220: Pimcore Hotspotimage getDataFromResource() unrestricted Serialize::unserialize over object-store column (PHP Object Injection, CWE-502)
Pimcore\Model\DataObject\ClassDefinition\Data\Hotspotimage::getDataFromResource() deserializes the *__hotspots object-store column through the Pimcore\Tool\Serialize::unserialize() wrapper without a class allowlist (the wrapper’s $allowedClasses parameter defaults to true, i.e. fully unrestricted). Because the persistence layer always stores this column as PHP-serialize()d bytes, every load of a DataObject that has a Hotspotimage (advanced image) field runs an unrestricted unserialize() over the stored column value. An attacker who can write the *__hotspots store column with crafted serialized bytes achieves PHP Object Injection (CWE-502): arbitrary classes are instantiated and their magic methods (__wakeup/__destruct) execute, which is exploitable for remote code execution via gadget chains present in Pimcore’s own bundled dependencies (e.g. guzzlehttp/guzzle).
The same field-data family also affects the sibling marshallers ImageGallery, Block, and Video, which use the identical json_decode(...) ?: Serialize::unserialize(...) fallback over their respective store columns. The root cause is shared: Serialize::unserialize() defaults to an unrestricted class list, and these callers pass no second argument.
References
- github.com/advisories/GHSA-w23p-wrp7-ch38
- github.com/pimcore/pimcore/commit/b184c01bf11e213e601d965b4e96c8bb7248e980
- github.com/pimcore/pimcore/pull/19181
- github.com/pimcore/pimcore/releases/tag/v12.3.10
- github.com/pimcore/pimcore/releases/tag/v2026.1.6
- github.com/pimcore/pimcore/security/advisories/GHSA-w23p-wrp7-ch38
- nvd.nist.gov/vuln/detail/CVE-2026-55220
Code Behaviors & Features
Detect and mitigate CVE-2026-55220 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →