Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach stateful Streamable HTTP endpoint
-
DeliverySend repeated initialize/short session requests
-
ExploitSession entries retained without expiry
-
ExecutionServer memory grows unbounded
-
ImpactProcess exhaustion forces restart (DoS)
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitable ONLY against stateful Streamable HTTP servers - specifically FastMCP, MCPServer, Server.streamable_http_app(), and StreamableHTTPSessionManager - running mcp (PyPI) from 1.8.0 up to (but not including) 1.30.0, and version 2.2.0. The server must retain sessions (the default stateful mode); deployments using stateless_http=True, stdio, or SSE transports are NOT affected. No attacker privilege, user interaction, or authentication is required (PR:N/UI:N). Limiting factors: impact is per-process memory only, self-recovers on restart, and is bounded on fixed versions by the new session_idle_timeout (30 min default) and max_sessions (10,000 default) controls; the vulnerable window is the specific affected version range combined with the stateful transport configuration. |
| Impact | All impact signals point to a single, bounded outcome: availability loss. The provided CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L, score 6.9) is internally consistent with CWE-400 (uncontrolled resource consumption) and with the description - a remote, unauthenticated client (PR:N) issuing ordinary short requests over the network (AV:N) with low complexity (AC:L) can grow server memory without bound. There is NO confidentiality or integrity impact (VC:N/VI:N), and availability impact is rated Low (VA:L) rather than High, reflecting gradual memory-growth-until-restart rather than an instant crash. No EPSS score, CISA KEV listing, POC flag, or SSVC decision data was provided in the input, so exploitation probability and real-world activity cannot be quantified - absence of these signals is not evidence of safety, but should not be read as active exploitation either. This is a genuine but mid-tier priority: trivially reachable and unauthenticated, yet self-limiting (recovers on restart) and confined to one process's memory, so it is a reliability/abuse concern rather than a code-execution or data-breach emergency. The main escalating factor is that MCP servers are increasingly internet- or agent-facing, making the unauthenticated network vector realistic to trigger. |
| Exploit ScenarioDerived | An attacker who can reach a stateful Streamable HTTP MCP endpoint (e.g. a FastMCP or MCPServer instance exposed to a network) repeatedly opens short sessions or sends refused/incomplete initialize requests, none of which reliably release their session entries. Because entries also retain parsed initialize parameters and have no idle expiration or aggregate count cap, the attacker drives unbounded memory growth until the process is exhausted and must be restarted. No public exploit identified at time of analysis, but the technique requires only ordinary, well-formed requests. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 14, 2026
Unbounded server-side memory growth in stateful Streamable HTTP servers built on the MCP Python SDK (the 'mcp' package on PyPI) lets any client that can reach the endpoint exhaust process memory and force a restart. Versions 1.8.0 and later on the affected lines - including FastMCP, MCPServer, Server.streamable_http_app(), and StreamableHTTPSessionManager - retain session entries (with their parsed initialize parameters) that are never aged out or capped, so repeated ordinary short requests accumulate indefinitely; the CVSS 4.0 base score of 6.9 reflects availability-only impact, and no public exploit code has been identified at time of analysis. Stateless HTTP, stdio, and SSE transports are not affected, and the issue is fixed in versions 1.30.0 and 2.2.0.
RemediationAI
Vendor-released patch: upgrade the 'mcp' package to 1.30.0 (1.x line) or 2.2.0 (2.x line) with pip install --upgrade mcp (or pin mcp>=1.30.0 / the 2.2.0 tag), which adds the session_idle_timeout (default 1800 s) and max_sessions (default 10,000) limits described in the advisory GHSA-84m7-p3x7-pcfv and implemented through PRs https://github.com/modelcontextprotocol/python-sdk/pull/3395 and https://github.com/modelcontextprotocol/python-sdk/pull/3426 (commits 92120b4b0f50385af096592d7cee932fc1d994e7 and d2290ca3434731b68ea3e2270bc06a6e6575931b). If upgrading is not immediately possible, the most effective compensating control is to disable session tracking on the exposed endpoint by running the server with stateless_http=True - the trade-off is loss of per-session state, resumability, and server-initiated notifications for clients that rely on them. Alternatively, avoid the stateful Streamable HTTP transport externally and front the service with stdio or SSE, which are not affected. Operators can also reduce the blast radius by capping container/process memory and file-descriptor limits, running fewer HTTP workers behind sticky routing so no worker's session table grows unexpectedly, and restarting workers on a schedule; note that a restart terminates legitimate sessions, producing 404 Session not found errors and forcing every connected client to re-initialize, so this is a degraded-mode measure. Additional hardening: apply reverse-proxy request rate limits and maximum concurrent-connection limits to throttle the request pattern needed to drive growth, restrict network access to the MCP endpoint to trusted clients where possible, and alert on the fix's log lines Refusing to open a new session: <n> sessions are already open (WARNING) and Session <id> idle timeout (INFO) once patched, or on steadily rising resident memory before patching.
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 implements the Model Context Protocol, which lets AI/LLM clients discover and invoke tools and resources exposed by a server. In the Streamable HTTP transport, the server issues a session identifier via the Mcp-Session-Id header and keeps per-session state in an in-process table so that subsequent requests on that session can carry request state, subscriptions, and parsed initialize parameters. Root cause is CWE-400 (Uncontrolled Resource Consumption): the vulnerable versions register session entries but never expire them on idle and never enforce an aggregate session count, and entries are not reliably discarded when a client sends DELETE, when a session's opening request is refused, or when a session completes - each retained entry still holding parsed initialize parameters. Because the table lives in a single process's memory, an attacker only needs to send a stream of short, unauthenticated HTTP requests to the endpoint to grow memory without bound (the CVSS 4.0 vector AV:N/AC:L/AT:N/PR:N/UI:N/VA:L confirms remote, unauthenticated, no-interaction triggering with low availability impact). The upstream fix adds two run()/streamable_http_app()/Server.streamable_http_app() keyword arguments: session_idle_timeout (default 1800 seconds, emitting Session <id> idle timeout at INFO and returning 404 Session not found so the client must re-initialize) and max_sessions (default 10,000, returning 503 Too many open sessions with JSON-RPC code -32603 and logging Refusing to open a new session at WARNING). An open GET stream or an in-flight request keeps a session alive and pauses the idle countdown; ping restarts it. Both limits are per-process, so with N workers the effective ceiling is N × max_sessions. Modern (2026-07-28) connections and stateless_http=True create no sessions and are unaffected, as are the stdio and SSE transports.
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
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
Remote unauthenticated clients send ordinary requests (AV:N/AC:L/PR:N/UI:N); only gradual memory growth until restart, so A:L with no confidentiality or integrity impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
The MCP Python SDK, called mcp on PyPI, is a Python implementation of the Model Context Protocol (MCP). From 1.8.0 until 1.30.0 and 2.2.0, stateful Streamable HTTP servers, including FastMCP, MCPServer, Server.streamable_http_app(), and StreamableHTTPSessionManager, retain session entries without an idle expiration or aggregate session-count limit. DELETE, refused opening requests, and completed sessions do not reliably discard their entries, and each entry can retain parsed initialize parameters. A client that can reach the endpoint can therefore create ordinary short requests that grow server memory without bound until restart. Stateless HTTP, stdio, and SSE transports are not affected. This issue is fixed in versions 1.30.0 and 2.2.0.
Blast Radius
ecosystem impact- 16 pypi packages depend on mcp (16 direct, 0 indirect)
Ecosystem-wide dependent count for version 1.8.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
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
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
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
EUVD-2026-101452
GHSA-84m7-p3x7-pcfv
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB