Skip to main content

MCP Python SDK EUVDEUVD-2026-101452

| CVE-2026-59951 MEDIUM
Uncontrolled Resource Consumption (CWE-400)
2026-10-14 GitHub_M GHSA-84m7-p3x7-pcfv
6.9
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Reach stateful Streamable HTTP endpoint
  2. Delivery
    Send repeated initialize/short session requests
  3. Exploit
    Session entries retained without expiry
  4. Execution
    Server memory grows unbounded
  5. Impact
    Process 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.5% exploitation probability (EPSS)

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

Alert me

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

python-sdk 1.8.0, < 1.30.0
python-sdk 2.0.0, < 2.2.0

Affected Packages

pypi mcp fix: 1.30.0, 2.2.0
euvd python_sdk fix: 1.30.0, 2.2.0

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

Vendor (GitHub_M) PRIMARY 6.9 MEDIUM
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
vuln.today AI 5.3 MEDIUM

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.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

Lifecycle Timeline

1
Patch available
Oct 14, 2026 - 18:05 EUVD

DescriptionCVE.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
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 16 pypi packages depend on mcp (16 direct, 0 indirect)

Ecosystem-wide dependent count for version 1.8.0.

Threat Intelligence Overview

EPSS Score
0.5%
Top 62% exploitable
Prevalence
Medium
widely-adopted MCP AI protocol SDK, growing but not universal deployment
Threat Intel
1
1 source
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.5%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

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