Skip to main content

utcp-mcp EUVDEUVD-2026-87982

| CVE-2026-101057 LOW
Cleartext Transmission of Sensitive Information (CWE-319)
2026-09-27 VulnCheck GHSA-vr54-j4qq-9vj9
2.3
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Gain on-path network position
  2. Exploit
    Client dials operator-configured plain-HTTP MCP URL
  3. Execution
    Intercept unencrypted MCP handshake
  4. Impact
    Disclose 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.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

python-utcp 0 <1.1.3

Affected Packages

euvd python_utcp fix: 1.1.3

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

Vendor (VulnCheck) PRIMARY 2.3 LOW
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
vuln.today AI 3.7 LOW

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.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
4.0 AV:N/AC:H/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
High
Attack Requirements
Present
Privileges Required
None
User Interaction
Passive
Vulnerable system: Confidentiality
Low
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

1
Patch available
Sep 27, 2026 - 18:01 EUVD

DescriptionCVE.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

EPSS Score
0.1%
Top 99% exploitable
Prevalence
Low
niche emerging UTCP/MCP Python library, small early-stage adoption footprint
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity LOW
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Low
Technical Impact
Partial

Priority Score

12
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +12
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

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

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-49869 CRITICAL POC
10.0 Jun 26

Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy