Unbounded JSON-RPC request body causes uncontrolled memory allocation in StreamableHTTPTransport
Published: July 07, 2026
SECURITY IDENTIFIERS
- CVE: CVE-2026-67432 (NVD)
- GHSA: GHSA-h669-8m4g-r2hc
GEM
SEVERITY
CVSS v3.x: 7.5 (High)
PATCHED VERSIONS
>= 0.23.0
DESCRIPTION
Summary
An unauthenticated remote attacker can force any MCP Ruby SDK server using MCP::Server::Transports::StreamableHTTPTransport to allocate gigabytes of memory by sending a single oversized JSON-RPC POST. The transport reads the entire HTTP body into a Ruby String and parses it with JSON.parse(body, symbolize_names: true) with no size limit, no Content-Length pre-check, and no streaming parser, allowing trivial denial of service against the worker process.
Impact
-
Attacker requirements: none beyond TCP reach of the MCP endpoint. No session, no credentials, no prior interaction.
-
Effect: memory-exhaustion denial of service. A single request can take a worker offline; sustained low-rate requests keep the service down across worker restarts. On multi-tenant deployments a single attacker tenant can starve neighbours.
-
Affected deployments: every server mounting
MCP::Server::Transports::StreamableHTTPTransportas a Rack app — the canonical HTTP deployment pattern. Both stateful andstateless: trueconfigurations are affected.
RELATED
- https://nvd.nist.gov/vuln/detail/CVE-2026-67432
- https://rubygems.org/gems/mcp/versions/0.23.0
- https://github.com/modelcontextprotocol/ruby-sdk/releases/tag/v0.23.0
- https://github.com/modelcontextprotocol/ruby-sdk/commit/772e0cb1f9db69312006926eee59a7287ad50166
- https://advisories.gitlab.com/gem/mcp/CVE-2026-67432
- https://osv.dev/vulnerability/GHSA-h669-8m4g-r2hc
- https://github.com/modelcontextprotocol/ruby-sdk/security/advisories/GHSA-h669-8m4g-r2hc
- https://github.com/advisories/GHSA-h669-8m4g-r2hc
