Every CVE Search/ Get API key

CVE-2026-5394

Pimcore Platform v12.3.3 - SQL Injection in DataObject composite index handling

7.0 HighFix available

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

0.43%Up 0.4 points since Apr 28, 2026
90%50%10%1%

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 HighCVSS: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 HighCVSS: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 HighCVSS: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

  1. Source:
    • Pimcore\Model\DataObject\ClassDefinition\Service::importClassDefinitionFromJson() accepts compositeIndices directly from imported JSON.
  2. 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 __id and __type, which is not a security control.
  3. Sink:
    • Pimcore\Model\DataObject\Traits\CompositeIndexTrait::updateCompositeIndices() builds raw SQL with string concatenation and executes it via $this->db->executeQuery(...).
  4. Missing protection:
    • quoteIdentifier() is used for the SHOW INDEXES query, but not for the dynamic ALTER TABLE statements.
    • No server-side schema validation restricts index_key or index_columns to known safe identifier characters.

Confirmed source-to-sink path

  1. importClassDefinitionFromJson() decodes attacker-controlled JSON and forwards compositeIndices.
  2. setCompositeIndices() stores those values without sanitizing identifier content.
  3. ClassDefinition::save() reaches ClassDefinition\Dao::update().
  4. Dao::update() calls updateCompositeIndices() for:
    • object_store_<classId>
    • object_query_<classId>
  5. Localizedfield\Dao also calls updateCompositeIndices() 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 HighCVSS: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 HighCVSS: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 HighCVSS: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 HighCVSS: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

  1. Source:
    • Pimcore\Model\DataObject\ClassDefinition\Service::importClassDefinitionFromJson() accepts compositeIndices directly from imported JSON.
  2. 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 __id and __type, which is not a security control.
  3. Sink:
    • Pimcore\Model\DataObject\Traits\CompositeIndexTrait::updateCompositeIndices() builds raw SQL with string concatenation and executes it via $this->db->executeQuery(...).
  4. Missing protection:
    • quoteIdentifier() is used for the SHOW INDEXES query, but not for the dynamic ALTER TABLE statements.
    • No server-side schema validation restricts index_key or index_columns to known safe identifier characters.

Confirmed source-to-sink path

  1. importClassDefinitionFromJson() decodes attacker-controlled JSON and forwards compositeIndices.
  2. setCompositeIndices() stores those values without sanitizing identifier content.
  3. ClassDefinition::save() reaches ClassDefinition\Dao::update().
  4. Dao::update() calls updateCompositeIndices() for:
    • object_store_<classId>
    • object_query_<classId>
  5. Localizedfield\Dao also calls updateCompositeIndices() 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 HighCVSS: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

Affected packages
PackageAffectedFixed
pimcore/pimcore
Packagist
12.0.0-RC1 to 12.3.6
12.3.7
pimcore/pimcore
Packagist
through 11.5.16
11.5.17
pimcore/pimcore
Packagist
2026.1.0 up to 2026.1.3
2026.1.3
pimcore/pimcore
Packagist
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 less
v12.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/pimcore
Packagist
before 11.5.17, plus listed versions
10.0.82.2.02.2.12.2.22.3.0
Show 45 moreShow less
3.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/pimcore
Packagist
2026.1.0 up to 2026.1.3, plus listed versions
v2026.1.0v2026.1.1v2026.1.2
2026.1.3

History

History
RecordedChangedSources
affected
first indexedCVE 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

Show 4 moreShow less
This page doesn't list everything

Left out here: 246 versions and the rest of 2 source descriptions. The JSON record has them.

MoveEnter Open