CSIRTS // UNIFIED SECURITY ADVISORY FEEDSYS ● ONLINE · POWERED BY INTELFUSIONS.COM

CVE-2026-63119

mediumCVSS 6.2covered by 2 sourcesfirst seen 2026-07-29
Summary The stdio transports in MCP::Server::Transports::StdioTransport and MCP::Client::Stdio read newline-delimited JSON-RPC frames using IO#gets with no limit argument. CRuby's IO#gets with no limit reads from the current position until the next separator (\n) with no upper bound on the returned string length. A peer that streams bytes without ever emitting a newline causes gets to accumulate the entire stream in a single Ruby String until the process is killed by the operating-system OOM killer. This is the same vulnerability class tracked in sibling MCP SDKs as GHSA-74gp-qhv5-v493 (Kotlin), GHSA-wqgc-pwpr-pq7r (TypeScript), GHSA-655q-2283-6jgj (Python), and others. It was identified during a cross-SDK audit; ruby-sdk had no prior report. Affected code Verified at main @ cf44475c. Server transport — lib/mcp/server/transports/stdio_transport.rb line 23 while @open && (line = $stdin.gets) # <-- no limit argument response = @session.handle_json(line.strip) ... line 76 while @open && (line = $stdin.gets) # <-- no limit argument begin parsed = JSON.parse(line.strip, symbolize_names: true) $stdin is the raw process global (only set_encoding is applied at line 16); there is no wrapper imposing a length limit. Client transport — lib/mcp/client/stdio.rb line 150 @stdin, @stdout, @stderr, @wait_thread = Open3.popen3(spawn_env, @command, *@args) line 228 line = @stdout.gets # <-- no limit argument raise_connection_error!(method, params) if line.nil? parsed = JSON.parse(line.strip) @stdout is the raw IO returned by Open3.popen3. The @read_timeout guard at line 227 (wait_for_readable!) only gates the IO.select before gets is invoked; once bytes are flowing, gets blocks indefinitely accumulating into one string. Impact Denial of service via memory exhaustion. A peer that controls the byte stream delivered to the stdio transport can grow a single Ruby String until the process exhausts available memory. Threat-model caveat (important): In the default stdio deploy

⚡ Watch CVE-2026-63119

Get an email if CVE-2026-63119 is added to CISA KEV, gains public exploit code, or a new advisory cites it — max one per day, one-click unsubscribe.

Exploitation outlook

Advisory coverage (2)

External references

NVD record for CVE-2026-63119

CVE.org record

Embed the live status

CVE-2026-63119 live status badge — this badge updates automatically when the KEV or exploit status changes. How to embed it →

[![CVE-2026-63119 status](https://www.csirts.com/badge/CVE-2026-63119)](https://www.csirts.com/cve/CVE-2026-63119)