CVE-2026-15035: OpenLLM: command injection via model repo name
HIGH PoC AVAILABLE CISA: TRACK*A command injection flaw in BentoML's OpenLLM (0.6.30) lets a local, low-privileged user smuggle shell metacharacters through a model repository directory name into the async_run_command function, resulting in arbitrary command execution on the host. Exploitation requires local access and low privileges but no user interaction, and a working exploit has already been published, which raises the odds of opportunistic abuse on shared ML dev boxes or multi-tenant inference hosts even though this CVE carries no EPSS score and is not in CISA KEV. The scored impact is bounded (CVSS 5.3, confidentiality/integrity/availability all rated low) because exploitation is confined to local context, but the project was notified via issue #1229 and has not yet responded, so no official patch exists — only an open pull request (#1235). Until that PR merges, treat any host running OpenLLM as exposed to local privilege abuse: restrict who can supply or rename model repositories, run the tool under a dedicated low-privilege service account, and monitor for anomalous child-process spawns from the OpenLLM CLI as a detection stopgap.
What is the risk?
Medium overall severity (CVSS 5.3) driven by low complexity and no user interaction, offset by the local-only attack vector and low-privilege access requirement, which caps blast radius to hosts where an attacker already has some local foothold. A public exploit exists, which meaningfully raises real-world exploitability despite the absence of EPSS scoring or CISA KEV listing. The unresolved vendor communication (issue reported, no response, fix only pending in an unmerged PR) means organizations cannot rely on an official patch timeline and must treat this as an open, unpatched local privilege-escalation-adjacent vector for the foreseeable future.
How does the attack unfold?
How severe is it?
What is the attack surface?
What should I do?
1 step-
Track upstream PR #1235 (github.com/bentoml/OpenLLM/pull/1235) for the official fix and apply it as soon as it merges, since no released patched version exists yet. In the interim: restrict who can create or rename model repositories consumed by OpenLLM, run OpenLLM under a dedicated low-privilege, non-shared service account rather than a shared multi-user account, avoid processing model repo names from untrusted or externally-supplied sources, and add process-execution monitoring (EDR/auditd) for unexpected child processes spawned by the openllm binary as a compensating detection control.
What does CISA's SSVC say?
Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-15035?
A command injection flaw in BentoML's OpenLLM (0.6.30) lets a local, low-privileged user smuggle shell metacharacters through a model repository directory name into the async_run_command function, resulting in arbitrary command execution on the host. Exploitation requires local access and low privileges but no user interaction, and a working exploit has already been published, which raises the odds of opportunistic abuse on shared ML dev boxes or multi-tenant inference hosts even though this CVE carries no EPSS score and is not in CISA KEV. The scored impact is bounded (CVSS 5.3, confidentiality/integrity/availability all rated low) because exploitation is confined to local context, but the project was notified via issue #1229 and has not yet responded, so no official patch exists — only an open pull request (#1235). Until that PR merges, treat any host running OpenLLM as exposed to local privilege abuse: restrict who can supply or rename model repositories, run the tool under a dedicated low-privilege service account, and monitor for anomalous child-process spawns from the OpenLLM CLI as a detection stopgap.
Is CVE-2026-15035 actively exploited?
Proof-of-concept exploit code is publicly available for CVE-2026-15035, increasing the risk of exploitation.
How to fix CVE-2026-15035?
Track upstream PR #1235 (github.com/bentoml/OpenLLM/pull/1235) for the official fix and apply it as soon as it merges, since no released patched version exists yet. In the interim: restrict who can create or rename model repositories consumed by OpenLLM, run OpenLLM under a dedicated low-privilege, non-shared service account rather than a shared multi-user account, avoid processing model repo names from untrusted or externally-supplied sources, and add process-execution monitoring (EDR/auditd) for unexpected child processes spawned by the openllm binary as a compensating detection control.
What systems are affected by CVE-2026-15035?
This vulnerability affects the following AI/ML architecture patterns: model serving, local LLM inference tooling, ml_ops CLI pipelines.
What is the CVSS score for CVE-2026-15035?
CVE-2026-15035 has a CVSS v3.1 base score of 7.8 (HIGH). The EPSS exploitation probability is 2.22%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0011 User Execution AML.T0050 Command and Scripting Interpreter Compliance Controls Affected
What are the technical details?
Original Advisory
A vulnerability was found in bentoml OpenLLM 0.6.30. This affects the function async_run_command of the file src/openllm/common.py of the component Model Repository Directory Name Handler. Performing a manipulation of the argument cmd results in command injection. Attacking locally is a requirement. The exploit has been made public and could be used. The project was informed of the problem early through an issue report but has not responded yet.
Exploitation Scenario
An attacker with low-privileged local access to a host running OpenLLM (e.g., a shared ML training/inference server or a compromised low-priv account) creates or renames a model repository directory using a name containing shell metacharacters designed to break out of the intended command context. When OpenLLM's async_run_command function in src/openllm/common.py processes this directory name as part of the cmd argument, the unsanitized input is passed to the underlying shell, executing the attacker's injected commands with the privileges of the OpenLLM process — enabling further lateral movement, credential harvesting, or tampering with locally hosted models.
Weaknesses (CWE)
CWE-74 Improper Neutralization of Special Elements in Output Used by a Downstream Component ('Injection') CWE-74 Improper Neutralization of Special Elements in Output Used by a Downstream Component ('Injection') CWE-77 Improper Neutralization of Special Elements used in a Command ('Command Injection') CWE-77 Improper Neutralization of Special Elements used in a Command ('Command Injection') CWE-74 — Improper Neutralization of Special Elements in Output Used by a Downstream Component ('Injection'): The product constructs all or part of a command, data structure, or record using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify how it is parsed or interpreted when it is sent to a downstream component.
- [Requirements] Programming languages and supporting technologies might be chosen which are not subject to these issues.
- [Implementation] Utilize an appropriate mix of allowlist and denylist parsing to filter control-plane syntax from all input.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H References
Timeline
Related Vulnerabilities
CVE-2024-2912 10.0 BentoML: RCE via insecure deserialization (CVSS 10)
Same attack type: Code Execution CVE-2026-21858 10.0 n8n: Input Validation flaw enables exploitation
Same attack type: Code Execution CVE-2025-5120 10.0 smolagents: sandbox escape enables unauthenticated RCE
Same attack type: Code Execution CVE-2025-59528 10.0 Flowise: Unauthenticated RCE via MCP config injection
Same attack type: Code Execution GHSA-vvpj-8cmc-gx39 10.0 picklescan: security flaw enables exploitation
Same attack type: Code Execution