Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessGain on-path network position
-
ExploitClient dials operator-configured plain-HTTP MCP URL
-
ExecutionIntercept unencrypted MCP handshake
-
ImpactDisclose or tamper with handshake data
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V12 - Secure Communication Transport encryption
|
| Exploitation Conditions | Requires TWO conditions to coincide: (1) an operator must author an mcpServers call-template entry naming a plain-HTTP or plain-WS, non-loopback MCP server URL (HTTPS/WSS and loopback are safe), and (2) an attacker must hold a man-in-the-middle position on the network path to that server to intercept or tamper with the cleartext MCP handshake. Limiting factors: the mcpServers config is operator-authored, not remote/attacker-controllable, so no URL injection is possible; the exposed channel is an MCP handshake, not an arbitrary request returning a response body; and the OAuth2 token_url credential-leak path is NOT reachable in affected versions. This is a client-side misconfiguration-plus-MITM condition, not remote unauthenticated exploitation against a default configuration. |
| Impact | This is a low-real-risk issue despite being a legitimate weakness. The vendor CVSS 4.0 base score is only 2.3 (AV:N/AC:H/AT:P/PR:N/UI:P/VC:L, no integrity or availability impact), and the description itself explicitly downgrades the finding: the originally-reported OAuth2 token_url SSRF credential path was NOT reachable in affected versions because the OAuth2 handler was never invoked and the call template's auth field was never read. What remains is a cleartext-transmission flaw (CWE-319): utcp-mcp dials HTTP/WS MCP server URLs from the mcpServers config without the ensure_secure_url HTTPS/WSS-or-loopback check that sibling HTTP-family plugins enforce. Two structural facts sharply limit exploitation - the mcpServers configuration is operator-authored (not attacker-supplied remote data), so an attacker cannot inject a malicious URL, and the exposed traffic is an MCP handshake rather than an arbitrary request returning a body. Exploitation therefore requires both an operator misconfiguration (plain-HTTP non-loopback URL) and a network man-in-the-middle position (AC:H/AT:P). No EPSS score, no CISA KEV listing, and no public exploit code are present in the provided data - no public exploit identified at time of analysis. The VulnCheck advisory slug labels this 'SSRF,' but the description makes clear the SSRF/credential-exfiltration path is not reachable; the real, confirmed impact is limited cleartext interception. Net: a valid hardening fix, not an urgent priority. |
| Exploit ScenarioDerived | An operator configures utcp-mcp (≤1.1.2) with an mcpServers entry pointing at a plain-HTTP, non-loopback MCP server. An attacker positioned on the network path (e.g., shared LAN, compromised router, or between the client and an internal host) passively intercepts or actively tampers with the resulting cleartext MCP handshake. No public exploit code is identified; exploitation requires the man-in-the-middle position plus the pre-existing misconfiguration. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 27, 2026
Cleartext MCP server connections in utcp-mcp (the MCP plugin of python-utcp) through 1.1.2 allow a plain-HTTP or plain-WS, non-loopback MCP server URL to be dialed without the ensure_secure_url check that the HTTP-family plugins enforce, so the HTTPS/WSS-or-loopback rule is silently skipped for call templates. The practical risk is low: exploitation requires an operator to author an mcpServers entry pointing at a non-loopback plaintext URL and an attacker to already hold a man-in-the-middle position on that network path, and the misconfigured channel only carries an MCP handshake rather than an arbitrary request returning a response body. The OAuth2 token_url credential-leak path from the original report is not reachable in affected versions because the OAuth2 handler was never invoked. Remote attackers are unauthenticated (CVSS:4.0 PR:N), no public exploit code has been identified, and there is no confirmed active exploitation (no CISA KEV listing); the root cause is CWE-319, cleartext transmission of sensitive information.
RemediationAI
Upgrade to utcp-mcp 1.1.3 (python-utcp 1.1.3), which performs ensure_secure_url validation before any connection is made - vendor-released patch, available per the GitHub advisory GHSA-qwr9-cj2c-v3fv. If immediate upgrade is not possible, the effective compensating control is to audit every call template in the workspace and rewrite any mcpServers entry that uses http:// or ws:// against a non-loopback host to https:// or wss://; this closes the cleartext path with the trade-off that the target MCP server must actually present a valid TLS endpoint, so servers lacking TLS support cannot be reached safely until they are fronted by a TLS terminator or moved to loopback. Where a plaintext internal MCP server must be contacted during the interim, confine it to a loopback or Unix-domain-socket address and route it through a local forwarding proxy, accepting the added operational complexity and the requirement that the proxy itself be reachable only on 127.0.0.1. Because the only remote prerequisite is an on-path position, segmenting the client host from untrusted networks and enforcing outbound egress filtering to approved MCP endpoints reduces the MITM window, at the cost of blocking legitimate ad-hoc MCP servers. Note that the OAuth2 token_url credential path described in the original report does not require separate mitigation in affected versions, as the OAuth2 handler was never invoked in that code path.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
utcp-mcp is the Model Context Protocol plugin for python-utcp, the Universal Tool Calling Protocol library. UTCP call templates declare MCP servers under an mcpServers configuration block, and the HTTP-family plugins normalize those URLs through an ensure_secure_url helper that rejects plain-HTTP/plain-WS endpoints unless they resolve to loopback, thereby requiring HTTPS or WSS for any off-host connection. In the affected utcp-mcp versions the plugin performs its connection before that validation step (or without it entirely), so a template naming http://internal-host:port or ws://internal-host:port is dialed as written. This is CWE-319: the MCP handshake bytes - which can carry protocol metadata and, depending on configuration, session context - traverse the wire in cleartext, making them readable and modifiable by anyone positioned on the path. The vulnerability is not a URL-injection flaw: the mcpServers block is operator-authored configuration rather than remote or attacker-supplied data, which is the principal reason impact is constrained. The CPE cpe:2.3:a:universal-tool-calling-protocol:python-utcp:*:*:*:*:*:*:*:* plus the EUVD version range (python-utcp 0 < 1.1.3) identify all releases below 1.1.3 as affected. Note that the VulnCheck advisory title frames this as "SSRF via unvalidated MCP server URL"; the assessed impact is better characterized as a client-side cleartext-transmission/misconfiguration weakness with optional attacker-in-the-middle tampering, since the exposed exchange is a handshake and not an arbitrary request-returning-body primitive, and the assessed CVSS:3.1 vector is AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N (low confidentiality impact only).
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
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:P/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
AC:H because exploitation needs both an operator misconfiguration and an on-path MITM position; C:L for handshake interception; no integrity/availability impact and no privileges required.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
1DescriptionCVE.org
utcp-mcp (the MCP plugin of python-utcp) through 1.1.2 connects to the HTTP and WebSocket MCP server URLs given in a call template's mcpServers configuration without the ensure_secure_url validation that the HTTP-family plugins apply, so the HTTPS/WSS-or-loopback rule is not enforced. A call template naming a plain-HTTP, non-loopback MCP server URL is dialed as configured, exposing the MCP handshake to network interception and permitting cleartext connections to internal hosts. The mcpServers configuration is operator-authored rather than remote data, and the connection is an MCP handshake rather than an arbitrary request returning a body, which limits practical exploitation; the OAuth2 token_url credential path described in the original report was not reachable in the affected versions, because the OAuth2 handler was never invoked and the call template's auth field was not read. Fixed in utcp-mcp 1.1.3, which validates server URLs before any connection is made.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
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-87982
GHSA-vr54-j4qq-9vj9
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB