Skip to main content

Model Context Protocol Python SDK EUVDEUVD-2026-111369

| CVE-2026-116684 MEDIUM
Incorrect Authorization (CWE-863)
2026-10-27 GitHub_M GHSA-w4fh-qvv9-3v23
6.8
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Obtain valid token for a sibling service
  2. Delivery
    Present bearer token to target MCP server
  3. Exploit
    Server's TokenVerifier omits audience check
  4. Execution
    Token accepted as authenticated
  5. Impact
    Exercise token's access on wrong server

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
MITRE ATT&CK

1 technique across 1 tactic: Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

All of the following must hold: the target runs the SDK's HTTP server-side bearer authentication (auth=AuthSettings(...) with token_verifier=); the authorization server it trusts also issues tokens for other services/resources; and the deployment's TokenVerifier does not itself validate the token's aud audience. The attacker must additionally already possess a valid bearer token issued by that same authorization server for a different service. Exploitation is LIMITED to affected versions (mcp 1.10.0-1.29.1 and 2.0.0-2.1.1) and does NOT apply when the authorization server serves only a single resource, when the TokenVerifier already checks aud, or after validate_token_resource=True is correctly configured with resource_server_url and AccessToken.resource - merely upgrading without that configuration does not enable the check.

Impact

This is a genuine but conditional authorization flaw (CWE-863, token audience/resource confusion), not a drop-everything emergency. The supplied CVSS 3.1 vector (AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N, base 6.8) is internally consistent with the mechanism: network-reachable, but gated by AC:H (a specific deployment - one authorization server issuing tokens for multiple resources plus a TokenVerifier that never checks aud) and PR:L (the attacker must already hold a valid token issued for some other service by that same authorization server). No EPSS score, no CISA KEV entry, and no public exploit were provided in the input, so there is no signal of active or widespread exploitation; the vuln.today Decision label is 'this_month' (not act_now/emergency). The realistic risk is therefore targeted lateral movement within a single-authorization-server, multi-resource environment rather than opportunistic mass exploitation - high technical impact (C:H/I:H) but narrowed by the required misconfiguration and prior token possession. No signals conflict here; the main caveat is that EPSS and POC status are simply absent from the input, not confirmed negative.

Exploit ScenarioDerived

In an environment where one authorization server (for example an OAuth/OIDC provider) issues bearer tokens for several MCP servers and other services, an attacker who legitimately holds a token for service A presents that same token to a target MCP server B that uses the SDK's bearer auth without independently validating the token's aud. Because B never checks that the token was issued for it, the token is accepted and the attacker exercises whatever access that token grants against the wrong server. No public exploit code is identified in the input; the referenced PRs and commits are patch material, not a weaponized PoC.

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

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

Alert me

AnalysisAIv1 – Oct 28, 2026

Resource-confusion in the Model Context Protocol Python SDK (pip package mcp) causes server-side bearer authentication to accept a token that was issued for a different service. The flaw affects HTTP servers built on the SDK that configure auth=AuthSettings(...) with a token_verifier, and it only bites when the same authorization server issues tokens for multiple resources and the deployment's TokenVerifier does not itself check the token's aud audience; in that setup an attacker who already holds a valid bearer token for another service can present it to the wrong MCP server and exercise the access it carries (CVSS 6.8, AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N, CWE-863). Affected builds are mcp 1.10.0 through 1.29.1 and 2.0.0 through 2.1.1; single-resource deployments, verifiers that already validate aud, and correctly configured patched versions are not exposed. No public exploit code has been identified at time of analysis and there is no CISA KEV entry; exploitation requires a pre-existing token plus a specific multi-resource authorization-server topology.

RemediationAI

Vendor-released patches exist: upgrade to mcp 1.30.0 or later on the 1.x line, or mcp 2.2.0 or later on the 2.x line (releases v1.30.0 and v2.2.0, advisory GHSA-w4fh-qvv9-3v23, fixes in PR #3447 and #3451). Upgrading alone does not change behaviour, because the new check ships disabled: you must also set validate_token_resource=True in AuthSettings with resource_server_url set to the exact URL/audience the authorization server puts in tokens for your server, and return the token's audience from verify_token() as AccessToken.resource (when aud is a list, report the entry that equals resource_server_url). Both changes are required together - with only validate_token_resource=True and no AccessToken.resource, every request receives 401. If your own TokenVerifier already validates aud, set validate_token_resource=False to silence the MCPDeprecationWarning, noting the setting becomes True by default in 3.0. If you cannot upgrade yet, the complete compensating control is to reject any token whose aud does not include your server inside verify_token(); this closes the issue on all affected versions and is documented by the maintainers as the pre-upgrade workaround.

Affected VersionsENISA

python-sdk 1.10.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 server side of the Model Context Protocol authorization model, where an MCP server acts as an OAuth 2.0 resource server that consumes bearer tokens minted by an external authorization server. In the affected range the SDK's bearer authentication had no mechanism to verify that a presented token was issued for this particular server, i.e. that the token's audience (aud, per the OAuth 2.0 resource-indicator/RFC 8707 style binding of tokens to a resource) matched the server's own URL; the SDK delegated validity entirely to the user-supplied TokenVerifier and only compared identity/scopes after the fact. CWE-863 (Incorrect Authorization) describes the root cause: the authorization decision authenticates a token as valid but does not establish that it was minted for the protected resource, so where one authorization server fronts several services, a token for service A is accepted by service B. The CVSS AC:H reflects that exploitation depends on a deployment topology (multi-resource authorization server) and on a verifier that omits its own aud check, while PR:L reflects the prerequisite of already possessing a valid token from that same authorization server for a different service. The upstream fix (PR #3447, with follow-up #3451, commits 0c91368 and 8c2fa6e) introduces an AuthSettings option validate_token_resource plus an AccessToken.resource field so the SDK, not only user code, can compare the token's audience against resource_server_url. Notably the option is opt-in in the patched releases and defaults to False (unset) with a deprecation warning, becoming True by default only in 3.0, so the mere act of upgrading does not close the gap.

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.8 MEDIUM
AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N
vuln.today AI 6.8 MEDIUM

Network-reachable but AC:H because it needs a multi-resource authorization server plus a verifier that skips aud, and PR:L because the attacker must already hold a valid token for another service; no availability impact.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

Lifecycle Timeline

1
Patch available
Oct 27, 2026 - 20:03 EUVD

DescriptionCVE.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, server-side bearer authentication configured through AuthSettings with token_verifier accepts a valid token issued for another service when the authorization server serves multiple resources and the TokenVerifier does not independently validate the aud audience. This resource-confusion flaw lets a token holder authenticate to the wrong MCP server and exercise that token's resulting access. 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
  • 84 pypi packages depend on mcp (66 direct, 18 indirect)

Ecosystem-wide dependent count for version 2.0.0.

Threat Intelligence Overview

EPSS Score
0.4%
Top 70% exploitable
Prevalence
Medium
widely used MCP SDK, but only bearer-auth, multi-resource deployments are affected
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Data Quality
5 sources
Confidence: Medium

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 Yes
EPSS 0.4%
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· derived
Poc
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

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

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

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