Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCapture victim's session ID (leak/interception)
-
DeliveryCraft tools/call POST with stolen session ID
-
ExploitTransport validates existence/idle-timeout only
-
ExecutionRequest executes in victim's session
-
ImpactInvoke 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). |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
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
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.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.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
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.
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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Uncontrolled memory allocation in the official Model Context Protocol Ruby SDK (mcp gem) before 0.23.0 lets an unauthent
DNS rebinding in MCP Ruby SDK's StreamableHTTPTransport (mcp gem, all versions prior to 0.23.0) exposes locally running
Uncontrolled memory growth in the MCP Ruby SDK (mcp gem) prior to 0.23.0 allows any peer process communicating via stdio
Unbounded session growth in MCP Ruby SDK's StreamableHTTPTransport allows unauthenticated remote attackers to exhaust se
EUVD-2026-50501
GHSA-5p9g-j988-pcwv
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB