Info

参考文章 https://zhuanlan.zhihu.com/p/22449447146 https://www.cnblogs.com/Serverless/p/18914326 PS:目前纯理论分析,还没找到具体的例子

目前所有的MCP ServerMCP Client都是使用SSE协议进行通信的,所以首先来了解SSE的传输过程

SSE协议

Server-Sent Events(SSE,服务器发送事件)是一种基于 http协议的的技术,允许服务器向客户端单向、实时地推送数据。在 SSE 模式下,客户端通过创建一个 EventSource 对象与服务器建立持久连接,服务器则通过该连接持续发送数据流,而无需客户端反复发送请求。 SSE 的主要特点包括:

  • 单向通信:服务器主动向客户端推送数据,客户端无法通过同一连接向服务器发送数据。
  • 基于 HTTP 协议:利用现有的 HTTP 协议,无需额外的协议支持,易于实现和部署。
  • 轻量级:实现简单,适用于需要实时更新的应用场景,如新闻推送、股票行情等。
  • 自动重连:客户端在连接断开时会自动尝试重新连接,确保数据传输的连续性。 需要注意的是,SSE 仅支持服务器到客户端的单向通信,若应用场景需要双向实时通信,可能需要考虑使用 WebSocket 等其他技术。

MCP Server的鉴权机制

在最初的标准中,MCP Server是没有明确的鉴权的,在后面的标准中,支持了OAuth鉴权。关于OAuth的分析思路可以参考OAuth 安全风险。当然,这篇文章的总结并不全面,笔者接触OAuth较少。

MCP的攻击面

攻击MCP Server

MCP Server中,可能会存在一些敏感功能,例如代码执行等,如果上下文限制不严格可能会存在逃逸等情况,造成代码执行。

攻击MCP Client

类似Cursor等可作为MCP ClientAgent,在允许一些操作可能会造成代码执行,如执行命令等,或利用模型上下文投毒。