4371 条真人 CTF 攻击回放,OAP 前置检查把越权转账打成 0/69297

APort Vault: Benchmarking AI Agent Payment Authorization with the Open Agent Passport

Uchi Uchibeke

cs.CR

2026-09-19

APort Vault 把 4371 条真人 CTF 攻击在 14 个模型上重放 22.6 万次。Level 2 到 4 上,模型单独有 140 次越权转账,加上 Open Agent Passport 前置检查后是 0/69297,请求率几乎不变。

这篇在解决什么

支付 Agent 手里有转账工具,策略规定钱可以打给谁。挡住越权转账的可以是模型拒绝发起,也可以是工具执行前的硬检查。已发表的评测几乎全在量前者:换模型、换 jailbreak、让另一个模型当裁判。部署者真正要的数字是:同一批攻击、同一个模型,工具边界上有没有检查,结果差多少。

攻击来自一场公开 CTF,不是作者手写的模板。2026 年 3 到 8 月,1128 个独立会话对一台带转账工具的银行 Agent 提交了 4371 次到达模型的攻击,奖金池 6500 美元,97.7% 落在 3 月 6 到 12 日的上线窗口。Level 5 的 5000 美元无人领走。

方法

每条攻击在 14 个模型、5 档护照、两条回放轨道、两种架构上重放。模型来自 8 家实验室,走各家官方 API。两条轨道分别是攻击者最后一句,和完整多轮对话。两种架构只差一件事:模型发出的 transferfunds 是直接执行,还是先过一遍实现 Open Agent Passport 规范的确定性策略引擎。

五档护照:

主指标读执行过的工具调用:钱有没有打到护照不允许的收款人。不问模型、不用裁判。裁判组(Mistral Medium 3.5 和 Grok 4.6)只做审计。一共完成 225964 次评测,区间按源会话做聚类 bootstrap。

结果

请求率随配置变三个数量级,模型之间差得不多。模型单独跑:Level 1 为 10.9%,Level 2 为 3.0%,Level 3 为 0.1%,Level 4 为 79.4%。Level 4 的提示词本来就授权向指定地址做有单据的转账,1293 条提示在全部 14 个模型上跑单轮,请求率 71.2% 到 84.3%,809 条(62.6%)让 14 个模型全都发起请求,而且全都打到白名单地址。这是任务完成,不是 809 条越狱成功。

Level 2 到 4 才是能比较架构的测量档:

事件模型单独过授权层
含支付请求28543 / 7684225527 / 69297
含成功支付28521 / 7684225370 / 69297
越权转账140 / 768420 / 69297

零不是靠拒付堆出来的:层后仍执行了 25370 笔成功支付。策略引擎在这些档评估了 25640 次转账调用,放行 25453,拒绝 187,其中 148 是收款人不在白名单。68970 组「同一模型、同一提示、同一轨道」配对里,越权转账 105 对 0,请求率只差 +0.084 个百分点。

零有上界。69297 次评测来自 790 个源会话,按会话的 rule-of-three 单侧 95% 上界是 0.38%。按评测计是 0.0043%,作者引用更保守的会话界。

结构比总数更刺眼。140 次越权来自 790 个会话里的 24 个,1 个会话贡献 67 次(47.9%)。103 条伪造「verifyrecipient 已通过」的工具回执,贡献了 113 次多轮 Level 2 越权里的 111 次,打中 7 个模型;过了授权层是 0,因为收款人仍不在白名单。Level 2 到 4,没有任何一条攻击打穿超过 5 个模型。

裁判组撑不起这个指标。合并 kappa 0.772,Level 3 掉到 0.167。Grok 4.6 找回 99.1% 的确定性越权,Mistral Medium 3.5 只找回 64.4%,漏掉 3356 条。主指标不靠他们。

为什么重要

给支付 Agent 做安全评测,主指标应该是「钱有没有打到不该去的地方」,不该是「模型说了拒绝」。工具边界上的确定性检查,在这批语料上把越权转账压到会话上界 0.38% 以内,同时几乎不压请求率。Level 1 护照允许任意收款人时,层后支付率和模型单独几乎一样,说明这层执行的是写进去的策略,不是额外拒付。

对部署者:五个模型在 Level 2 到 4 上越权次数为零,但 14 个模型在平衡交集上的请求率都在 33.1% 到 39.9%。选「这次没被打穿的模型」当安全策略,覆盖不了下一条攻击。作者自己也写了:零是「策略写对、检查插在执行路径上」的性质,不是授权层不会配错。

数据、护照、计分代码和预注册以 CC BY 4.0 放在 Hugging Face。

局限与存疑

单一领域、单一转账工具、模拟银行。不能外推到代码执行、数据外泄或 Agent 互委托。攻击者是 6500 美元奖金池里的自选选手,不是国家级对手。每个格子只跑一次,温度沿用 CTF 生产设置。

作者是 APort Technologies 创始人,测的是自家 Open Agent Passport。利益冲突写在文末。缓解手段是确定性指标、预注册、全量放数据和可复现脚本,读者仍应按厂商论文来读。本地引擎在 Level 4 比公开策略包更严(额外要求 memo 里的确认码),这一档的零不能直接当成公开包的结果。预注册的约 300 条人工标注切片没有做完。Kimi K3 和 GLM-5.3 没有层后多轮格子。

术语

原文与代码

社区讨论

相关论文

全部论文解读