CVE-2025-27617
Executive Summary
CVE-2025-27617 is a SQL injection vulnerability in Pimcore, an open-source data and experience management platform. An authenticated attacker can craft a malicious filter string to execute arbitrary SQL commands against the backend database. This flaw exists in versions prior to 11.5.4. Successful exploitation could lead to data exfiltration, privilege escalation, or complete database compromise. No public proof-of-concept (PoC) or exploit code is currently available, and the EPSS score is 0.0%, indicating low exploitation activity at this time. The vendor has released a fix in version 11.5.4.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
Pimcore is a PHP-based application distributed via Composer. Organizations using Pimcore as a dependency should immediately update to version 11.5.4. The vulnerability is introduced through user-controlled filter parameters, not through a compromised package. However, as an open-source project, supply chain risks include malicious commits or compromised maintainer accounts. Verify the integrity of the updated package via checksums or signed releases.
CVSS Breakdown & Threat Level
The CVSS vector is not provided by NVD. Based on the vulnerability type (SQL injection) and the requirement for authentication, a reasonable estimated vector is:
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H (Base Score: 8.8 – High)
- Attack Vector (AV): Network – The attacker can exploit the vulnerability remotely.
- Attack Complexity (AC): Low – No special conditions are required.
- Privileges Required (PR): Low – The attacker must have valid credentials.
- User Interaction (UI): None – No user action is needed.
- Scope (S): Unchanged – The vulnerable component and the database are within the same security authority.
- Confidentiality (C): High – Full database read access is possible.
- Integrity (I): High – Data can be modified or deleted.
- Availability (A): High – Database operations can be disrupted.
Threat Level: High. Although no public exploit exists, the vulnerability is easily exploitable by authenticated users and can lead to complete database compromise.
Deep Dive & Mechanics
The vulnerability resides in the filter functionality of Pimcore’s data management interface. Authenticated users can supply a filter string (likely via a REST API or admin panel) that is not properly sanitized before being used in SQL queries. The filter string is concatenated directly into a SQL WHERE clause, allowing an attacker to inject arbitrary SQL commands.
Root Cause: Lack of parameterized queries or proper input validation for filter parameters. The application likely uses string concatenation to build SQL queries from user-supplied filter criteria.
Attack Vector: An authenticated user sends a crafted HTTP request (e.g., POST or GET) to an endpoint that processes filters. The filter parameter contains SQL injection payloads.
Impact: An attacker can:
- Extract sensitive data (user credentials, PII, business data).
- Modify or delete database records.
- Potentially escalate privileges by manipulating authentication tables.
- Execute operating system commands if the database user has sufficient privileges (e.g.,
xp_cmdshellin SQL Server orCOPY ... FROM PROGRAMin PostgreSQL).
Vulnerable vs. Patched Code
Vulnerable Code (Pre-11.5.4):
// Example of vulnerable filter handling
$filter = $_POST['filter'];
$query = "SELECT * FROM objects WHERE " . $filter;
$result = $db->query($query);
Patched Code (11.5.4):
// Example of patched filter handling using parameterized queries
$filter = $_POST['filter'];
// Assume $filter is an array of conditions
$conditions = [];
$params = [];
foreach ($filter as $key => $value) {
$conditions[] = "$key = ?";
$params[] = $value;
}
$where = implode(' AND ', $conditions);
$query = "SELECT * FROM objects WHERE " . $where;
$result = $db->executeQuery($query, $params);
The patch ensures that user input is treated as data, not as executable SQL code, by using prepared statements or parameterized queries.
Exploitation & Lab Setup
Red Team
Prerequisites:
- A valid Pimcore user account (any role with access to filter functionality).
- Network access to the Pimcore instance.
Exploitation Steps:
- Identify the vulnerable endpoint (e.g.,
/admin/object/listor similar). - Craft a malicious filter string. Example payload for a time-based blind SQL injection:
filter=1 AND (SELECT IF(1=1,SLEEP(5),'a'))-- - - Send the request using a tool like
curl:curl -X POST 'https://target.pimcore/admin/object/list' \ -H 'Cookie: PHPSESSID=your_session' \ -d 'filter=1 AND (SELECT IF(1=1,SLEEP(5),'a'))-- -' - Observe a 5-second delay, confirming SQL injection.
- Extract data using UNION-based or error-based techniques. Example for MySQL:
filter=1 UNION SELECT 1,2,3,4,5,group_concat(username,':',password) FROM users-- -
Note: No public exploit code is available. The above is a generic example.
Blue Team
Detection:
- Monitor for unusual SQL errors in application logs (e.g.,
mysql error: You have an error in your SQL syntax). - Look for HTTP requests with filter parameters containing SQL keywords (
UNION,SELECT,SLEEP,OR 1=1). - Use WAF rules to block common SQL injection patterns.
Hunting:
- Search for requests to endpoints like
/admin/object/listwith non-standard filter values. - Analyze database query logs for unexpected queries.
Lab Setup:
- Deploy a vulnerable Pimcore instance (version < 11.5.4) in an isolated environment.
- Create a test user with minimal privileges.
- Use Burp Suite or OWASP ZAP to intercept and modify filter requests.
- Verify the vulnerability by injecting a benign payload (e.g.,
1 AND 1=1vs1 AND 1=2).
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP requests containing SQL injection patterns in filter parameters.
- Unusual database error messages in HTTP responses.
- Outbound database connections to unexpected IPs (if data exfiltration occurs).
Host IOCs:
- Application logs showing SQL syntax errors.
- Database logs with anomalous queries (e.g.,
UNION SELECT,SLEEP). - New or modified files in the Pimcore installation directory (if RCE is achieved).
File IOCs:
- Suspicious entries in Pimcore’s log files (e.g.,
/var/www/pimcore/var/log/).
- Suspicious entries in Pimcore’s log files (e.g.,
Detection Engineering
YARA Rule
rule CVE_2025_27617_SQLi_Filter {
meta:
description = "Detects SQL injection attempts targeting Pimcore filter parameters"
author = "Valters IT"
date = "2025-03-20"
reference = "CVE-2025-27617"
strings:
$sqli1 = /filter=.*(UNION|SELECT|SLEEP|OR\s+1=1|AND\s+1=1)/i
$sqli2 = /filter=.*(--|#|\/\*)/i
condition:
any of them
}
Sigma Rule
title: Pimcore SQL Injection via Filter Parameter
id: 8a4b3c2d-1e5f-6a7b-8c9d-0e1f2a3b4c5d
status: experimental
description: Detects SQL injection attempts in Pimcore filter parameters
author: Valters IT
date: 2025/03/20
logsource:
category: webserver
product: apache
service: access_combined
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: 'filter='
cs-uri-query|re: '(UNION|SELECT|SLEEP|OR\s+1=1|AND\s+1=1|--|#|/\*)'
condition: selection
falsepositives:
- Legitimate use of filter with special characters (rare)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-27617 Pimcore SQL Injection Attempt"; flow:to_server,established; content:"POST"; http_method; content:"filter="; http_client_body; pcre:"/(UNION|SELECT|SLEEP|OR\s+1=1|AND\s+1=1|--|#|\/\*)/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Upgrade Pimcore to version 11.5.4 or later. This is the only complete fix.
- If immediate upgrade is not possible, apply a virtual patch using a WAF to block SQL injection patterns in filter parameters.
- Restrict access to Pimcore admin interfaces to trusted IPs only.
Long-Term Measures:
- Implement input validation and parameterized queries for all database interactions.
- Conduct a code review of custom filter implementations.
- Enable detailed logging and monitoring for all admin actions.
- Follow the principle of least privilege for database users.
Workarounds:
- Disable the filter functionality temporarily if not critical.
- Use a reverse proxy to inspect and sanitize filter parameters.
Valters IT
Securing Digital Frontiers