CVE-2026-28370
Python vulnerability analysis and mitigation

Overview

CVE-2026-28370 is an eval injection vulnerability in the OpenStack Vitrage query parser that allows authenticated API users to execute arbitrary code on the Vitrage service host. Reported by Khalil Lemtaffah of Nokia and disclosed on February 27, 2026, it affects all Vitrage versions before 12.0.1, as well as versions 13.0.0, 14.0.0, and 15.0.0. The vulnerability carries a CVSS v3.1 base score of 9.1 (Critical) with a changed scope, reflecting its potential to impact resources beyond the vulnerable component (Github Advisory, oss-security).

Technical details

The root cause is CWE-95 (Improper Neutralization of Directives in Dynamically Evaluated Code / Eval Injection), located in the _create_query_function within vitrage/graph/query.py. Specifically, the create_predicate() function constructs a Python lambda expression string from user-supplied query input and passes it directly to Python's eval() without sanitizing the input for code injection (Vitrage source). The _evaluable_str() helper wraps string values in single quotes but does not escape or validate them, allowing an attacker to break out of the string context and inject arbitrary Python expressions. Exploitation requires network access to the Vitrage API and valid API credentials (high privileges required), but no user interaction is needed (Github Advisory).

Impact

Successful exploitation allows an authenticated attacker to execute arbitrary code on the Vitrage service host with the privileges of the Vitrage service account, resulting in high impact to confidentiality, integrity, and availability. This can lead to complete compromise of the Vitrage service, unauthorized access to the underlying host, and potential lateral movement within the OpenStack infrastructure. All deployments that expose the Vitrage API are affected, making the blast radius significant in multi-tenant cloud environments (oss-security, Github Advisory).

Exploitability

A proof-of-concept reference is available via the OpenStack Storyboard issue tracker, though no weaponized exploit or active in-the-wild exploitation has been confirmed as of the time of disclosure (OpenStack Storyboard). The EPSS score is approximately 0.085%, indicating a low near-term exploitation probability. The vulnerability is not currently listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. Exploitation requires valid Vitrage API credentials, which limits opportunistic attacks but does not eliminate insider or post-compromise scenarios.

Exploitation steps

  1. Reconnaissance: Identify OpenStack deployments running a vulnerable version of Vitrage (before 12.0.1, or exactly 13.0.0, 14.0.0, 15.0.0) by querying OpenStack service catalogs or scanning for the Vitrage API endpoint (typically on port 8999).
  2. Obtain API credentials: Acquire valid OpenStack credentials with access to the Vitrage API — this could be through compromised user accounts, insider access, or credential theft.
  3. Craft malicious query: Construct a Vitrage API query payload that injects Python code into the query parser. Because _evaluable_str() wraps strings in single quotes without escaping, a value like ' + __import__('os').system('id') + ' can break out of the string context within the generated lambda expression.
  4. Submit the query: Send the crafted query to a Vitrage API endpoint that invokes create_predicate(), such as the topology or alarm query endpoints, via an authenticated HTTP request.
  5. Achieve code execution: The eval() call in create_predicate() evaluates the injected expression as Python code, executing arbitrary commands on the Vitrage service host under the service account's privileges.
  6. Post-exploitation: Use the code execution foothold to establish persistence, exfiltrate data, or pivot laterally within the OpenStack infrastructure (Vitrage source, oss-security).

Indicators of compromise

  • Network: Unusual or unexpected outbound connections from the Vitrage service host to external IPs; anomalous API calls to Vitrage query endpoints with atypical or malformed query parameters.
  • Logs: Vitrage service logs (vitrage.log) showing eval() errors or unexpected Python exceptions in vitrage/graph/query.py; API access logs recording authenticated requests with query strings containing Python syntax characters (e.g., __import__, os.system, backticks, or escaped quotes).
  • Process: Unexpected child processes spawned by the Vitrage service process (e.g., /bin/sh, bash, curl, wget, python3) that are not part of normal Vitrage operation.
  • File System: New or modified files in the Vitrage installation directory or /tmp; unexpected cron jobs or systemd units created under the Vitrage service account.
  • Authentication: Repeated or unusual API authentication events for accounts that do not normally interact with the Vitrage API.

Mitigation and workarounds

Upgrade OpenStack Vitrage to the patched versions: 12.0.1, 13.0.1, 14.0.1, or 15.0.1 as appropriate for your deployment. Patches are available for multiple OpenStack release branches (Antelope, Caracal, Dalmatian, Epoxy, Flamingo, Gazpacho) via the OpenDev review system (oss-security). As an interim workaround, restrict network access to the Vitrage API to only trusted, authorized users and networks, and audit existing API access permissions to minimize the number of accounts with Vitrage API access. Monitor Vitrage service logs for suspicious query patterns indicative of injection attempts.

Community reactions

The OpenStack Vulnerability Management Team published the official security advisory OSSA-2026-003 on March 3, 2026, crediting Khalil Lemtaffah of Nokia for the discovery (oss-security). Security news outlets including SecurityOnline.info and The Hacker Wire covered the vulnerability, highlighting the critical RCE risk in OpenStack environments (SecurityOnline). Red Hat also acknowledged the vulnerability for its OpenStack Platform products (Red Hat). Community discussion on oss-security and Bluesky noted the straightforward nature of the eval() misuse and the importance of input validation in query parsers.

Additional resources

Linux Distribution fix status

Fix availability across major Linux distributions and their releases.

Debian

Fixed

bookworm

vitrage: 9.0.0-3+deb12u1

Fixed

trixie

vitrage: 14.0.0-4+deb13u1

Fixed

Ubuntu

Unknown

devel

vitrage

Unknown

focal (esm-apps)

vitrage

Unknown

jammy

vitrage

Unknown

jammy (esm-apps)

vitrage

Unknown

noble

vitrage

Unknown

noble (esm-apps)

vitrage

Unknown

resolute

vitrage

Unknown

resolute (esm-apps)

vitrage

Unknown

SourceThis report was generated using AI

Related Python vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-59971CRITICAL10
  • Python logoPython
  • mysql-mcp-server
NoYesSep 11, 2026
CVE-2026-59177HIGH8.8
  • Python logoPython
  • esphome-device-builder
NoYesSep 09, 2026
CVE-2026-88006MEDIUM6.5
  • Python logoPython
  • open-webui
NoYesSep 10, 2026
CVE-2026-88005MEDIUM6.5
  • Python logoPython
  • open-webui
NoYesSep 10, 2026
CVE-2026-49836MEDIUM4.6
  • Python logoPython
  • psd-tools
NoYesSep 10, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management