SEP-1024:本地服务器安装的 MCP 客户端安全要求

SEP-1024:本地服务器安装的 MCP 客户端安全要求

社区译文;来源: MCP 29affa6b

本 SEP 已达到 Final 状态,并作为已接受设计的历史记录保留。 定稿后对协议所做的更改不会反映在此处。权威要求请参阅当前规范 及其变更日志。
字段值
SEP1024
标题本地服务器安装的 MCP 客户端安全要求
状态Final
类型标准跟踪
创建日期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 客户端 MUST 实施以下安全控制:

配置前同意

执行任何用于安装或配置本地 MCP 服务器的命令前,MCP 客户端 MUST:

  1. 显示清晰的同意对话框,其中包含:

    • 将要执行的完整命令,不得截断
    • 全部实参与参数
    • 明确警告该操作可能具有潜在危险
  2. 要求用户通过肯定操作(单击按钮、勾选复选框等)明确批准

  3. 提供取消安装的选项

  4. 如果用户拒绝或未提供同意,不得继续安装

理由

设计决策

强制同意对话框:明确要求同意对话框,是在安全性与可用性之间取得平衡。虽然这会增加 MCP 服务器配置流程的操作成本,但它能防止静默执行命令造成潜在入侵。

向后兼容性

本 SEP 为 MCP 客户端实现引入了新的要求,但不改变 MCP 核心协议或线格式。

影响评估:

  • 影响较低:现有 MCP 服务器和核心协议保持不变
  • 需要客户端实现:MCP 客户端必须更新其本地服务器安装流程,以符合新要求
  • 用户体验变化:用户将在此前没有提示的场景中看到同意对话框

迁移路径:

  1. MCP 客户端可以在新版本中实现这些变化,而不破坏现有功能
  2. 已安装的现有 MCP 服务器继续正常工作
  3. 只有新的安装流程需要同意机制

由于本 SEP 处理的是客户端行为,而不是 MCP 线协议,因此不存在协议层面的向后兼容问题。

参考实现

不适用

安全影响

安全收益

本 SEP 直接处理以下问题:

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

残余风险

即使实施这些控制,仍存在以下风险:

  • 用户绕过:尽管收到警告,用户仍可能批准恶意命令
  • 复杂混淆:高级攻击者可能构造看似合法的命令
  • 实现缺陷:客户端可能错误实现这些控制

风险缓解

这些残余风险通过以下措施缓解:

  • 在同意对话框中使用清晰的警告措辞
  • 建议增加其他安全层(沙箱、签名)
  • 持续开展安全研究并提高社区意识