CVE-2026-116684
Model Context Protocol Python SDK: Server bearer-token authentication accepts tokens issued for a different resource server
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.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
6.8
Model Context Protocol Python SDK: Server bearer-token authentication accepts tokens issued for a different resource server
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.
- Record
CVE-2026-116684- CVSS 3.1
- 6.8 Medium
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-863
- Updated
- 2026-11-02
EUVDEUVD-2026-111369
6.8
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.
- Record
EUVD-2026-111369- CVSS 3.1
- 6.8 Medium
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N - Updated
- 2026-11-03
GitHub AdvisoriesGHSA-w4fh-qvv9-3v23
6.8
Model Context Protocol Python SDK: Server bearer-token authentication accepts tokens issued for a different resource server
Summary
In affected versions, the SDK's server-side bearer authentication had no way to check that a token was issued for your server (its audience). Where one authorization server issues tokens for several services, a valid token for another service was also accepted by your MCP server.
Am I affected?
Yes, if your HTTP server uses the SDK's bearer authentication (auth=AuthSettings(...) with token_verifier=), its authorization server also issues tokens for other services, and your TokenVerifier does not check the token's audience (aud) itself.
Affected versions:
mcp1.10.0 through 1.29.1mcp2.0.0 through 2.1.1
Fix
Upgrade to:
- 1.x:
mcp1.30.0 or later - 2.x:
mcp2.2.0 or later
Upgrading alone changes nothing. The patched versions add a validate_token_resource setting that is off unless you set it. To turn the check on, make both of these changes together:
- Set
validate_token_resource=TrueinAuthSettings, withresource_server_urlset to the audience your authorization server puts in tokens for your server. - Return the token's audience from
verify_token()asAccessToken.resource.
A token for another service then gets 401. With only the first change, every request gets 401.
If your TokenVerifier already checks the audience, set validate_token_resource=False to silence the deprecation warning. The setting will default to True in 3.0.
If you cannot upgrade yet, reject any token whose aud does not include your server inside verify_token(). That closes the issue on every version.
- Record
GHSA-w4fh-qvv9-3v23- CVSS 3.1
- 6.8 Medium
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-863
- Updated
- 2026-11-02
NVD
6.8
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.
- Record
CVE-2026-116684- CVSS 3.1
- 6.8 Medium
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-863
- Updated
- 2026-11-03
OSV
6.8
Model Context Protocol Python SDK: Server bearer-token authentication accepts tokens issued for a different resource server
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.
- Record
CVE-2026-116684- CVSS 3.1
- 6.8 Medium
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-863
- Updated
- 2026-11-04
OSVGHSA-w4fh-qvv9-3v23
6.8
Model Context Protocol Python SDK: Server bearer-token authentication accepts tokens issued for a different resource server
Summary
In affected versions, the SDK's server-side bearer authentication had no way to check that a token was issued for your server (its audience). Where one authorization server issues tokens for several services, a valid token for another service was also accepted by your MCP server.
Am I affected?
Yes, if your HTTP server uses the SDK's bearer authentication (auth=AuthSettings(...) with token_verifier=), its authorization server also issues tokens for other services, and your TokenVerifier does not check the token's audience (aud) itself.
Affected versions:
mcp1.10.0 through 1.29.1mcp2.0.0 through 2.1.1
Fix
Upgrade to:
- 1.x:
mcp1.30.0 or later - 2.x:
mcp2.2.0 or later
Upgrading alone changes nothing. The patched versions add a validate_token_resource setting that is off unless you set it. To turn the check on, make both of these changes together:
- Set
validate_token_resource=TrueinAuthSettings, withresource_server_urlset to the audience your authorization server puts in tokens for your server. - Return the token's audience from
verify_token()asAccessToken.resource.
A token for another service then gets 401. With only the first change, every request gets 401.
If your TokenVerifier already checks the audience, set validate_token_resource=False to silence the deprecation warning. The setting will default to True in 3.0.
If you cannot upgrade yet, reject any token whose aud does not include your server inside verify_token(). That closes the issue on every version.
- Record
GHSA-w4fh-qvv9-3v23- CVSS 3.1
- 6.8 Medium
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-863
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
mcpPyPI |
2.0.0 up to 2.2.0 | 2.2.0 |
mcpPyPI |
1.10.0 up to 1.30.0 | 1.30.0 |
mcpPyPI |
2.0.0 up to 2.2.0, plus listed versions 2.0.12.1.02.1.1 |
2.2.0 |
mcpPyPI |
1.10.0 up to 1.30.0, plus listed versions 1.10.11.11.01.12.01.12.11.12.2 Show 30 moreShow less1.12.31.12.41.13.01.13.11.14.01.14.11.15.01.16.01.17.01.18.01.19.01.20.01.21.01.21.11.21.21.22.01.23.01.23.11.23.21.23.31.24.01.25.01.26.01.27.01.27.11.27.21.28.01.28.11.29.01.29.1 |
1.30.0 |
History
| Recorded | Changed | Sources |
|---|---|---|
| facts | EUVD, NVD, OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-116684 is a medium vulnerability (CVSS 6.8) in Modelcontextprotocol Python-sdk, published October 27, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.36%, the 30th percentile. Fixed in mcp 2.2.0.
References
github.com/modelcontextprotocol/python-sdk/security/advisories/GHSA-w4fh-qvv9-3v23
github.com/modelcontextprotocol/python-sdk/pull/3447
github.com/modelcontextprotocol/python-sdk/pull/3451
github.com/modelcontextprotocol/python-sdk/commit/0c9136841ff092987a20700ff9c2c9789bda2f40
github.com/modelcontextprotocol/python-sdk/commit/8c2fa6eabacde869d75568e33b9d466b58c2f512
github.com/modelcontextprotocol/python-sdk/releases/tag/v1.30.0