Skip to main content
最终版标准轨道
字段
SEP1024
标题本地服务器安装的 MCP 客户端安全要求
状态最终版
类型标准轨道
创建日期2025-07-22
作者Den Delimarsky
赞助方
PR#1024

摘要

本 SEP 解决了支持一键安装本地 MCP 服务器的 MCP 客户端实现中的关键安全漏洞。当前的 MCP 规范缺乏针对客户端安装流程的明确安全要求,使得恶意行为者可以通过通过链接或社会工程学传播精心制作的 MCP 服务器配置,在用户系统上执行任意命令。 本提案为 MCP 客户端建立了一种最佳实践,要求在执行任何本地服务器安装命令之前获得明确的用户同意,并实现完全的命令透明度。

动机

现有的 MCP 规范未解决与简化(“一键”)本地服务器配置相关的客户端安全问题。实现这些配置体验的当前 MCP 客户端创造了重大的攻击向量:
  1. 静默命令执行:MCP 客户端在通过一键流程安装本地服务器时,可以在未经用户审查或同意的情况下自动执行嵌入的命令。
  2. 缺乏可见性:用户无法洞察哪些命令正在其系统上执行,从而创造了数据窃取、系统受损和权限提升的机会。
  3. 社会工程学漏洞:用户习惯于执行标记为“MCP 服务器”的命令而未进行适当审查,使他们容易受到恶意配置的攻击。
  4. 任意代码执行:攻击者可以将有害命令嵌入 MCP 服务器配置中,并通过合法渠道(仓库、文档、社交媒体)分发它们。
Visual Studio Code 通过实现同意对话框 解决了这个问题。同样,Cursor 也支持一键本地 MCP 服务器安装的同意对话框。 如果规范中没有明确的安全要求,MCP 客户端实现者可能会在不知情的情况下创建易受攻击的安装流程,使最终用户面临系统受损的风险。

规范

客户端安全要求

支持一键本地 MCP 服务器配置的 MCP 客户端 必须 实施以下安全控制:

配置前同意

在执行任何命令来安装或配置本地 MCP 服务器之前,MCP 客户端 必须
  1. 显示一个清晰的同意对话框,展示:
    • 将要执行的确切命令,不得截断
    • 所有参数和参量
    • 明确的警告,说明此操作可能具有潜在危险
  2. 要求用户通过肯定操作(按钮点击、复选框等)进行明确批准
  3. 为用户提供取消安装的选项
  4. 如果同意被拒绝或未提供,则不得继续安装

理由

设计决策

强制同意对话框:明确同意对话框的要求平衡了安全性和可用性。虽然这增加了 MCP 服务器配置过程的摩擦,但它防止了静默命令执行导致的潜在泄露。

向后兼容性

本 SEP 为 MCP 客户端实现引入了新的 要求,但不改变核心 MCP 协议或通信格式。 影响评估:
  • 低影响:现有的 MCP 服务器和核心协议保持不变
  • 需要客户端实现:MCP 客户端必须更新其本地服务器安装流程以符合新的安全要求
  • 用户体验变更:用户将在以前不存在的地方看到同意对话框
迁移路径:
  1. MCP 客户端可以在新版本中实施这些更改,而不会破坏现有功能
  2. 现有已安装的 MCP 服务器继续正常工作
  3. 只有新的安装流程需要同意机制
不存在协议级的向后兼容性问题,因为本 SEP 解决的是客户端行为而不是 MCP 通信协议。

参考实现

不适用

安全影响

安全益处

本 SEP 直接解决了:
  • 任意代码执行:防止恶意命令的静默执行
  • 社会工程学攻击:强制用户在执行前有意识地审查命令
  • 供应链攻击:创建对 MCP 服务器安装命令的可见性
  • 权限提升:用户可以识别并拒绝请求提升权限的命令

剩余风险

即使有了这些控制,风险仍然存在:
  • 用户覆盖:用户可能会无视警告批准恶意命令
  • 复杂混淆:高级攻击者可能会制作看起来合法的命令
  • 实现缺口:客户端可能会错误地实现控制

风险缓解

这些剩余风险通过以下方式解决:
  • 同意对话框中清晰的警告语言
  • 建议额外安全层(沙箱、签名)
  • 持续的安全研究和社区意识