Skip to content
Fencer Intel
high 7.5

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 Fencer

Vendor 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-rhel9
    affected: workaround, no fix available
  • Red Hat Enterprise Linux 9 goose, goose 1.38.0-1.el10_2
    not affected: vulnerable code not present
  • Red Hat Enterprise Linux 10 goose 1.38.0-1.el10_2, grafana 12.4.3-2.el10
    not 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.hum1
    not 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

Weakness
  • CWE-345 Insufficient Verification of Data Authenticity
  • CWE-522 Insufficiently Protected Credentials

References

Sources

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.