Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessVictim MCP client connects to attacker-controlled server
-
DeliveryClient calls a server tool
-
ExploitServer returns outputSchema with external $ref URL
-
Executionjsonschema resolver fetches http/file URL synchronously
-
PersistBlind SSRF / local-file read from client context
-
ImpactTimeout-less fetch stalls every session (DoS)
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Credential Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | The application must use the SDK as an MCP client - ClientSession over any transport, ClientSessionGroup, or the 2.x Client class - and must call tools on an MCP server the operator does not fully control; server-only applications are not affected. The malicious server must declare a tool outputSchema containing an $id or an out-of-document $ref/$dynamicRef (one not starting with '#') that uses an http://, https:// or file:// scheme. There is no configuration setting that disables this validation, so no non-default option is required on the victim side; the primary limiting factor is that exploitation depends entirely on the client connecting to and invoking tools on an untrusted/compromised server. The blind nature (fetched content is never returned to the server) limits confidentiality impact; the main realistic impact is the event-loop stall affecting all sessions in the process. |
| Impact | This is a medium-severity, client-side flaw (CVSS 6.5, CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H) in the official Model Context Protocol Python SDK, classified as CWE-918 (SSRF). The signals point to a real but bounded priority. The vuln.today decision label is 'this_month' (not act_now/emergency), it is NOT on CISA KEV, no EPSS score was supplied, and no public exploit was identified - only vendor advisory, PRs and patch commits. The CVSS impact set (C:N/I:N/A:H) is internally consistent and worth highlighting: although a malicious server can make the client read local files and issue internal HTTP(S) requests, the GHSA states the fetched content is used only as a schema and never returned to the server, so confidentiality/integrity impact is scored None and the dominant impact is availability - the synchronous, timeout-less fetch freezes every session in the process. Note two things defenders should verify: (1) CWE-918/SSRF and file:// reads normally imply confidentiality exposure, yet the official vector sets C:N precisely because the read data is not exfiltrated back to the attacker - the SSRF is blind, which lowers real-world severity versus a typical SSRF; (2) exploitation is gated on the victim acting as an MCP client that calls tools on an untrusted server, so this is not an internet-exposed service flaw. Overall: patch within a normal cycle, prioritize if your deployment connects MCP clients to third-party/untrusted servers. |
| Exploit ScenarioDerived | An attacker operates (or compromises) an MCP server that a victim's client connects to. When the client calls one of the server's tools, the server returns a tool whose declared outputSchema contains a $ref pointing to an attacker-chosen http://, https:// or file:// URL; the client's jsonschema default resolver fetches it, producing a blind internal request or local-file read from the client's network/filesystem position, and - because resolution runs synchronously with no timeout - a server that accepts the connection then stalls will freeze every session in the client process. No public exploit was identified at time of analysis; the attack requires the client to call tools on a server the operator does not fully control (AV:N/AC:L, but UI:R reflecting that the client must actively invoke the tool). |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Client-side server-side request forgery and denial of service in the official Model Context Protocol Python SDK: when a connected MCP server declares a tool outputSchema containing an $id or an out-of-document $ref/$dynamicRef (http://, https:// or file://), the SDK's ClientSession, ClientSessionGroup and 2.x Client classes resolve that reference with jsonschema's default resolver, so the client fetches the URL or reads the local file from its own network and filesystem position and blocks the asyncio event loop for every session in the process while doing so. Applications using the SDK purely as a server are not affected; the vulnerable code runs only when a client invokes tools on a server the operator does not fully control. Versions 1.10.0 through 1.29.1 and 2.0.0 through 2.1.1 are affected and are fixed in 1.30.0 and 2.2.0 respectively; no public exploit has been identified at time of analysis, the fetched content is never returned to the malicious server (blind SSRF), and the CVSS 6.5 score reflects availability impact (A:H) rather than confidentiality.
RemediationAI
Vendor-released patch: upgrade to mcp 1.30.0 on the 1.x branch or 2.2.0 on the 2.x branch (or later); both releases resolve references only within the schema document the server sent plus the standard metaschemas, so result validation performs no network or file access. Be aware that after upgrading, a tool whose outputSchema points outside its own document now fails at call time with RuntimeError ("Invalid schema for tool ..."), while in-document references such as #/$defs/... continue to work - this can surface as a functional regression for servers relying on external schema references and should be tested before rollout. Until the upgrade is applied, the vendor's only guidance is to call tools only on MCP servers you trust and, as a partial stopgap, to skip tools whose outputSchema contains an $id, or a $ref / $dynamicRef that does not start with '#'; there is no SDK setting that disables the vulnerable validation. Because the fetch is synchronous and unbounded, clients that must talk to semi-trusted servers should also be isolated in a process or container whose egress to internal HTTP(S) endpoints and whose filesystem view are restricted, so that a stalled resolution or a file:// read cannot affect other sessions or sensitive data. Details are in the advisory https://github.com/modelcontextprotocol/python-sdk/security/advisories/GHSA-rwrf-2pqf-9j8j and the fixes in https://github.com/modelcontextprotocol/python-sdk/pull/3394 and https://github.com/modelcontextprotocol/python-sdk/pull/3396.
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
The MCP Python SDK validates structured tool results against a server-supplied JSON Schema outputSchema using the jsonschema library, which delegates reference resolution to the referencing package. In affected versions the validator was constructed without an explicit Registry, so the default resolver fetched any $ref it could not resolve locally by opening the URI, including http://, https:// and file:// schemes (the fallback retriever even emits an "Automatically retrieving remote references" DeprecationWarning). This is CWE-918 (server-side request forgery) applied in the reverse direction: the malicious MCP server supplies the URL, but the request originates from the client, which is why the impacted classes are ClientSession (over any transport), ClientSessionGroup, and the 2.x Client - server-only deployments never reach this code path. Two properties make it worse than a plain SSRF: resolution runs synchronously on the asyncio event loop with no timeout, so a target that accepts the connection and then goes silent freezes every session in the process; and there was no configuration switch to turn the validation off. The fix in PR 3394 constructs the validator with an explicit empty referencing.Registry(), so $refs resolve only within the schema document the server sent plus bundled JSON Schema metaschemas, and catches referencing.exceptions.Unresolvable to surface it as a RuntimeError at call time. The fix commits are 5ebdfed4060d8e5b11b8e2348f86bad4d1fb8836 and 6705402e246dc4eb1fcdf4d9902b78d3c9c36e1b.
Know when Python Sdk 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:L/PR:N/UI:R/S:U/C:N/I:N/A:H
A remote malicious server triggers the flaw (AV:N/AC:L/PR:N); UI:R because the client must actively call the tool; blind fetch yields C:N/I:N, and the timeout-less event-loop stall gives A:H.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
The Model Context Protocol Python SDK is the official Python SDK for Model Context Protocol servers and clients. From 1.10.0 until 1.30.0 and 2.2.0, ClientSession, ClientSessionGroup, and Client tool calls validate server-declared outputSchema documents with jsonschema's default resolver, causing an unresolved $ref value to fetch an HTTP, HTTPS, or file URL from the client's network and filesystem context. A server can trigger blind requests or local-file reads and can stall every session in the process because resolution runs synchronously on the event loop without a timeout. This issue is fixed in versions 1.30.0 and 2.2.0.
Blast Radius
ecosystem impact- 84 pypi packages depend on mcp (66 direct, 18 indirect)
Ecosystem-wide dependent count for version 2.0.0.
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
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
More in Python Sdk
View allCross-session message injection in the MCP Python SDK (the 'mcp' package on PyPI) prior to 1.27.2 allows an authenticate
Resource-confusion in the Model Context Protocol Python SDK (pip package mcp) causes server-side bearer authentication t
Cross-origin redirect handling in the Model Context Protocol Python SDK (published on PyPI as `mcp`) leaks caller-suppli
Missing authorization in the MCP Python SDK (the `mcp` PyPI package) versions 1.23.0 through 1.27.1 lets any authenticat
Unbounded HTTP request-body buffering in the Model Context Protocol Python SDK (the 'mcp' package) before 1.29.1 and in
Cross-origin WebSocket hijacking in the Model Context Protocol Python SDK (mcp on PyPI) before 1.28.1 lets a remote web
Unbounded server-side memory growth in stateful Streamable HTTP servers built on the MCP Python SDK (the 'mcp' package o
EUVD-2026-111366
GHSA-rwrf-2pqf-9j8j
NVD
CVE.org
EPSS
Exploit-DB