CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-27461

Pimcore SQL Injection: When 'Enterprise' Logic Meets 'Select * From Disaster'

Amit Schendel
Amit Schendel
Senior Security Researcher

Feb 25, 2026·6 min read·55 visits

Executive Summary (TL;DR)

Pimcore versions prior to 12.3.3 contain a classic SQL Injection flaw in the `Dependency Dao` class. Authenticated admins can exploit the `filter` parameter to dump the entire database, including password hashes, despite the application using an ORM.

A critical SQL Injection vulnerability in the Pimcore platform allows authenticated administrators to execute arbitrary SQL commands via the dependency listing feature. By manipulating JSON filter parameters, attackers can bypass sanitization and inject malicious payloads directly into `RLIKE` clauses.

The Hook: Enterprise Complexity, Enterprise Bugs

Pimcore is one of those massive, 'do-it-all' platforms. It handles Product Information Management (PIM), Digital Asset Management (DAM), and Customer Data Platforms (CDP). It’s the digital equivalent of a Swiss Army knife that also tries to be a toaster. When software tries to do everything, the attack surface expands exponentially.

In this episode of 'Why is my database leaking?', we're looking at a feature designed to help administrators track dependencies. For example, if you want to delete an image, Pimcore checks if that image is used in a product page. Useful? Absolutely. Safe? Well, usually.

But in CVE-2026-27461, this innocent dependency checker becomes a gateway to the database's soul. The vulnerability lies deep within the Data Access Object (DAO) layer—specifically where the application tries to filter these dependencies using regular expressions. Spoiler alert: mixing SQL, Regex, and user input without a condom (parameterization) is a bad idea.

The Flaw: Concatenation in the Year of Our Lord 2026

You would think that by 2026, direct string concatenation in SQL queries would be an extinct species, like the Dodo or a printer that works on the first try. Unfortunately, it’s alive and well in models/Dependency/Dao.php.

The flaw occurs in two methods: getFilterRequiresByPath and getFilterRequiredByPath. These functions accept a $value parameter, which comes from a JSON-decoded query string sent by the frontend. The developer intended to let users filter the list of dependencies using a search string.

Instead of passing this search string to a prepared statement, the code takes the raw value and drops it directly into a SQL RLIKE clause. The RLIKE operator in MySQL/MariaDB checks if a string matches a regular expression. The logic looked something like this:

... AND column RLIKE '" . $value . "'

See the problem? If $value contains a single quote, the string terminates, and the SQL parser starts interpreting the rest of the input as commands. It’s the oldest trick in the book, and it still works because developers often forget that 'Search Filters' are just as dangerous as 'Login Forms'.

The Code: The Smoking Gun

Let's look at the crime scene. In the vulnerable version of models/Dependency/Dao.php, the query construction was reckless. Here is the simplified vulnerable code:

// VULNERABLE CODE
$query = "SELECT ... FROM dependencies d ...
          WHERE ... AND LOWER(CONCAT(o.path, o.key)) RLIKE '" . $value . "'";
 
// Execution (No parameter binding for $value)
$this->db->fetchAllAssociative($query);

There is zero sanitation here. If $value is admin, the query is safe. If $value is admin' OR '1'='1, the query becomes a logic bomb.

The fix, introduced in version 12.3.3, is a textbook example of how to do it right. The developers switched to Doctrine DBAL's prepared statements:

// PATCHED CODE
$query = "SELECT ... FROM dependencies d ...
          WHERE ... AND LOWER(CONCAT(o.path, o.key)) RLIKE :value";
 
$params = [
    'value' => preg_quote((string) $value) // Double protection!
];
 
$types = ['value' => ParameterType::STRING];
 
$this->db->fetchAllAssociative($query, $params, $types);

Notice two things here. First, the use of :value placeholder ensures the database driver handles the escaping. Second, they wrapped the value in preg_quote(). This is clever—since RLIKE expects a regex, a malicious user could potentially inject a "Regular Expression Denial of Service" (ReDoS) payload even if they couldn't inject SQL. By quoting the regex characters, they neutralized both the SQL injection and the regex complexity attack.

The Exploit: Dumping the Database

Now for the fun part. How do we weaponize this? The vulnerability requires authentication, specifically as an administrator with access to the dependency tab. While this sounds like a high barrier, consider the insider threat or a scenario where an attacker compromises a low-level admin account via XSS or phishing.

The Setup:

  1. Log in as an admin.
  2. Open your browser's DevTools Network tab.
  3. Navigate to an object and click the 'Dependencies' tab.
  4. Look for a request with a filter parameter.

The Attack: The filter parameter is a JSON object. It looks like this: {"value": "search_term"}. We can intercept this request and inject our SQL payload.

Payload Construction: We need to break out of the single quotes inside the RLIKE.

{
  "value": "') OR (SELECT SLEEP(5)) -- "
}

When the backend processes this, the SQL becomes:

... RLIKE '') OR (SELECT SLEEP(5)) -- '

If the server hangs for 5 seconds, we have confirmed blind SQL injection. From here, we can use tools like sqlmap or manual enumeration to extract the users table. Since we are already an admin, why do we care? Because we might be a restricted admin, and this vulnerability allows us to dump the hashes of the super admins, or access tables containing customer PII that our specific user role shouldn't see.

The Impact: Why 'Admin Only' Still Hurts

A common dismissal for vulnerabilities like this is, "But you need admin access!" This is true, and it does lower the CVSS score (hence the 6.9 Medium). However, in the real world, the perimeter is often soft.

If an attacker gains initial access to the Pimcore backend—perhaps through a weak password or a leaked session cookie—they are usually confined to specific permissions. Pimcore has a granular permission system (Object-level security). This SQL Injection blows that wide open.

With this vulnerability, a user who is only supposed to edit "Blog Posts" can execute SELECT * FROM payment_gateways or SELECT * FROM users. It is a vertical privilege escalation from "Content Editor" to "Database God." Furthermore, if this Pimcore instance is connected to other internal systems via database links, the attacker could pivot laterally across the infrastructure.

The Fix: Parameterize All The Things

The remediation is straightforward: Update Pimcore to version 12.3.3 or later. The patch effectively closes the hole by enforcing strict typing and parameter binding.

If you cannot upgrade immediately (perhaps you're stuck on a legacy 11.x build), you can manually patch models/Dependency/Dao.php. You must replace the string concatenation with Doctrine's placeholders.

Developer Takeaway: Never trust input, even if it comes from an 'Admin'. Just because a user is authenticated doesn't mean they aren't malicious (or compromised). Also, treat RLIKE, REGEXP, and ORDER BY clauses with extreme suspicion—they are often overlooked by automatic scanners and ORMs, making them prime targets for manual code review.

Official Patches

PimcorePull Request #18991 fixing the vulnerability

Fix Analysis (1)

Technical Appendix

CVSS Score
6.9/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
EPSS Probability
0.02%
Top 94% most exploited

Affected Systems

Pimcore CMSPimcore DAMPimcore PIM

Affected Versions Detail

Product
Affected Versions
Fixed Version
Pimcore
Pimcore
<= 11.5.14.112.3.3
Pimcore
Pimcore
>= 12.0.0, < 12.3.312.3.3
AttributeDetail
CWE IDCWE-89 (SQL Injection)
CVSS v4.06.9 (Medium)
Attack VectorNetwork (Authenticated Admin)
Vulnerable ParameterJSON 'filter' -> 'value'
SinkSQL RLIKE clause
Exploit MaturityProof of Concept (High Probability)

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1059.006Command and Scripting Interpreter: Python
Execution
CWE-89
Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')

The software constructs all or part of an SQL command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended SQL command when it is sent to a downstream component.

Known Exploits & Detection

Manual AnalysisExploit derived from patch diff showing lack of sanitization in RLIKE clause.

Vulnerability Timeline

Patch committed to GitHub
2026-02-19
GHSA Advisory Published
2026-02-24
CVE ID Assigned
2026-02-24

References & Sources

  • [1]GitHub Security Advisory
  • [2]NVD Entry

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 3 hours ago•GHSA-4PH6-MJV7-3FQ6
6.5

GHSA-4PH6-MJV7-3FQ6: Improper Handling of Untrusted DNS-over-HTTPS Response Data in netfoil

netfoil, an allowlist-based DNS proxy, failed to sanitize ALPN fields parsed from untrusted DNS-over-HTTPS (DoH) HTTPS Resource Records. This allowed attackers to inject ANSI escape sequences into log files or trigger Denial of Service (DoS) via uncontrolled memory allocations.

Alon Barad
Alon Barad
4 views•6 min read
•about 4 hours ago•GHSA-3GJW-F78C-VVPW
7.5

GHSA-3GJW-F78C-VVPW: Denial of Service via Unhandled Out-of-Bounds Indexing Panic in tokio-postgres

An issue was discovered in the tokio-postgres library for Rust prior to version 0.7.18. A trust assumption mismatch between the PostgreSQL protocol messages sent by a server and how they are parsed and indexed by the client-side library allows a rogue or compromised database server to trigger a Denial of Service (DoS) crash via an unhandled out-of-bounds slice indexing panic.

Alon Barad
Alon Barad
5 views•6 min read
•about 18 hours ago•CVE-2026-14669
8.8

CVE-2026-14669: PostgreSQL to_char() Timezone Abbreviation Heap-Based Buffer Overflow

CVE-2026-14669 is a critical heap-based buffer overflow vulnerability in PostgreSQL's date/time formatting function to_char(timestamptz). The flaw arises from unsafe copying of user-controlled timezone abbreviations into a fixed-size internal buffer. An authenticated database user can trigger this issue by setting a long POSIX timezone abbreviation containing custom formatting, allowing them to overwrite adjacent heap structures and hijack execution control to achieve remote code execution (RCE) with the privileges of the 'postgres' operating system user.

Alon Barad
Alon Barad
13 views•6 min read
•3 days ago•CVE-2026-63462
7.5

CVE-2026-63462: Unauthenticated Stack Overflow Denial of Service in Unleash Server

An unauthenticated remote denial of service vulnerability exists in the Unleash feature management platform. By submitting a crafted JSON payload containing deeply nested structures to an OpenAPI-validated endpoint, an attacker can trigger uncontrolled recursion within the error formatting module. This leads to a call-stack exhaustion (RangeError: Maximum call stack size exceeded) inside the Node.js runtime, causing the service to crash immediately without recovery.

Alon Barad
Alon Barad
11 views•6 min read
•3 days ago•CVE-2026-63004
5.5

CVE-2026-63004: Server-Side Request Forgery in Unleash Addon and Integration Subsystem

CVE-2026-63004 is a server-side request forgery (SSRF) vulnerability in the Unleash feature management platform. Authenticated administrators with CREATE_ADDON or UPDATE_ADDON privileges can exploit this vulnerability to initiate requests to loopback addresses, private networks, and cloud metadata endpoints, potentially leading to information disclosure and credential extraction.

Amit Schendel
Amit Schendel
9 views•8 min read
•3 days ago•CVE-2026-63466
4.1

CVE-2026-63466: Process-Wide Security Degradation via Global Module Mutation in Unleash

Prior to version 8.0.3, Unleash's Markdown event formatter directly mutated the global template-escaping function of the shared mustache Node.js module, resulting in a process-wide security degradation where HTML/Markdown escaping was permanently disabled for the application lifetime.

Alon Barad
Alon Barad
3 views•6 min read