Skip to main content

MCP Python SDK CVE-2026-52870

| EUVDEUVD-2026-44797 HIGH
Missing Authorization (CWE-862)
2026-07-15 GitHub_M GHSA-hvrp-rf83-w775
7.6
CVSS 3.1 · Vendor: GitHub_M
Share

Severity by source

Vendor (GitHub_M) PRIMARY
7.6 HIGH
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:L
vuln.today AI
7.6 HIGH

Attacker must be a connected client (PR:L) reaching the server over the network at low complexity (AV:N/AC:L); reading other tasks' results gives C:H while cancel/consume yields only I:L/A:L, scope unchanged.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
Low
Availability
Low

Lifecycle Timeline

4
Patch available
Jul 15, 2026 - 22:33 EUVD
Source Code Evidence Fetched
Jul 15, 2026 - 20:33 vuln.today
Analysis Generated
Jul 15, 2026 - 20:33 vuln.today
CVE Published
Jul 15, 2026 - 20:07 cve.org
HIGH 7.6

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 15 pypi packages depend on mcp (8 direct, 7 indirect)

Ecosystem-wide dependent count for version 1.23.0.

DescriptionCVE.org

The MCP Python SDK, called mcp on PyPI, is a Python implementation of the Model Context Protocol (MCP). From 1.23.0 until 1.27.2, default handlers installed by server.experimental.enable_tasks() for tasks/list, tasks/get, tasks/result, and tasks/cancel operate only on task identifiers without recording the session that created each task, allowing any connected client to enumerate, read results from, consume messages for, or cancel other clients' tasks. This issue is fixed in version 1.27.2.

AnalysisAI

Missing authorization in the MCP Python SDK (the mcp PyPI package) versions 1.23.0 through 1.27.1 lets any authenticated client of a multi-client server enumerate, read the results of, consume messages from, or cancel tasks belonging to other clients. The default handlers wired up by server.experimental.enable_tasks() for tasks/list, tasks/get, tasks/result, and tasks/cancel key solely on the task identifier and never bind a task to the session that created it. There is no public exploit identified at time of analysis and it is not in CISA KEV, but the upstream fix, deprecation warnings, and detailed advisory confirm the flaw; it is resolved in version 1.27.2.

Technical ContextAI

The Model Context Protocol (MCP) is the client/server protocol used to connect AI models to tools and data, and the mcp package is its reference Python implementation. The vulnerability lives in the experimental tasks subsystem enabled via server.experimental.enable_tasks(), which registers default JSON-RPC handlers for tasks/list, tasks/get, tasks/result, and tasks/cancel. These handlers operated purely on the opaque task identifier with no association to the originating session - the classic root cause of CWE-862 (Missing Authorization), where an action is performed without verifying the requester is entitled to the target object. The CPE cpe:2.3:a:modelcontextprotocol:python-sdk:*:*:*:*:*:*:*:* covers the affected implementation. The fix (PR #2720, commit 62137874) introduces a task_scope module and a per-session task_session_scope marker: run_task() now embeds this session marker into generated task IDs (scoped_task_id) so the default handlers can return 'task not found' for another session's task and omit it from tasks/list. Explicitly supplied task IDs are deprecated because they are used verbatim and remain unscoped/globally reachable.

RemediationAI

Vendor-released patch: upgrade the mcp package to version 1.27.2 or later, which binds generated task IDs to the creating session so the default handlers reject cross-session access (see the advisory GHSA-hvrp-rf83-w775 and release https://github.com/modelcontextprotocol/python-sdk/releases/tag/v1.27.2, fix in PR https://github.com/modelcontextprotocol/python-sdk/pull/2720 and commit 62137874ff26dd74d2fea80ff528a7fd9ca7a5e7). If you cannot upgrade immediately, stop passing explicit task_id values to run_task() (these remain unscoped even after patching) and, for authorization tied to a user identity rather than a session, register custom handlers via @server.experimental.get_task(), @server.experimental.get_task_result(), @server.experimental.list_tasks(), and @server.experimental.cancel_task() instead of relying on the defaults. As a temporary compensating control, disable the experimental tasks feature (do not call enable_tasks()) or restrict the server to a single trusted client - the trade-off is loss of task functionality or multi-client support. Where explicit task IDs must be used, treat them as capabilities: generate them with high entropy, share only with the intended recipient, and use short TTLs.

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

Share

CVE-2026-52870 vulnerability details – vuln.today

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