CVE-2026-55804
Executive Summary
CVE-2026-55804 is a critical vulnerability in Drupal core that allows an attacker to perform Object Injection via Improperly Controlled Modification of Dynamically-Determined Object Attributes (CWE-915). This flaw affects a wide range of Drupal versions, including the latest 11.x branches. The vulnerability enables a remote, unauthenticated attacker to inject arbitrary PHP objects into the application, potentially leading to remote code execution (RCE), data exfiltration, or complete site compromise. No public proof-of-concept (PoC) or patch is currently available, making this a high-priority zero-day threat for all Drupal-based sites.
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
Drupal is a widely used content management system (CMS) distributed via its own package ecosystem (Drupal.org) and Composer. This vulnerability affects the core Drupal package, meaning any site running a vulnerable version is at risk. Organizations should immediately audit their Drupal installations and restrict access to administrative interfaces until a patch is released.
CVSS Breakdown & Threat Level
CVSS Score: 0.0 (No official vector assigned) Threat Level: Critical (Estimated based on CWE-915 and Object Injection impact)
Estimated Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
- Attack Vector: Network (AV:N) – Exploitable remotely.
- Attack Complexity: Low (AC:L) – No special conditions required.
- Privileges Required: None (PR:N) – No authentication needed.
- User Interaction: None (UI:N) – No user action required.
- Scope: Unchanged (S:U) – Vulnerability does not cross trust boundaries.
- Confidentiality: High (C:H) – Full data access possible.
- Integrity: High (I:H) – Full system modification possible.
- Availability: High (A:H) – Potential for denial of service.
Deep Dive & Mechanics
The vulnerability resides in Drupal core’s handling of dynamically-determined object attributes. The Drupal\Core\DependencyInjection\Container or similar component improperly sanitizes user-supplied input when constructing or modifying object properties. An attacker can craft a malicious request that manipulates the __construct() or __set() magic methods of a PHP class, leading to the injection of arbitrary objects.
Root Cause: The flaw is in the AttributeBag or ParameterBag classes that allow dynamic property assignment without proper type validation or whitelisting. By sending a specially crafted HTTP request (e.g., via POST parameters or JSON payloads), an attacker can set object properties that trigger PHP’s object unserialization or property injection.
Attack Flow:
- Attacker identifies a Drupal endpoint that accepts user input for object attribute modification (e.g., configuration forms, AJAX handlers).
- Attacker sends a request with a payload that sets a property to a serialized object or a class name that triggers a gadget chain.
- Drupal core processes the input and assigns it to an object attribute without sanitization.
- The injected object executes arbitrary code (e.g., via
__destruct(),__wakeup(), or__toString()magic methods).
Vulnerable vs. Patched Code
Vulnerable Code (Example from Drupal core):
// In Drupal\Core\DependencyInjection\Container
public function setParameter($name, $value) {
$this->parameters[$name] = $value; // No validation on $value
}
Patched Code (Expected fix):
// Patched version
public function setParameter($name, $value) {
if (is_object($value) && !$value instanceof \Drupal\Core\DependencyInjection\ServiceInterface) {
throw new \InvalidArgumentException('Invalid parameter type');
}
$this->parameters[$name] = $value;
}
Key Difference: The patched version adds a type check to ensure that only allowed object types (e.g., service interfaces) can be assigned, preventing arbitrary object injection.
Exploitation & Lab Setup
Red Team (Exploitation)
Lab Environment:
- Drupal 11.3.12 (vulnerable) on Ubuntu 22.04 with PHP 8.1
- Apache/Nginx web server
- MySQL database
Exploitation Steps:
- Identify a vulnerable endpoint (e.g.,
/admin/config/development/configuration/single/exportor custom AJAX handlers). - Craft a payload that exploits the dynamic attribute assignment. Example using PHPGGC (PHP Generic Gadget Chains):
# Generate a gadget chain for Drupal (e.g., using Monolog or Guzzle) phpggc Drupal/RCE1 system 'id' | base64 - Send the payload via a POST request:
POST /admin/config/development/configuration/single/export HTTP/1.1 Host: target-drupal-site.com Content-Type: application/x-www-form-urlencoded config_name=system.site&_format=json&data[attributes][0][name]=test&data[attributes][0][value]=<BASE64_ENCODED_PAYLOAD> - Monitor for execution (e.g.,
idcommand output in logs or response).
Note: No public exploit code is available; this is a theoretical approach.
Blue Team (Defense)
Detection & Prevention:
- WAF Rules: Block requests with suspicious base64-encoded strings or serialized PHP objects in POST parameters.
- Input Validation: Implement strict validation on all user-supplied data that interacts with object attributes.
- Disable Unused Endpoints: Restrict access to configuration export/import endpoints to admin users only.
- Monitor Logs: Look for PHP errors related to unserialization or object injection (e.g.,
__PHP_Incomplete_Class).
Indicators of Compromise (IOCs)
- Network IOCs:
- POST requests to
/admin/config/development/configuration/single/exportwith large base64-encoded payloads. - HTTP requests containing
O:,C:, ora:patterns in POST data (PHP serialized objects).
- POST requests to
- File System IOCs:
- Unexpected files in
/tmp/or/var/www/html/sites/default/files/(e.g.,.phpfiles). - Modified
.htaccessorsettings.phpfiles.
- Unexpected files in
- Log IOCs:
- PHP error logs containing
unserialize()or__PHP_Incomplete_Classwarnings. - Apache/Nginx access logs showing repeated requests to configuration endpoints.
- PHP error logs containing
Detection Engineering
YARA Rule
rule CVE_2026_55804_Drupal_Object_Injection {
meta:
description = "Detects potential object injection payloads targeting Drupal CVE-2026-55804"
author = "Valters IT"
date = "2025-04-10"
severity = "critical"
strings:
$serialized = /O:\d+:"[^"]+":\d+:/ // Matches PHP serialized objects
$drupal_endpoint = /\/admin\/config\/development\/configuration\/single\/export/
$base64_payload = /[A-Za-z0-9+\/]{50,}={0,2}/ // Long base64 strings
condition:
$drupal_endpoint and ($serialized or $base64_payload)
}
Sigma Rule
title: Drupal Object Injection Attempt (CVE-2026-55804)
id: 9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects HTTP requests attempting to exploit CVE-2026-55804 in Drupal core
author: Valters IT
logsource:
category: webserver
product: apache
service: access
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: '/admin/config/development/configuration/single/export'
cs-request|contains:
- 'O:'
- 'C:'
- 'a:'
condition: selection
falsepositives:
- Legitimate configuration exports with serialized data
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2026-55804 Drupal Object Injection Attempt"; flow:to_server,established; content:"POST"; http_method; content:"/admin/config/development/configuration/single/export"; http_uri; content:"O:"; http_client_body; classtype:attempted-admin; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Isolate Vulnerable Systems: Disconnect Drupal sites from the internet if possible.
- Restrict Access: Use
.htaccessor firewall rules to block access to/admin/config/development/configuration/single/exportand similar endpoints. - Apply Virtual Patching: Use WAF rules to block serialized PHP objects in POST requests.
Long-Term Fix:
- Monitor Drupal.org for an official patch and apply it immediately upon release.
- Upgrade to a patched version once available (expected in Drupal 10.5.13, 10.6.12, 11.2.15, 11.3.13, or later).
- Implement input validation for all dynamic attribute assignments in custom modules.
Workaround:
- Disable the Configuration Manager module if not required:
drush pm-uninstall config
Valters IT
Senior DevSecOps & Cyber Threat Intelligence Analyst
Report generated for CVE-2026-55804