CVE-2026-5394
Pimcore Platform v12.3.3 - SQL Injection in DataObject composite index handling
An authenticated administrative user who can import or save DataObject class definitions can inject attacker-controlled composite index metadata and trigger unintended SQL execution in the backend.
This issue affects pimcore: 12.3.3.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- High
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- Low
- Availability
- Low
Exploit likelihood
What each source reports
CVE List Score used
7.0
Pimcore Platform v12.3.3 - SQL Injection in DataObject composite index handling
An authenticated administrative user who can import or save DataObject class definitions can inject attacker-controlled composite index metadata and trigger unintended SQL execution in the backend.
This issue affects pimcore: 12.3.3.
- Record
CVE-2026-5394- CVSS 4.0
- 7.0 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:L/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-89
- Updated
- 2026-11-02
EUVDEUVD-2026-25909
7.0
An authenticated administrative user who can import or save DataObject class definitions can inject attacker-controlled composite index metadata and trigger unintended SQL execution in the backend.
This issue affects pimcore: 12.3.3.
- Record
EUVD-2026-25909- CVSS 4.0
- 7.0 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:L/VA:L/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-c8g3-x47w-8q7p
7.0
Duplicate Advisory: Pimcore admin users can trigger SQL Injection
Duplicate Advisory
This advisory has been withdrawn because it is a duplicate of GHSA-r2f4-ff2p-xc64. This link is maintained to preserve external references.
Original Description
An authenticated administrative user who can import or save DataObject class definitions can inject attacker-controlled composite index metadata and trigger unintended SQL execution in the backend.
This issue affects pimcore: 12.3.3.
- Record
GHSA-c8g3-x47w-8q7p- CVSS 4.0
- 7.0 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:L/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-89
- Updated
- 2026-11-02
GitHub AdvisoriesGHSA-r2f4-ff2p-xc64
7.0
Pimcore Platform - SQL Injection in DataObject composite index handling during class definition import/save
My name is Oscar Uribe, Security Researcher at Fluid Attacks. I am reaching out because we have identified a security vulnerability in Pimcore 12.3.3 that we would like to report to you so we can coordinate a responsible disclosure together.
As part of our standard disclosure measures, we follow a timeline (outlined at https://fluidattacks.com/advisories/policy), which is aligned with ISO/IEC 29147:2018 and ISO/IEC 30111:2019. In short, the timeline works as follows: we ask for acknowledgment of the report within a few days of your first accessing it, and from there, we are happy to coordinate a joint disclosure date with you, typically within 90 days of the initial discovery. This gives your team reasonable time to assess, develop, and release a fix.
We have reserved the CVE ID "CVE-2026-5394" for this issue, and the advisory will eventually be published at https://fluidattacks.com/advisories/dragons. We are committed to coordinating the timing of that publication with you.
Please feel free to reach out if you have any questions about the report, the process, or the timeline. We are glad to work with you on this.
Description
An authenticated administrative user who can import or save DataObject class definitions can inject attacker-controlled composite index metadata and trigger unintended SQL execution in the backend.
The vulnerable flow accepts compositeIndices from imported JSON, stores the values without strict validation, and later concatenates them directly into ALTER TABLE ... DROP INDEX and ALTER TABLE ... ADD INDEX statements executed through Doctrine DBAL.
Although the original report focused on compositeIndices.index_key, independent code review shows that the strongest and most reliable injection point is compositeIndices.index_columns, because it is inserted verbatim inside the ADD INDEX (...) clause. This permits injection of additional ALTER TABLE subclauses against Pimcore object tables without relying on stacked queries.
Vulnerability
Root cause
- Source:
Pimcore\Model\DataObject\ClassDefinition\Service::importClassDefinitionFromJson()acceptscompositeIndicesdirectly from imported JSON.
- Assignment:
Pimcore\Model\DataObject\ClassDefinition::setCompositeIndices()does not enforce an allowlist for index names or column names.- The only special handling is a ManyToOne relation rewrite to
__idand__type, which is not a security control.
- Sink:
Pimcore\Model\DataObject\Traits\CompositeIndexTrait::updateCompositeIndices()builds raw SQL with string concatenation and executes it via$this->db->executeQuery(...).
- Missing protection:
quoteIdentifier()is used for theSHOW INDEXESquery, but not for the dynamicALTER TABLEstatements.- No server-side schema validation restricts
index_keyorindex_columnsto known safe identifier characters.
Confirmed source-to-sink path
importClassDefinitionFromJson()decodes attacker-controlled JSON and forwardscompositeIndices.setCompositeIndices()stores those values without sanitizing identifier content.ClassDefinition::save()reachesClassDefinition\Dao::update().Dao::update()callsupdateCompositeIndices()for:object_store_<classId>object_query_<classId>
Localizedfield\Daoalso callsupdateCompositeIndices()for:- localized query tables
- localized store tables
Why this is exploitable
The vulnerable ADD INDEX statement is built as:
'ALTER TABLE `'.$table.'` ADD INDEX `' . $key.'` ('.$columnName.');'
$columnName is produced from implode(',', $columns) and is not quoted or validated. A malicious index_columns element such as:
slider), DROP COLUMN `oo_className` --
produces SQL of the form:
ALTER TABLE `object_query_<id>` ADD INDEX `c_poc_idx` (slider), DROP COLUMN `oo_className` -- );
This remains a single ALTER TABLE…
- Record
GHSA-r2f4-ff2p-xc64- CVSS 4.0
- 7.0 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:L/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-89
- Updated
- 2026-11-02
NVD
7.0
An authenticated administrative user who can import or save DataObject class definitions can inject attacker-controlled composite index metadata and trigger unintended SQL execution in the backend.
This issue affects pimcore: 12.3.3.
- Record
CVE-2026-5394- CVSS 4.0
- 7.0 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:L/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - Weakness
- CWE-89
- Updated
- 2026-11-02
OSV
7.0
Pimcore Platform v12.3.3 - SQL Injection in DataObject composite index handling
An authenticated administrative user who can import or save DataObject class definitions can inject attacker-controlled composite index metadata and trigger unintended SQL execution in the backend.
This issue affects pimcore: 12.3.3.
- Record
CVE-2026-5394- CVSS 4.0
- 7.0 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:L/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-89
- Updated
- 2026-11-02
OSVGHSA-c8g3-x47w-8q7p
7.0
Duplicate Advisory: Pimcore admin users can trigger SQL Injection
Duplicate Advisory
This advisory has been withdrawn because it is a duplicate of GHSA-r2f4-ff2p-xc64. This link is maintained to preserve external references.
Original Description
An authenticated administrative user who can import or save DataObject class definitions can inject attacker-controlled composite index metadata and trigger unintended SQL execution in the backend.
This issue affects pimcore: 12.3.3.
- Record
GHSA-c8g3-x47w-8q7p- CVSS 4.0
- 7.0 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:L/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-89
- Updated
- 2026-11-02
OSVGHSA-r2f4-ff2p-xc64
7.0
Pimcore Platform - SQL Injection in DataObject composite index handling during class definition import/save
My name is Oscar Uribe, Security Researcher at Fluid Attacks. I am reaching out because we have identified a security vulnerability in Pimcore 12.3.3 that we would like to report to you so we can coordinate a responsible disclosure together.
As part of our standard disclosure measures, we follow a timeline (outlined at https://fluidattacks.com/advisories/policy), which is aligned with ISO/IEC 29147:2018 and ISO/IEC 30111:2019. In short, the timeline works as follows: we ask for acknowledgment of the report within a few days of your first accessing it, and from there, we are happy to coordinate a joint disclosure date with you, typically within 90 days of the initial discovery. This gives your team reasonable time to assess, develop, and release a fix.
We have reserved the CVE ID "CVE-2026-5394" for this issue, and the advisory will eventually be published at https://fluidattacks.com/advisories/dragons. We are committed to coordinating the timing of that publication with you.
Please feel free to reach out if you have any questions about the report, the process, or the timeline. We are glad to work with you on this.
Description
An authenticated administrative user who can import or save DataObject class definitions can inject attacker-controlled composite index metadata and trigger unintended SQL execution in the backend.
The vulnerable flow accepts compositeIndices from imported JSON, stores the values without strict validation, and later concatenates them directly into ALTER TABLE ... DROP INDEX and ALTER TABLE ... ADD INDEX statements executed through Doctrine DBAL.
Although the original report focused on compositeIndices.index_key, independent code review shows that the strongest and most reliable injection point is compositeIndices.index_columns, because it is inserted verbatim inside the ADD INDEX (...) clause. This permits injection of additional ALTER TABLE subclauses against Pimcore object tables without relying on stacked queries.
Vulnerability
Root cause
- Source:
Pimcore\Model\DataObject\ClassDefinition\Service::importClassDefinitionFromJson()acceptscompositeIndicesdirectly from imported JSON.
- Assignment:
Pimcore\Model\DataObject\ClassDefinition::setCompositeIndices()does not enforce an allowlist for index names or column names.- The only special handling is a ManyToOne relation rewrite to
__idand__type, which is not a security control.
- Sink:
Pimcore\Model\DataObject\Traits\CompositeIndexTrait::updateCompositeIndices()builds raw SQL with string concatenation and executes it via$this->db->executeQuery(...).
- Missing protection:
quoteIdentifier()is used for theSHOW INDEXESquery, but not for the dynamicALTER TABLEstatements.- No server-side schema validation restricts
index_keyorindex_columnsto known safe identifier characters.
Confirmed source-to-sink path
importClassDefinitionFromJson()decodes attacker-controlled JSON and forwardscompositeIndices.setCompositeIndices()stores those values without sanitizing identifier content.ClassDefinition::save()reachesClassDefinition\Dao::update().Dao::update()callsupdateCompositeIndices()for:object_store_<classId>object_query_<classId>
Localizedfield\Daoalso callsupdateCompositeIndices()for:- localized query tables
- localized store tables
Why this is exploitable
The vulnerable ADD INDEX statement is built as:
'ALTER TABLE `'.$table.'` ADD INDEX `' . $key.'` ('.$columnName.');'
$columnName is produced from implode(',', $columns) and is not quoted or validated. A malicious index_columns element such as:
slider), DROP COLUMN `oo_className` --
produces SQL of the form:
ALTER TABLE `object_query_<id>` ADD INDEX `c_poc_idx` (slider), DROP COLUMN `oo_className` -- );
This remains a single ALTER TABLE…
- Record
GHSA-r2f4-ff2p-xc64- CVSS 4.0
- 7.0 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:L/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-89
- 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 |
|---|---|---|
| affected | ||
| 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-5394 is a high vulnerability (CVSS 7.0) in Pimcore, published April 27, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.43%, the 37th percentile. Fixed in pimcore/pimcore 12.3.7.
References
Left out here: 246 versions and the rest of 2 source descriptions. The JSON record has them.