{"uuid": "73b5608c-a2de-465e-9a16-cfba84519c11", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-67430", "type": "seen", "source": "https://gist.github.com/alon710/2fc91b89bbac8024e4e2b03ecca2ce62", "content": "# CVE-2026-67430: CVE-2026-67430: Denial of Service via Unbounded Session Retention in Model Context Protocol Ruby SDK\n\n&gt; **CVSS Score:** 5.3\n&gt; **Published:** 2026-07-30\n&gt; **Full Report:** https://cvereports.com/reports/CVE-2026-67430\n\n## Summary\nCVE-2026-67430 is a medium-severity Denial of Service (DoS) vulnerability in the Model Context Protocol (MCP) Ruby SDK (packaged as the mcp gem) versions prior to 0.23.0. In stateful deployments using the StreamableHTTPTransport class, client session states are retained in an in-memory hash map. Because the transport implements a nil idle timeout by default, the background scavenger process is suppressed. Remote, unauthenticated attackers can flood the endpoint with initialize requests, rapidly consuming system memory and triggering an Out-of-Memory (OOM) crash.\n\n## TL;DR\nUnauthenticated remote attackers can crash stateful MCP Ruby SDK servers by repeatedly triggering new initialize requests. Because the SDK lacks default session limits and idle timeouts, every connection allocates a persistent context in RAM, leading to memory exhaustion and service crashes.\n\n## Exploit Status: POC\n\n## Technical Details\n\n- **CWE ID**: CWE-770\n- **Attack Vector**: Network (AV:N)\n- **CVSS v3.1 Score**: 5.3\n- **EPSS Score**: 0.00291\n- **EPSS Percentile**: 21.41%\n- **Impact**: Denial of Service (DoS) via memory exhaustion (OOM)\n- **Exploit Status**: PoC Available\n- **KEV Status**: Not Listed\n\n## Affected Systems\n\n- Model Context Protocol Ruby SDK (mcp gem) running stateful transports\n- **mcp (Ruby SDK)**: &gt;= 0.6.0, &lt; 0.23.0 (Fixed in: `0.23.0`)\n\n## Mitigation\n\n- Upgrade the mcp gem to version 0.23.0 or later.\n- Configure tight session_idle_timeout and max_sessions values on StreamableHTTPTransport initialization.\n- Utilize stateless: true if stateful session management is not required.\n- Deploy a reverse proxy (e.g., Nginx, HAProxy) in front of the application to enforce request and connection rate-limiting.\n\n**Remediation Steps:**\n1. Update your Gemfile to reference mcp version 0.23.0 or later.\n2. Run bundle update mcp to retrieve and apply the security patch.\n3. Optionally, explicitly set session_idle_timeout and max_sessions parameters in your StreamableHTTPTransport.new initializer block.\n4. Restart the Ruby application server to apply the code changes.\n\n## References\n\n- [GHSA-52jp-gj8w-j6xh: Model Context Protocol Ruby SDK Unbounded Session Retention DoS](https://github.com/modelcontextprotocol/ruby-sdk/security/advisories/GHSA-52jp-gj8w-j6xh)\n- [Core Session Hardening Commit](https://github.com/modelcontextprotocol/ruby-sdk/commit/afb968c468c178c4d3294b423fcce250621692f4)\n- [Release Version 0.23.0 Tag](https://github.com/modelcontextprotocol/ruby-sdk/releases/tag/v0.23.0)\n- [CVE-2026-67430 Record](https://www.cve.org/CVERecord?id=CVE-2026-67430)\n- [NVD Entry for CVE-2026-67430](https://nvd.nist.gov/vuln/detail/CVE-2026-67430)\n\n\n---\n*Generated by [CVEReports](https://cvereports.com/reports/CVE-2026-67430) - Automated Vulnerability Intelligence*", "creation_timestamp": "2026-07-31T04:31:56.372398Z"}