CVE-2026-104850 json
MCP TypeScript SDK: OAuth client could send credentials to an authorization server chosen by the MCP server
published last mo. modified last mo. also EUVD-2026-93491 , GHSA-6qxp-vccf-f47h
- cvss
- 7.5
- version 3.1, CNA
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.3%
- EPSS 0.3% chance of exploitation in 30 days, percentile 20%
- public exploits
- 0
- none known
Summary
MCP TypeScript SDK is the official TypeScript SDK for Model Context Protocol servers and clients. Starting in version 1.12.0 and prior to versions 1.31.0 and 2.2.0, the SDK's OAuth client support let the MCP server a client connected to decide which authorization server received the client's OAuth credentials. Stored and pre-provisioned credentials were not bound to the authorization server they belong to. A malicious or compromised MCP server could name its own authorization server in its protected resource metadata. Without any user interaction, the client would send that server the `refresh_token` and `client_secret` stored from an earlier sign-in (1.x), or the configured `client_secret` or signed assertion of a bundled non-interactive provider (1.x and 2.x). Only those applications that use the SDK as an MCP client over HTTP with an `authProvider`: your own `OAuthClientProvider`, or the bundled `ClientCredentialsProvider`, `PrivateKeyJwtProvider`, `StaticPrivateKeyJwtProvider` or (2.x) `CrossAppAccessProvider` and that may connect to an MCP server the owners does not fully trust while holding credentials for a legitimate authorization server are affected. `@modelcontextprotocol/sdk` 1.31.0 (1.x) and `@modelcontextprotocol/client` 2.2.0 (2.x) patch the issue. A workaround for those who cannot upgrade is available. 2.0.0 and 2.1.0 already accept `expectedIssuer`. On 1.x, the only workaround is to connect OAuth-enabled clients only to MCP servers you trust.
Patch / fix
- npm @modelcontextprotocol/sdk 1.31.0
- npm @modelcontextprotocol/client 2.2.0
- lfprojects mcp_typescript_sdk 1.31.0, 2.2.0
Is CVE-2026-104850 in your dependencies? Fencer shows which of your repositories are affected as soon as an advisory lands, and opens the fix as a pull request.
Check with FencerVendor advisories
What the vendors themselves say about their products: affected, fixed or not affected, and what to do.
red hat product security vex CVE-2026-104850 updated cvss 7.5
@modelcontextprotocol/sdk: @modelcontextprotocol/client: MCP TypeScript SDK: Information disclosure via unbound OAuth credentials
-
Red Hat Migration Toolkit for Applications 8 mta/mta-solution-server-rhel9 Red Hat Ansible Automation Platform 2 ansible-automation-platform-27/mcp-server-rhel9, ansible-automation-platform-tech-preview/mcp-server-rhel9 Red Hat OpenShift AI (RHOAI) rhoai/odh-workbench-codeserver-datascience-cpu-py312-rhel9 Red Hat OpenShift Dev Spaces devspaces/code-rhel9affected: workaround, no fix available
-
Red Hat Enterprise Linux 9 goose, goose 1.38.0-1.el10_2not affected: vulnerable code not present
-
Red Hat Enterprise Linux 10 goose 1.38.0-1.el10_2, grafana 12.4.3-2.el10not affected: vulnerable code not in execute path
-
Red Hat Hardened Images grafana13.1 13.1.7-0.1.hum1, grafana13.2 13.2.3-0.1.hum1, grafana12.4 12.4.12-0.3.hum1not affected: component not present
Red Hat CSAF VEX © Red Hat, Inc., from https://security.access.redhat.com/data/csaf/v2/vex/; changed: reduced to product statuses and remediations. CC BY 4.0 · csaf
CISA SSVC
- Exploitation
- none
- Automatable
- yes
- Technical impact
- partial
- Assessed
- last mo.
Exploit prediction
0.28% chance of exploitation in the next 30 days, higher than 20% of all scored CVEs (FIRST EPSS, 2026-11-09).
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| CNA | 3.1 | 7.5 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N |
| GitHub | 3.1 | 7.5 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N |
Affected packages
| ecosystem | package | affected | fixed in |
|---|---|---|---|
| npm | @modelcontextprotocol/sdk | >=1.12.0, <1.31.0 |
1.31.0 |
| npm | @modelcontextprotocol/client | >=2.0.0, <2.2.0 |
2.2.0 |
Affected products
- modelcontextprotocol typescript-sdk
Classification
References
-
github.com
/modelcontextprotocol/typescript-sdk/pull/2887
web
-
github.com
/modelcontextprotocol/typescript-sdk/commit/edd12e282620ebf770d67316f19cf91d4112a1bd
web
-
github.com
/modelcontextprotocol/typescript-sdk/security/advisories/GHSA-6qxp-vccf-f47h
web
-
github.com
/modelcontextprotocol/typescript-sdk/releases/tag/v2.2.0
web
-
github.com
/modelcontextprotocol/typescript-sdk
package
Sources
- CVE List CVE-2026-104850
- GitHub Advisory GHSA-6qxp-vccf-f47h
- NVD CVE-2026-104850
Fencer Intel keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.
CPEs and fixed versions use Anchore's correction of NVD's data: Added CPE configurations because not yet analyzed by NVD.