Vulnerability high
CVSS
high
8.2/10

CVE-2026-63127: MCP Reference SDKs: A Malicious Server Could Pick Where the Python OAuth Client Sent Its Secrets, and Both SDKs Re-Sent Headers Across Redirects

CVE-2026-63127 is a high-severity credential theft issue (CVSS 8.2) in Python `mcp`, a MCP server. Affected: Python `mcp` 1.9.1 to 1.29.1 and 2.0.0 to 2.1.1 (OAuth issuer, fixed 1.30.0 / 2.2.0); `mcp` 1.8.0 to 1.29.1 and 2.0.0 to 2.1.1 (redirects, fixed 1.30.0 / 2.2.0). @modelcontextprotocol/sdk < 1.32.0 and @modelcontextprotocol/client 2.0.0 to 2.2.0 (redirects, fixed 1.32.0 / 2.3.0); @modelcontextprotocol/sdk 1.24.0 to 1.31.0 (task store, fixed 1.32.0). Client-side only: servers and stdio clients are not affected by the OAuth and redirect issues. rmcp < 2.0.0 (CVE-2026-63127).. Fixed in 1.30.0.

Is Python `mcp` running on your developers' machines? Anomity finds every device with this MCP server installed, shows the version, and can block it by policy. Detect this across your developers' devices with Anomity →

Key facts

ID
CVE-2026-63127
Aliases
GHSA-qx49-fqc8-xw99
Severity
high
CVSS score
8.2
Attack type
Credential theft
Component
Python `mcp` · MCP server
Known exploited
No known exploitation
Published
Last verified

What is CVE-2026-63127?

The Model Context Protocol reference SDKs published four client-side advisories between 28 September and 2 October 2026, none with a CVE and all scoped to their repositories rather than the global GitHub Advisory Database, so `npm audit` and OSV-backed scanners did not flag them at publication. GHSA-qx49-fqc8-xw99 (Python `mcp`, 28 September, high, CVSS 7.5): the OAuth client did not validate the authorization server `issuer` on every discovery path and did not bind stored or pre-provisioned client credentials to their authorization server, so a malicious or compromised MCP server could direct the client_secret, authorization code and PKCE verifier (or a signed client assertion) to a token endpoint of its choosing. GHSA-6prh-2h8m-c8cw (TypeScript, 2 October, medium 6.5) and GHSA-5h93-6whr-6q8j (Python, 2 October, medium 5.9): HTTP client transports followed cross-origin redirects and re-sent custom headers such as X-API-Key and mcp-session-id, plus the body on 307/308, including OAuth token requests carrying refresh_token and client_secret. GHSA-22jm-h49p-29qw (TypeScript, 2 October, high 8.6): the deprecated experimental task store did not tie tasks to the session that created them, so clients sharing one InMemoryTaskStore could list, read and cancel each other's tasks. The Rust SDK's comparable OAuth flaw, CVE-2026-63127 (rmcp before 2.0.0, missing RFC 9728 resource check, CVSS 8.2), was published by NVD on 16 September.

Affected versions

AffectedFixed in
Python `mcp` 1.9.1 to 1.29.1 and 2.0.0 to 2.1.1 (OAuth issuer, fixed 1.30.0 / 2.2.0); `mcp` 1.8.0 to 1.29.1 and 2.0.0 to 2.1.1 (redirects, fixed 1.30.0 / 2.2.0). @modelcontextprotocol/sdk < 1.32.0 and @modelcontextprotocol/client 2.0.0 to 2.2.0 (redirects, fixed 1.32.0 / 2.3.0); @modelcontextprotocol/sdk 1.24.0 to 1.31.0 (task store, fixed 1.32.0). Client-side only: servers and stdio clients are not affected by the OAuth and redirect issues. rmcp < 2.0.0 (CVE-2026-63127).1.30.0

Am I affected by CVE-2026-63127?

You are affected if you run Python `mcp` 1.9.1 to 1.29.1 and 2.0.0 to 2.1.1 (OAuth issuer, fixed 1.30.0 / 2.2.0); `mcp` 1.8.0 to 1.29.1 and 2.0.0 to 2.1.1 (redirects, fixed 1.30.0 / 2.2.0). @modelcontextprotocol/sdk < 1.32.0 and @modelcontextprotocol/client 2.0.0 to 2.2.0 (redirects, fixed 1.32.0 / 2.3.0); @modelcontextprotocol/sdk 1.24.0 to 1.31.0 (task store, fixed 1.32.0). Client-side only: servers and stdio clients are not affected by the OAuth and redirect issues. rmcp < 2.0.0 (CVE-2026-63127).. Versions 1.30.0 and later include the fix.

How do I fix CVE-2026-63127?

Upgrade MCP clients and agent harnesses built on the SDKs: Python `mcp` to 1.30.0 or 2.2.0, @modelcontextprotocol/sdk to 1.32.0, @modelcontextprotocol/client to 2.3.0, rmcp to 2.0.0 or later. On the Python side, upgrading alone does not protect ClientCredentialsOAuthProvider or PrivateKeyJWTOAuthProvider: pass `issuer=` explicitly, and clear stored client registrations once so they are re-created bound to an issuer. Do not restore the old behaviour with redirectPolicy: 'follow' or follow_redirects=True on an MCP transport; point the endpoint at the redirect target instead. Grep for taskStore and stop using the deprecated experimental tasks. If an OAuth-enabled client may have connected to an untrusted MCP server or a redirecting endpoint, rotate its client secret and API keys and revoke its tokens. Track these repositories' own security-advisories pages, because a clean SCA scan does not cover them.

How do I find every machine running Python `mcp`?

Anomity inventories the AI agents, MCP servers, IDE extensions and skills on each developer device, so you can see which machines run Python `mcp` and which version, then enforce a policy on it.

References