SEP-1024:本地服务器安装的 MCP 客户端安全要求
社区译文;来源: MCP 29affa6b
| 字段 | 值 |
|---|---|
| SEP | 1024 |
| 标题 | 本地服务器安装的 MCP 客户端安全要求 |
| 状态 | Final |
| 类型 | 标准跟踪 |
| 创建日期 | 2025-07-22 |
| 作者 | Den Delimarsky |
| 发起人 | 无 |
| PR | #1024 |
摘要
本 SEP 处理支持一键安装本地 MCP 服务器的 MCP 客户端实现中的关键安全漏洞。当前 MCP 规范没有针对客户端安装流程提出明确的安全要求,使恶意行为者可以通过链接或社会工程传播精心构造的 MCP 服务器配置,在用户系统上执行任意命令。
本提案为 MCP 客户端确立一项最佳实践:执行任何本地服务器安装命令前必须取得用户明确同意,并完整展示命令。
动机
现有 MCP 规范没有处理与简化的(“一键式”)本地服务器配置有关的客户端安全问题。当前实现这类配置体验的 MCP 客户端会形成显著的攻击面:
静默执行命令:通过一键流程安装本地服务器时,MCP 客户端可能在用户没有审查或同意的情况下自动执行嵌入的命令。
缺少可见性:用户不了解系统上正在执行哪些命令,这为数据外泄、系统入侵和权限提升创造了机会。
社会工程漏洞:用户会习惯执行标记为“MCP 服务器”的命令而不加充分审查,因此容易受到恶意配置的诱导。
任意代码执行:攻击者可以在 MCP 服务器配置中嵌入有害命令,并通过合法渠道(代码仓库、文档、社交媒体)传播这些配置。
Visual Studio Code 已通过实现同意对话框处理了这个问题。同样,Cursor 也支持在一键安装本地 MCP 服务器时显示同意对话框。
如果规范中没有明确的安全要求,MCP 客户端实现者可能在不知情的情况下创建有漏洞的安装流程,使最终用户面临系统遭入侵的风险。
规范
客户端安全要求
支持一键配置本地 MCP 服务器的 MCP 客户端 MUST 实施以下安全控制:
配置前同意
执行任何用于安装或配置本地 MCP 服务器的命令前,MCP 客户端 MUST:
显示清晰的同意对话框,其中包含:
- 将要执行的完整命令,不得截断
- 全部实参与参数
- 明确警告该操作可能具有潜在危险
要求用户通过肯定操作(单击按钮、勾选复选框等)明确批准
提供取消安装的选项
如果用户拒绝或未提供同意,不得继续安装
理由
设计决策
强制同意对话框:明确要求同意对话框,是在安全性与可用性之间取得平衡。虽然这会增加 MCP 服务器配置流程的操作成本,但它能防止静默执行命令造成潜在入侵。
向后兼容性
本 SEP 为 MCP 客户端实现引入了新的要求,但不改变 MCP 核心协议或线格式。
影响评估:
- 影响较低:现有 MCP 服务器和核心协议保持不变
- 需要客户端实现:MCP 客户端必须更新其本地服务器安装流程,以符合新要求
- 用户体验变化:用户将在此前没有提示的场景中看到同意对话框
迁移路径:
- MCP 客户端可以在新版本中实现这些变化,而不破坏现有功能
- 已安装的现有 MCP 服务器继续正常工作
- 只有新的安装流程需要同意机制
由于本 SEP 处理的是客户端行为,而不是 MCP 线协议,因此不存在协议层面的向后兼容问题。
参考实现
不适用
安全影响
安全收益
本 SEP 直接处理以下问题:
- 任意代码执行:防止静默执行恶意命令
- 社会工程:强制用户在执行前有意识地审查命令
- 供应链攻击:使 MCP 服务器安装命令对用户可见
- 权限提升:用户可以识别并拒绝请求提升权限的命令
残余风险
即使实施这些控制,仍存在以下风险:
- 用户绕过:尽管收到警告,用户仍可能批准恶意命令
- 复杂混淆:高级攻击者可能构造看似合法的命令
- 实现缺陷:客户端可能错误实现这些控制
风险缓解
这些残余风险通过以下措施缓解:
- 在同意对话框中使用清晰的警告措辞
- 建议增加其他安全层(沙箱、签名)
- 持续开展安全研究并提高社区意识