外观
Formal Security Analysis of Agent Protocol Composition
摘要
AgentThread 研究一个容易被单协议测试遗漏的问题:协议各自的安全控制通过 SDK、relay、conductor 或 bridge 组合后,是否仍能约束完整的 Agent 工作流。作者把协议条款转换为带来源链接的中间表示、TLA+ 不变量和实现测试。在五个 Agent 协议、80 个实现测试和八个组合模型上,作者分析了跨协议的安全责任。论文报告 35 项规范层发现,并在 43 个跨协议安全义务中发现 30 个可达反例。
这些数字是论文所选协议版本、SDK、参考服务器和有限模型检查范围内的结果,不是所有 Agent 协议的缺陷率。最重要的结论是,未分配给 bridge 或运行时的跨协议责任会使不可信内容、委派权限和工具能力在边界处重新组合。因此,协议安全验证必须同时检查本地控制、组合语义和实际执行责任。
核心创新与差异
原研究贡献:论文提出 AgentThread 的分层安全范围、Protocol IR、Responsibility IR 和两阶段 assurance checker。它从协议规范、角色文档、schema、SDK 和参考实现提取安全要求,把要求标注为规范强制、规范建议、框架加固或层完整性义务,再生成 TLA+ 不变量并在可用时回放 SDK/服务器反例。该方法把“规范是否写了控制”“模型是否存在违反状态”“实现是否复现”和“谁负责执行”分开记录。
本站分析:本文的首个失效控制不是某个协议字段本身,而是协议之间缺少可验证的组合约定和责任归属。协议本地的身份、内容完整性或委派检查,不能自动约束 bridge 将一个协议的输出解释为另一个协议的高信任输入。该差异应归入多 Agent 编排与信任传播,而不是把每个组合反例重复归入单个协议漏洞。
威胁模型与攻击链
论文采用协议层 Dolev–Yao 攻击者,并增加 Agent 特有能力。攻击者可以通过工具输出、网页或 peer-agent 消息注入内容,伪造或夸大 capability metadata,利用委派或工具链放大权限;模型、工具元数据和跨协议消息不能自行成为授权依据。
受保护资产包括身份与凭据、委派范围、用户同意、消息和工具输出完整性、工具能力以及跨协议副作用。信任边界位于协议规范、SDK、bridge/conductor、Agent runtime 和最终工具之间;运行时是否能观察并约束跨边界状态,是组合安全的关键控制点。
典型 MCP 到 A2A 的攻击链如下:
- 攻击者控制 MCP 工具输出,使不可信内容进入共享上下文。
- bridge 将该内容转发给 A2A conductor,却没有保留来源、授权范围或审计关联。
- conductor 或下游 Agent 将内容当作可影响委派的状态,扩大接收者的 capability 或任务范围。
- 最终工具执行了超出原始 grant 的动作,而两个协议各自的本地审计都看不到完整路径。
该链条的首个安全控制失效是跨协议责任和状态传播没有被规范化;协议局部缺陷是后续表现,桥接组件、协议维护者、SDK 和部署集成者共同承担修复责任。
实验设计与实际过程
以下均为论文作者实验,本站未独立复现。研究对象包括 MCP、A2A、ANP、ACP-Cap 和 ACP-Client。作者使用协议版本 MCP v1.26.0、A2A v0.3.25、ACP-Cap v1.0.3、ANP v0.7.2 和 ACP-Client v0.9.0,并测试三个官方 MCP 参考服务器:mcp-server-fetch、mcp-server-sqlite 和 mcp-server-git。
实验从 55 个“协议—安全检查”单元开始。每项检查分别经过规范/模型分析、SDK 或参考服务器测试和责任记录。TLA+ 使用 TLC v2.19;每个不变量单独检查,操作数上限为 12,以较小常数实例化攻击所需的主体、会话、能力、消息和 bridge。该上限用于生成反例,不代表无界系统的形式化证明。
作者将协议本地分析与组合分析分开:前者核对单协议规范、模型和实现,后者构造八个组合模型,覆盖 MCP↔A2A、链式 MCP、MCP↔ACP-Cap、A2A↔ACP-Cap、联邦 A2A、MCP↔ACP-Client、ANP↔MCP 和 ANP↔A2A。比较对象不是传统安全产品基线,而是“协议本地控制”与“加入 bridge 后的跨边界义务”。
关键结果与实际影响
在 55 个协议—检查单元中,作者报告 35 项规范层发现,其中 12 项有实现测试确认、23 项仅在规范/模型层发现;其余项目通过、不适用或未检查。论文将强制性条款违反与建议缺口、框架加固缺口和层完整性缺口分开,避免把所有缺失控制都称为协议违规。
八个组合模型共产生 43 个安全相关组合义务,其中 31 个是边界风险义务、12 个是 bridge 契约保持义务;30 个义务出现反例。该 30/43 是组合安全义务的有界反例比例,不是所有 TLC 检查或真实部署的漏洞发生率。模型验证用的 40 个编码正确性不变量全部通过,未计入 43 的分母。
MCP↔A2A 案例显示,未清理的 MCP 输出可以污染 bridge,继而触发 A2A 权限扩张并留下不完整审计轨迹。其他组合反例聚合为三类:隐藏中间组件造成的来源和凭据级联、同意与委派语义不一致导致的授权绕过,以及身份校验与内容完整性/委派范围彼此独立。实际影响是,部署者不能仅凭单协议合规或单个 SDK 的安全检查判断整条 Agent 工作流安全。
防护措施与验证方法
协议规范应为跨协议桥接定义显式的身份、来源、委派范围、同意、凭据生命周期和审计关联要求;bridge 不应把自然语言内容、能力元数据或下游完成声明直接升级为授权状态。委派令牌应绑定主体、目标、范围、期限和预算,并在跨协议转发时保持不可变或可验证的缩减关系。
验证应采用与 AgentThread 相近的分层证据:
- 从规范条款生成可追溯的安全属性,并保留 MUST/SHOULD 与建议性控制的区别。
- 用有界模型检查生成具体状态和反例轨迹,而不是只做关键词或文档审查。
- 在固定版本 SDK 和参考服务器上回放反例,区分规范缺口、实现缺陷和框架加固缺口。
- 对每个 bridge 测量来源链、授权范围、同意状态和审计关联是否跨边界保持。
- 把组合测试纳入正常协议回归,报告反例数、不可达状态、实现复现率和模型检查上限。
这些措施验证的是控制是否被表达、分配和执行,不等于证明模型内部不会产生恶意语义,也不替代工具后端的参数授权。
局限与待验证问题
- 结果只覆盖五个协议的特定版本、选定 SDK/参考服务器和有限 TLC 常数;不能外推为所有协议或生产部署的普遍发生率。
- 协议文本抽取和 Protocol IR 是抽象过程,论文建模了语义内容与委派权限,但没有建模完整 LLM 内部行为。
- 组合模型用较小操作数上限实例化攻击模式;更大规模的并发、状态空间和真实厂商 bridge 仍需测试。
- 原研究未提供论文专用的公开可执行代码仓库或独立复现;研究使用公开协议材料、SDK、参考服务器和生成工件,未测试生产系统或真实用户。
- 后续需要验证跨厂商协议的不可伪造来源标签、bridge 的责任强制执行、持久记忆与非标准通道对组合控制的影响,以及安全控制带来的延迟和可用性代价。