MCP攻击利用可预测会话ID劫持AI代理
Anthropic模型上下文协议(MCP)在Oat++实现中存在安全漏洞,允许攻击者预测或捕获活跃AI对话中的会话ID,从而劫持MCP会话并通过oatpp-mcp服务器注入恶意响应。
Oat++是一个用于构建Web应用程序的开源C++ Web框架,而MCP是Anthropic开发的连接AI代理与数据源的标准。oatpp-mcp是Oat++框架的MCP集成组件,允许开发者将应用程序端点暴露为MCP兼容接口。
该漏洞被追踪为CVE-2025-6515,可被利用来劫持MCP会话ID。这些ID决定了MCP服务器将其响应发送到何处。为确保每个会话的安全,协议要求会话ID必须全局唯一且随机生成,以确保恶意行为者无法简单猜测或预测它们。这旨在防止攻击者劫持会话并将有害注释注入MCP服务器,随后由AI代理处理。
然而,JFrog安全研究人员发现,某些oatpp-mcp服务器会重复使用会话ID。Oat++ MCP实现支持两种传输方法:STDIO和服务器发送事件(SSE),该漏洞存在是因为oatpp-mcp中的MCP SSE端点返回实例指针作为会话ID——这意味着它既不是唯一的,也不是加密安全的。
同样值得注意的是,此攻击要求oatpp-mcp使用HTTP SSE传输执行,并且攻击者具有对相关HTTP服务器的网络访问权限。
JFrog研究人员Ori Hollander和Ofri Ouzan在周二的博客中表示:“攻击者可以通过快速创建和销毁会话、记录会话ID,然后等待这些相同的ID被重新分配给合法客户端会话来利用此行为。一旦会话ID被重复使用,攻击者可以使用被劫持的ID发送POST请求——例如请求工具、触发提示或注入命令,服务器将把相关响应转发给受害者活跃的GET连接,以及为受害者原始请求生成的响应。”
Anthropic和Oat++项目维护者均未立即回应The Register的询问。如果他们回应,我们将更新此报道。
除了技术细节外,JFrog漏洞猎手还演示了如何通过运行编程为返回Python包名称的测试服务器并将Claude客户端连接到它来利用CVE-2025-6515。
此示例中的理论用户/受害者要求Claude“找到用于图像处理的包”。攻击者向服务器发送包含先前使用过的会话ID的请求,直到获得匹配,然后指示服务器向用户提供恶意包。Claude随后向用户提供攻击者的响应,而不是对用户请求的合法响应。
研究人员写道:“随着AI模型通过MCP等协议越来越多地嵌入工作流中,它们继承了新的风险——此会话级漏洞利用显示了模型本身如何保持不受影响,而其周围的生态系统却受到损害。”
为防止由于泄漏会话ID导致的此类提示劫持攻击,请确保服务器使用加密安全的随机数生成器。JFrog还建议客户端避免使用简单的递增ID(这些ID容易受到喷洒攻击),并确保传输通道使用强会话分离和过期机制。