Case · DiggingBeagle record

MCP Python SDK tasks crossed client-session boundaries

The MCP Python SDK’s experimental task handlers let one connected client read or cancel another client’s work. Version 1.27.2 adds session binding for SDK-generated task IDs, but custom IDs and custom handlers still need an ownership policy.

Scope

CVE-2026-52870 applies only to applications that enabled the low-level experimental tasks feature. It does not describe every MCP Python SDK deployment.

Assessment profile

Assessment method
Exploitation
not established
Evidence
Grade B
Remediation
patch available
AI role
AGAINST AI
Basis and provenance

Maintainer advisory checked on 1 October 2026. The assessment distinguishes default handlers and SDK-generated IDs from custom storage/handler paths; no deployment-specific exploit or live victim impact was independently tested.

Assessed Oct 1, 2026 using diggingbeagle.assessment/1.

At a glance

Mechanism and trust boundary

  1. 01

    Client creates a task

    Experimental tasks create a long-lived task identifier.

    Boundary: client / task store

  2. 02

    Server stores the task without creator-session ownership

    Affected handlers can later resolve the task by identifier alone.

    Boundary: task identity / authorization

  3. 03

    Another client uses task operations

    A different connected client can list, read results from or cancel the task.

    Boundary: session A / session B

Timeline

  1. Jun 5, 2026
    Event type unspecified

    GitHub advisory published

    The MCP Python SDK advisory documents the experimental-task authorization flaw.

  2. Jul 16, 2026
    Event type unspecified

    Advisory metadata updated

    The reviewed advisory record was updated in July.

Claims & evidence

CLM-CROSSThe default experimental task handlers did not bind a task to the session that created it, so another connected client could observe, read results from or cancel that task.supported

Basis: reported finding · active

Link to claim
CLM-PATCHThe MCP Python SDK advisory lists version 1.27.2 as the patched version for CVE-2026-52870.supported

Basis: reported finding · active

Link to claim
CLM-AFFECTEDCVE-2026-52870 affected MCP Python SDK versions 1.23.0 through 1.27.1 when applications explicitly enabled the experimental tasks feature.supported

Basis: reported finding · active

Link to claim
CLM-CUSTOM-ID-LIMITThe advisory says the patch binds SDK-generated run_task IDs to the creating session; explicit task IDs and direct TaskStore writes do not receive that automatic binding and remain reachable by ID.supported

Basis: reported finding

Material revision: Oct 1, 2026

Link to claim

Evidence visuals

diagram

MCP task ownership gap

  1. Client A

    Creates an experimental task

  2. Task store

    Task ID stored without creator-session ownership check

  3. Client B

    Uses list/get/result/cancel against another client's task

  • Client A Task store: create task
  • Client B Task store: cross-client operations
Project-authored reconstruction from GHSA-hvrp-rf83-w775. · Source: MCP Python SDK tasks crossed client-session boundaries

Implications

Protocol context

The MCP task specification requires authenticated tasks to be bound to their authorization context and restricts the corresponding operations. This is stronger than treating an opaque identifier as a universal credential. Review the protocol version and the actual server implementation together; the specification is not proof that a particular implementation enforced it.

Comparison and conclusion

Cross-session authorization is an object-ownership problem, whereas the WebSocket advisory begins with admission of a browser connection. A system can fix either layer and still fail the other. The escalation scenario is conditional: if increasingly valuable agent tasks share an owner-blind store, a single permitted client gains leverage over other users’ work. The remedy is to constrain the object operation, not simply strengthen the initial login.

Controls and mitigations

  • Maintainer remediation: update affected uses of the experimental task handlers to 1.27.2 or an appropriate supported version, then review explicit task IDs, direct store writes and custom handlers separately.
  • DiggingBeagle test recommendation: create work under principal A, then verify that principal B cannot list it, fetch its result, consume its messages or cancel it, including after reconnection.
  • Keep the authorization principal distinct from a transport/session identifier where the application permits reconnection or credential changes; document the mapping and test its lifecycle.

Unknowns and contradictions

  • The public advisory does not establish exploitation in the wild.

Sources and citation

Material revision history

  1. Sep 16, 2026 · Published version · first publication · revision 2
  2. Oct 1, 2026 · Published version · material revision · revision 65Public fields changed: assessment_profile, claims, implications, mitigations, narrative, references, summary