Skip to main content

MCP Ruby SDK CVE-2026-67431

| EUVDEUVD-2026-50501 HIGH
Improper Access Control (CWE-284)
2026-07-29 GitHub_M GHSA-5p9g-j988-pcwv
8.3
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Capture victim's session ID (leak/interception)
  2. Delivery
    Craft tools/call POST with stolen session ID
  3. Exploit
    Transport validates existence/idle-timeout only
  4. Execution
    Request executes in victim's session
  5. Impact
    Invoke tools or cancel victim requests

Vulnerability Assessment

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

1 technique across 1 tactic: Defense Evasion

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

Exploitation Conditions

Exploitation requires the target to deploy MCP::Server::Transports::StreamableHTTPTransport from the mcp gem prior to 0.23.0 WITHOUT an application-supplied session_request_validator, and the attacker must first obtain a valid, non-expired session ID belonging to a victim (session-ID theft/leakage). Once that ID is held, no authentication is enforced by the transport itself (PR:N) and no user interaction is needed. Limiting factors: the CVSS 4.0 AT:P attack requirement means the ID must be acquired out-of-band; sessions expire on idle timeout; the built-in Origin check will block browser clients that present a mismatched Origin (but not curl/scripts that omit it); and deployments that already configured a session_request_validator or do not use the streamable HTTP transport are not exploitable.

Impact

The vendor CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:H/VA:L) reflects a network-reachable, low-complexity attack with a real attack requirement (AT:P) - the attacker must first obtain a live session ID, which is the gating factor. Impact is integrity-centric (VI:H) with minor availability impact (VA:L) and no confidentiality impact per the vendor, consistent with executing actions rather than reading secrets. No EPSS score was supplied, there is no KEV listing, and no POC was provided, so real-world exploitation pressure appears low today; the primary risk is targeted session poisoning where an attacker can already intercept, capture a leaked, or otherwise obtain a session ID (e.g. logs, referer leakage, network position). The AT:P requirement meaningfully lowers practical risk versus a raw unauthenticated RCE, but consequences in a tool-calling context can be significant since tools/call may trigger real actions. Note the tension: the official vector rates PR:N (the transport itself requires no auth) even though exploitation depends on acquiring a session ID - treat the score as an upper bound conditioned on session-ID exposure.

Exploit ScenarioDerived

An attacker who captures a victim's session ID - via leaked logs, a network position, or referer/URL exposure - sends a crafted tools/call POST to the streamable HTTP endpoint carrying that session ID. Because pre-0.23.0 transport only checks that the session exists and is not idle-expired, the request executes within the victim's session, letting the attacker invoke tools or cancel the victim's in-flight requests (notifications/cancelled). No public exploit was provided, and success is contingent on first obtaining a valid session ID (CVSS AT:P).

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Jul 29, 2026

Session hijacking in the MCP Ruby SDK (mcp gem) before 0.23.0 lets an attacker who obtains a valid session ID issue tools/call requests that execute inside the victim's session, because StreamableHTTPTransport validates only session existence and idle timeout without binding a session to its owner. Affected deployments are those exposing the streamable HTTP transport; the flaw enables cross-session action execution and in-flight request tampering (e.g. notifications/cancelled). No public exploit identified at time of analysis and the issue is not in CISA KEV; the vendor CVSS 4.0 score is 8.3 (integrity-focused).

RemediationAI

Vendor-released patch: 0.23.0 - upgrade the mcp gem to 0.23.0 or later (fix commit 35466605319a34e4c7808712ae9bb1ca1afb2356). After upgrading, supply a session_request_validator to StreamableHTTPTransport, e.g. MCP::Server::Transports::StreamableHTTPTransport.new(server, session_request_validator: ->(request, session_id) { owns_session?(request, session_id) }); this is the seam that enforces true ownership by comparing the request's authenticated principal against the one recorded at session creation, and it returns HTTP 403 on mismatch. Note that without a validator the transport still does not enforce ownership even on 0.23.0. The built-in Origin-consistency check (recording the Origin header at initialize and rejecting later differing Origins) is only defense-in-depth and is bypassed by non-browser clients such as curl or scripts that omit Origin, so do not rely on it against a determined attacker. If you cannot upgrade immediately, reduce session-ID exposure: terminate TLS end-to-end, keep session IDs out of URLs/logs/referers, shorten idle timeouts, and place authenticated reverse-proxy access controls in front of the transport. See advisory GHSA-5p9g-j988-pcwv.

Affected VersionsENISA

ruby-sdk < 0.23.0

Affected Packages

rubygems mcp fix: 0.23.0
euvd ruby_sdk fix: 0.23.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in rubygems, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Model Context Protocol (MCP) is the standard for connecting LLM clients to tool/data servers, and this is its official Ruby SDK. The vulnerable component, MCP::Server::Transports::StreamableHTTPTransport, issues a random SecureRandom.uuid session ID and thereafter treats mere possession of that ID as sufficient to act on the session - it never receives an authenticated identity on its own and only checks existence plus idle timeout. This is a CWE-284 (Improper Access Control) failure: the transport does not associate a session with a principal, so the unguessable-but-not-secret session ID becomes a de facto bearer credential. Per the CPE (cpe:2.3:a:modelcontextprotocol:ruby-sdk), all pre-0.23.0 versions of the ruby-sdk are affected. The MCP spec frames session-to-user binding as a SHOULD, placing part of the responsibility on the deploying application.

Know when Ruby 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 8.3 HIGH
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N
vuln.today AI 6.5 MEDIUM

AC:H because the attacker must first obtain a valid session ID out-of-band; PR:N as the transport enforces no auth; I:H for tool execution in the victim's session, C:N and A:L per vendor.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
High
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Jul 29, 2026 - 20:02 EUVD
CVE Published
Jul 29, 2026 - 19:15 cve.org
HIGH 8.3

DescriptionCVE.org

MCP Ruby SDK is the official Ruby SDK for Model Context Protocol servers and clients. Prior to 0.23.0, MCP::Server::Transports::StreamableHTTPTransport in the mcp gem does not bind a session ID to a session owner, allowing an attacker with a stolen session ID to send tools/call requests that execute in the victim's session. This issue is fixed in version 0.23.0.

Executive ViewAI

Why It Matters

The MCP Ruby SDK (mcp gem) versions before 0.23.0 contain a session hijacking vulnerability allowing attackers with a valid session ID to execute commands and modify in-flight requests within a victim's authenticated context. Deployments exposing StreamableHTTPTransport are at risk of unauthorized transaction execution and request tampering, directly compromising data integrity and transaction authority. Organizations using this transport layer face immediate risk of unauthorized user actions and potential data modification.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: (1) Disable StreamableHTTPTransport if not operationally required for business functions; (2) Implement multi-factor session binding incorporating client IP address, device fingerprint, or certificate pinning; (3) Enforce strict network segmentation restricting MCP endpoint access via IP whitelisting or VPN-only gateway; (4) Deploy continuous monitoring of session lifecycle events and alert on concurrent session activity from distinct network sources; (5) Implement request-level cryptographic signing to prevent in-flight tampering independent of session validation.

Threat Intelligence Overview

EPSS Score
0.3%
Top 80% exploitable
Prevalence
Low
niche Ruby SDK for emerging MCP protocol, limited production footprint
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Social Media
1
Sightings
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA CIRCL GitHub VulDB

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 HIGH
CISA KEV No
Public POC Yes
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
Out-of-Cycle
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Total

Priority Score

62
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +42
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