恶意MCP服务器示例
概述
这个教育示例展示了模型上下文协议(MCP)服务器中的一个关键安全风险:在用户或AI助手不知情的情况下执行系统命令的能力。该示例旨在强调这有多危险,特别是对于使用 标准输入输出 运输。
什么是MCP?
模型上下文协议(MCP)是一种开放协议,将AI应用程序(如IDE、聊天机器人或代理)连接到外部工具和数据源。MCP服务器暴露 工具 (可执行功能), 资源 (数据),以及 鼓励 (模板)到AI客户端。该协议旨在实现可组合性、安全性和用户控制,但不正确的服务器实现可能会带来严重的风险。
了解更多: 模型上下文协议.io
为什么这很危险?
- 工具执行由模型控制: AI模型可以自动发现和调用工具。如果工具执行系统命令(例如。,
rm -rf /),它可以在没有明确用户知识的情况下这样做,除非客户端强制执行确认对话框。 - 标准运输风险: 使用stdio时,MCP服务器作为子进程在用户的计算机上运行。服务器公开的任何工具都可以在本地执行任意代码,这可能会危及系统。
- 缺乏可见性: 如果服务器是恶意的或设计不当的,用户和AI助手都不会意识到正在运行危险的命令。
MCP是如何工作的?
MCP使用客户端-服务器架构:
- 主持人: 人工智能应用程序(例如,VS Code、Claude Desktop)
- 客户: 连接到一个MCP服务器
- 服务器: 显示工具/资源/提示
服务器在初始化过程中声明其功能。列出了工具,可以由客户端或模型调用。对于stdio服务器,客户端将服务器作为子进程启动,并通过stdin/stdout交换JSON-RPC消息。
危险分子
- 任意代码执行: 恶意或有缺陷的服务器可能会暴露运行危险命令的工具。
- 无用户确认: 如果客户端不强制执行确认对话框,则可以在未经用户同意的情况下执行工具。
- 会话劫持: 如果会话ID是可预测的或未绑定到用户身份,攻击者可能会劫持会话或注入恶意有效载荷。
- 令牌传递(适用于HTTP服务器): 接受不适用于服务器的令牌可能会导致权限升级和混淆的代理攻击。
最佳实践
对于MCP服务器作者:
- 除非绝对必要,否则切勿公开执行系统命令的工具。
- 始终验证工具输入并净化输出。
- 使用写入stderr的日志库(stdio服务器从不使用stdout)。
- 实施适当的访问控制和速率限制。
对于MCP客户端作者:
- 在执行任何工具之前,始终显示确认对话框,尤其是那些运行系统命令的工具。
- 清楚地显示正在调用哪个服务器和工具。
- 记录所有工具执行情况以供审计。
- 在传递给AI模型之前验证工具结果。
对于用户:
- 仅连接到受信任的MCP服务器。
- 启用服务器之前,请查看可用工具列表。
- 请谨慎使用stdio服务器,因为它们在本地运行并可以直接访问您的系统。
教育目的
此存储库仅用于教育和演示目的。做 不 在生产环境中使用此代码,或在不了解风险的情况下将其连接到真正的人工智能助手。
参考文献
______________________________________________________________________
警告: MCP服务器可能非常强大。在连接到任何AI应用程序之前,请务必查看服务器代码和工具定义。
