Skip to content

MCP 执行时信任的证明型能力租约 ​

摘要 ​

ACLE-MCP 研究远程 Model Context Protocol(MCP)服务中的“授权后执行信任缺口”:OAuth 能证明客户端或用户有权访问资源,却不能证明稍后的工具调用仍由预期且刚完成安全评估的服务端工作负载执行。合法端点背后可能已经发生镜像回滚、工作负载替换、陈旧证明复用、调用方凭据转移或未声明的下游转发。

论文提出短期、调用级且受发送方约束的能力租约。租约同时绑定工作负载身份与新鲜度、工具和操作、对象与参数范围、下游组件、影响预算及回执要求;服务提供方的 Execution Gate 在受保护逻辑开始前校验并消费租约。作者实现了含 Keycloak/OIDC、MCP Python SDK 和可选 vTPM 引用验证的原型。完整模式在作者设置中阻断全部已测攻击族并保留全部良性任务;本地模拟 Agent 扩展中,正常获准请求的合并 p95 延迟比仅使用 OAuth 高 25.7%。

核心创新与差异 ​

原研究贡献。 ACLE-MCP 没有替代 OAuth 或远程证明,而是把两者与一次具体调用的权限边界合并:OAuth 提供委托上下文,Verifier 评估服务端工作负载,租约发行方取用户授权与提供方策略的交集,Execution Gate 在最终执行入口作出准入决定。论文比较五种执行控制模式,并覆盖重放、工作负载替换、证明过期、范围滥用、未声明代理和回执违规。

本站分析。 该方案与 SUDP 都把授权缩小到具体操作,但保护对象不同:SUDP 防止可复用密钥进入 Agent 运行时,ACLE-MCP 防止“已获 OAuth 授权”被错误等同于“当前服务端工作负载可信”。最先失效的控制是资源服务器没有把委托权限与实际执行者的当前状态绑定,因此归入身份、认证与授权委托,而不是 MCP Schema 或提示词注入。

威胁模型与执行链 ​

攻击者可控制或影响 MCP 应用工作负载、部署配置或表面合法的下游代理,但不能攻破 Host 的调用边界生成逻辑、Verifier、租约发行方、Execution Gate 或标准密码机制。受保护处理程序还必须不存在绕过 Gate 的备用入口。

  1. Host 将所选工具调用规范化,生成受众、工具、操作、对象、参数、下游集合、影响预算和工作负载保证策略。
  2. Verifier 用带随机数的新鲜证据评估预计处理请求的工作负载。
  3. 租约发行方验证 OAuth 上下文与评估结果,只发行两套策略交集内的短期能力。
  4. 调用方提交租约及发送方持钥证明;Execution Gate 在工具逻辑开始前检查签名、受众、新鲜度、发送方、调用边界、下游限制和回执义务。
  5. Gate 原子消费租约。缺字段、策略版本冲突、重放或约束不匹配均应 fail-closed。

方案不验证 Host 的真实用户意图、任意工具内部语义、恶意本地 stdio 启动命令,也不覆盖已攻破的可信组件或完全绕开 Gate 的隐藏依赖。

去武器化验证材料 ​

下面是依据论文约束重构的本地测试夹具,不含真实令牌、证明值、生产端点或可利用步骤:

json
{
  "lease_id": "DRY_RUN-LEASE-001",
  "audience": "https://mcp.example.invalid",
  "tool": "update_ticket",
  "operation": "update",
  "object": "TEST-TICKET-17",
  "parameter_bounds": {"priority": ["low", "normal"]},
  "allowed_downstream": ["mock-audit.example.invalid"],
  "sender_key": "<TEST-KEY-THUMBPRINT>",
  "workload_id": "sha256:<PLACEHOLDER>",
  "max_evidence_age_ms": 1000,
  "single_use": true,
  "receipt_required": true
}

隔离测试只需逐项替换 sender_key、workload_id、对象、参数、下游集合或新鲜度,并确认 Gate 拒绝;随后重复提交同一 lease_id,确认第二次消费失败。测试不连接第三方 MCP Server,不使用有效 OAuth Token,也不执行真实工单修改。

实验设计与实际过程 ​

以下结果均来自作者实验,本站未独立复现。原型将 Verifier、租约发行方、Execution Gate 和工具服务拆开部署;真实组件路径使用 Keycloak/OIDC 校验访问令牌,并将获准请求转交 MCP Python SDK Server。可选路径用 swtpm 与 tpm2-tools 的随机数绑定引用替代模拟证据签名,同时保持评估结果、租约和 Gate 接口不变。

作者评估五种模式:无保护、仅 OAuth、连接时证明、调用时证明但缺少完整调用绑定,以及完整 ACLE-MCP。测试覆盖六类核心违规,并将链式、重排、重复和流式工具调用作为 Agent 扩展场景。新鲜度实验改变证明允许年龄,性能实验分别测量令牌校验、证明、租约发行、Gate 校验和端到端请求。

关键结果与实际影响 ​

  • 完整 ACLE-MCP 在作者控制实验中阻断全部已测攻击族,同时保留全部良性任务;较弱模式分别留下授权重放、工作负载替换、陈旧证明、范围扩大、未声明下游或回执缺失风险。
  • 论文实现并比较五种执行控制模式,说明“连接时证明一次”与“每次受保护调用前绑定和消费”不是等价控制。
  • Agent 扩展中的正常获准请求,完整模式相对仅 OAuth 的合并 p95 延迟增加 25.7%。
  • 该结果支持调用时绑定在本地原型中的可行性,不证明所有 MCP 部署都能承受同样开销,也不证明工具输出或业务动作本身正确。

防护措施与验证方法 ​

  • 高影响工具应在最终执行入口强制经过不可绕过的 Gate;只在客户端、连接建立阶段或反向代理检查不足以覆盖执行者替换。
  • 租约应绑定受众、发送方密钥、工作负载测量值、策略版本、具体操作、对象、参数范围、下游集合、影响预算、有效期和单次消费状态。
  • Host 策略与服务提供方策略只取交集;缺失版本或无法验证工作负载时默认拒绝,不退化到普通 OAuth 路径。
  • 回归测试应分别改变一个字段,并检查拒绝原因;还要测量正常请求通过率、误拒率、p50/p95/p99 延迟、证明缓存命中和撤销传播时间。
  • 日志只保存租约摘要、判定和测试标识,不记录有效访问令牌、私钥或完整远程证明材料。

局限与待验证问题 ​

证据等级为 moderate:论文提供可运行原型和控制实验,但结果来自作者环境,尚无独立复现。完整设计依赖 Host、Verifier、发行方和 Gate 均可信,且所有受保护入口确实经过 Gate;这些前提一旦不成立,租约不能补救。

25.7% 是本地模拟 Agent 扩展的请求级合并 p95 增幅,不能外推到跨地域网络、硬件可信执行环境、大规模密钥轮换或高并发 MCP 服务。vTPM 路径也不等同于生产硬件信任根。后续还需验证多副本原子消费、时钟偏差、证明缓存、策略升级、故障恢复和隐私泄露。

参考链接 ​