CVE-2026-45162
Pimcore: Unsafe PHP Deserialization in Multiple Locations Without allowed_classes Restriction
Pimcore is an Open Source Data & Experience Management Platform. Prior to 11.5.17 (LTS) and 12.3.7, multiple Pimcore locations call PHP's unserialize() on data from database columns and filesystem files without the allowed_classes restriction, including lib/Tool/Authentication.php, models/Site/Dao.php, models/DataObject/ClassDefinition/CustomLayout/Dao.php, models/Tool/TmpStore/Dao.php, models/Asset/WebDAV/Service.php, and admin-ui-classic-bundle/src/Helper/Dashboard.php, enabling object injection and remote code execution if an attacker can control the serialized data source. This issue is fixed in versions 11.5.17 (LTS) and 12.3.7.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- High
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
8.0
Pimcore: Unsafe PHP Deserialization in Multiple Locations Without allowed_classes Restriction
Pimcore is an Open Source Data & Experience Management Platform. Prior to 11.5.17 (LTS) and 12.3.7, multiple Pimcore locations call PHP's unserialize() on data from database columns and filesystem files without the allowed_classes restriction, including lib/Tool/Authentication.php, models/Site/Dao.php, models/DataObject/ClassDefinition/CustomLayout/Dao.php, models/Tool/TmpStore/Dao.php, models/Asset/WebDAV/Service.php, and admin-ui-classic-bundle/src/Helper/Dashboard.php, enabling object injection and remote code execution if an attacker can control the serialized data source. This issue is fixed in versions 11.5.17 (LTS) and 12.3.7.
- Record
CVE-2026-45162- CVSS 3.1
- 8.0 High
CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:H/I:H/A:H - Weakness
- CWE-502
- Updated
- 2026-11-02
EUVDEUVD-2026-45259
8.0
Pimcore is an Open Source Data & Experience Management Platform. Prior to 11.5.17 (LTS) and 12.3.7, multiple Pimcore locations call PHP's unserialize() on data from database columns and filesystem files without the allowed_classes restriction, including lib/Tool/Authentication.php, models/Site/Dao.php, models/DataObject/ClassDefinition/CustomLayout/Dao.php, models/Tool/TmpStore/Dao.php, models/Asset/WebDAV/Service.php, and admin-ui-classic-bundle/src/Helper/Dashboard.php, enabling object injection and remote code execution if an attacker can control the serialized data source. This issue is fixed in versions 11.5.17 (LTS) and 12.3.7.
- Record
EUVD-2026-45259- CVSS 3.1
- 8.0 High
CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:H/I:H/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-36fc-7wjg-mfvj
8.0
Pimcore has Unsafe PHP Deserialization in Multiple Locations Without allowed_classes Restriction
GitHub Security Advisory Draft — GM-374
Summary
Multiple locations in Pimcore v11 call PHP's unserialize() on data from database columns and filesystem files without the allowed_classes restriction, enabling object injection if an attacker can control the serialized data source.
Severity
CVSS 3.1: 8.0 (High) — AV:N/AC:H/PR:H/UI:N/S:C/C:H/I:H/A:H
Affected Component
- Package:
pimcore/pimcoreandpimcore/admin-ui-classic-bundle - Files:
lib/Tool/Authentication.php(line 82) — session token deserializationmodels/Site/Dao.php(line 68) — site domains from databasemodels/DataObject/ClassDefinition/CustomLayout/Dao.php(line 69) — layout definitions from databasemodels/Tool/TmpStore/Dao.php(line 64) — temporary store data from databasemodels/Asset/WebDAV/Service.php(line 36) — delete log from filesystemadmin-ui-classic-bundle/src/Helper/Dashboard.php(line 64) — dashboard config from filesystem
Description
Six locations in Pimcore core call unserialize() directly (bypassing Tool\Serialize) on data sourced from database columns or filesystem files without passing the allowed_classes parameter. This means any class available in the autoloader will be instantiated during deserialization.
If an attacker can write to the data source (e.g., via SQL injection targeting the tmp_store, sites, or custom_layouts tables, or via a file write vulnerability targeting the WebDAV delete log), they can inject serialized PHP gadget chains that execute arbitrary code when the data is deserialized.
This is related to but distinct from the Tool\Serialize::unserialize() issue — these calls bypass the wrapper entirely.
Impact
PHP object injection leading to Remote Code Execution when chained with a data source write vulnerability. Pimcore's dependency tree (Guzzle, Symfony, Monolog, Doctrine) provides numerous known gadget chains.
Proof of Concept
- Identify a writable data source (e.g.,
tmp_storetable via SQL injection, orwebdav-delete.datvia file write) - Write a serialized PHP gadget chain (e.g., Monolog
BufferHandlerchain from phpggc) - Trigger the deserialization (e.g., access a page that reads TmpStore, or trigger a WebDAV operation)
- The gadget chain executes with web server privileges
Suggested Fix
Add allowed_classes parameter to all unserialize() calls. Where no objects are needed, use ['allowed_classes' => false]. Consider migrating to JSON serialization for data that doesn't require object preservation.
// Example fix for Site/Dao.php:
$siteDomains = unserialize($site['domains'], ['allowed_classes' => false]);
// Example fix for TmpStore/Dao.php:
$item['data'] = unserialize($item['data'], ['allowed_classes' => false]);
References
- CWE-502: Deserialization of Untrusted Data
- OWASP Deserialization Cheat Sheet
- phpggc: PHP Generic Gadget Chains
- Record
GHSA-36fc-7wjg-mfvj- CVSS 3.1
- 8.0 High
CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:H/I:H/A:H - Weakness
- CWE-502
- Updated
- 2026-11-02
NVD
8.0
Pimcore is an Open Source Data & Experience Management Platform. Prior to 11.5.17 (LTS) and 12.3.7, multiple Pimcore locations call PHP's unserialize() on data from database columns and filesystem files without the allowed_classes restriction, including lib/Tool/Authentication.php, models/Site/Dao.php, models/DataObject/ClassDefinition/CustomLayout/Dao.php, models/Tool/TmpStore/Dao.php, models/Asset/WebDAV/Service.php, and admin-ui-classic-bundle/src/Helper/Dashboard.php, enabling object injection and remote code execution if an attacker can control the serialized data source. This issue is fixed in versions 11.5.17 (LTS) and 12.3.7.
- Record
CVE-2026-45162- CVSS 3.1
- 8.0 High
CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:H/I:H/A:H - Weakness
- CWE-502
- Updated
- 2026-11-02
OSV
8.0
Pimcore: Unsafe PHP Deserialization in Multiple Locations Without allowed_classes Restriction
Pimcore is an Open Source Data & Experience Management Platform. Prior to 11.5.17 (LTS) and 12.3.7, multiple Pimcore locations call PHP's unserialize() on data from database columns and filesystem files without the allowed_classes restriction, including lib/Tool/Authentication.php, models/Site/Dao.php, models/DataObject/ClassDefinition/CustomLayout/Dao.php, models/Tool/TmpStore/Dao.php, models/Asset/WebDAV/Service.php, and admin-ui-classic-bundle/src/Helper/Dashboard.php, enabling object injection and remote code execution if an attacker can control the serialized data source. This issue is fixed in versions 11.5.17 (LTS) and 12.3.7.
- Record
CVE-2026-45162- CVSS 3.1
- 8.0 High
CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:H/I:H/A:H - Weakness
- CWE-502
- Updated
- 2026-11-02
OSVGHSA-36fc-7wjg-mfvj
8.0
Pimcore has Unsafe PHP Deserialization in Multiple Locations Without allowed_classes Restriction
GitHub Security Advisory Draft — GM-374
Summary
Multiple locations in Pimcore v11 call PHP's unserialize() on data from database columns and filesystem files without the allowed_classes restriction, enabling object injection if an attacker can control the serialized data source.
Severity
CVSS 3.1: 8.0 (High) — AV:N/AC:H/PR:H/UI:N/S:C/C:H/I:H/A:H
Affected Component
- Package:
pimcore/pimcoreandpimcore/admin-ui-classic-bundle - Files:
lib/Tool/Authentication.php(line 82) — session token deserializationmodels/Site/Dao.php(line 68) — site domains from databasemodels/DataObject/ClassDefinition/CustomLayout/Dao.php(line 69) — layout definitions from databasemodels/Tool/TmpStore/Dao.php(line 64) — temporary store data from databasemodels/Asset/WebDAV/Service.php(line 36) — delete log from filesystemadmin-ui-classic-bundle/src/Helper/Dashboard.php(line 64) — dashboard config from filesystem
Description
Six locations in Pimcore core call unserialize() directly (bypassing Tool\Serialize) on data sourced from database columns or filesystem files without passing the allowed_classes parameter. This means any class available in the autoloader will be instantiated during deserialization.
If an attacker can write to the data source (e.g., via SQL injection targeting the tmp_store, sites, or custom_layouts tables, or via a file write vulnerability targeting the WebDAV delete log), they can inject serialized PHP gadget chains that execute arbitrary code when the data is deserialized.
This is related to but distinct from the Tool\Serialize::unserialize() issue — these calls bypass the wrapper entirely.
Impact
PHP object injection leading to Remote Code Execution when chained with a data source write vulnerability. Pimcore's dependency tree (Guzzle, Symfony, Monolog, Doctrine) provides numerous known gadget chains.
Proof of Concept
- Identify a writable data source (e.g.,
tmp_storetable via SQL injection, orwebdav-delete.datvia file write) - Write a serialized PHP gadget chain (e.g., Monolog
BufferHandlerchain from phpggc) - Trigger the deserialization (e.g., access a page that reads TmpStore, or trigger a WebDAV operation)
- The gadget chain executes with web server privileges
Suggested Fix
Add allowed_classes parameter to all unserialize() calls. Where no objects are needed, use ['allowed_classes' => false]. Consider migrating to JSON serialization for data that doesn't require object preservation.
// Example fix for Site/Dao.php:
$siteDomains = unserialize($site['domains'], ['allowed_classes' => false]);
// Example fix for TmpStore/Dao.php:
$item['data'] = unserialize($item['data'], ['allowed_classes' => false]);
References
- CWE-502: Deserialization of Untrusted Data
- OWASP Deserialization Cheat Sheet
- phpggc: PHP Generic Gadget Chains
- Record
GHSA-36fc-7wjg-mfvj- CVSS 3.1
- 8.0 High
CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:H/I:H/A:H - Weakness
- CWE-502
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
pimcore/pimcorePackagist |
12.0.0-RC1 to 12.3.6 | 12.3.7 |
pimcore/pimcorePackagist |
through 11.5.16 | 11.5.17 |
pimcore/pimcorePackagist |
2026.1.0 up to 2026.1.3 | 2026.1.3 |
pimcore/pimcorePackagist |
12.0.0-RC1 up to 12.3.7, plus listed versions v12.0.0v12.0.0-RC1v12.0.0-RC2v12.0.1v12.0.2 Show 21 moreShow lessv12.0.3v12.0.4v12.1.0v12.1.1v12.1.2v12.1.3v12.1.4v12.1.5v12.2.0v12.2.1v12.2.2v12.2.3v12.2.4v12.3.0v12.3.1v12.3.1.1v12.3.2v12.3.3v12.3.4v12.3.5v12.3.6 |
12.3.7 |
pimcore/pimcorePackagist |
before 11.5.17, plus listed versions 10.0.82.2.02.2.12.2.22.3.0 Show 45 moreShow less3.0.03.0.13.0.23.0.33.0.43.0.53.0.63.1.03.1.14.0.04.0.14.1.04.1.14.1.24.1.34.2.04.3.04.3.14.4.04.4.14.4.24.4.34.5.04.6.04.6.14.6.24.6.34.6.44.6.5v10.0.0v10.0.0-BETA1v10.0.0-BETA2v10.0.0-BETA3v10.0.0-BETA4v10.0.1v10.0.2v10.0.3v10.0.4v10.0.5v10.0.6v10.0.7v10.0.9v10.1.0v10.1.1v10.1.2 |
11.5.17 |
pimcore/pimcorePackagist |
2026.1.0 up to 2026.1.3, plus listed versions v2026.1.0v2026.1.1v2026.1.2 |
2026.1.3 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-45162 is a high vulnerability (CVSS 8.0) in Pimcore, published May 27, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.99%, the 62nd percentile. Fixed in pimcore/pimcore 12.3.7.
References
github.com/pimcore/pimcore/security/advisories/GHSA-36fc-7wjg-mfvj
github.com/pimcore/pimcore/pull/19119
github.com/pimcore/pimcore/commit/4788bf3a3a7f2f760a8fe61e522565941e154e1e
github.com/pimcore/pimcore/releases/tag/v12.3.7
github.com/advisories/GHSA-36fc-7wjg-mfvj
github.com/CVEProject/cvelistV5/tree/main/cves/2026/45xxx/CVE-2026-45162.json
nvd.nist.gov/vuln/detail/CVE-2026-45162
github.com/pimcore/pimcore
Left out here: 246 versions. The JSON record has them.