一句话:多数护栏只盯着一段文字危不危险,却看不见一串工具调用合起来才是漏洞
一组研究者把 200 条由真实公开漏洞(CVE)改写而成的 MCP 工具调用链,逐一丢给五套生产级护栏去测,结果超过一半的攻击序列被放行;表现最差的一套只拦下约 44.7%,最好的也仍在五成检测线之下。几乎同一时间,另一篇论文 PACE(Provenance-Aware Capability Enforcement,溯源感知的能力执行,编号 arXiv 2610.01349)提出在每一次工具调用真正执行之前做一层把关,作为对策。两者合起来,把智能体安全一个长期被低估的盲区摆到了台面上:危险不在某句话,而在执行图。
组合式工具调用攻击:为什么单步都安全,合起来是漏洞
这批攻击链的做法很朴素:拿公开披露的 CVE,翻译成一个相当能干的智能体在常规工具权限下就能执行的 MCP 工具调用序列,覆盖文件操作、shell 执行、HTTP 请求与数据库查询。每一步单独看,都匹配护栏训练时归类为「安全」的模式;危险只在步骤的组合里出现——上一步的输出变成下一步的输入,最终拼出一条完整的利用路径。举个例子,一个会读一份被污染的包、执行它的构建脚本、再把结果管道送到远端端点的智能体,全程几乎不用任何「危险词」,护栏看到的是一个工具调用,没看到那段利用。
五套护栏的实测:从硬币正反面到更差
被测试的五种护栏,是生产团队实际会部署的那一类:PromptShield、Llama Guard、NVIDIA NeMo Guardrails、OpenAI Moderation API 与 Azure AI Content Safety。结果按攻击序列的绕过率排,Llama Guard 最差,约 62.7% 的序列漏过;Azure AI Content Safety 相对最好,也有约 55.3% 漏过。也就是说,没有一套跨过五成检测线。研究者还试了把五套串起来、任一报警就拦的集成方案,检测率上去了,却仍漏掉约 31.4% 的序列——对任何一个生产级安全控制而言,这个失败率都难以接受。
根因:是架构问题,不是多喂数据能修的
作者给出的判断很关键:这是架构层面的安全缺口,而不是调参能补的洞。基于文本的护栏,本质是给一段字符串分类——它问「这句话有没有危险意图的痕迹」。当攻击藏在工具调用的执行图里,这种 framing 天然失效。把它和 XZ Utils 后门这类真实案例对照会看得更清楚:一个扫描「backdoor」「恶意注入」关键词的护栏,对一段读包、构建、外发的正常流程毫无反应,因为里面没有一个危险词。问题的形状,已经从「文字」变成了「图」。
对策:PACE 把把关点移到动作落地前一刻
PACE 的设计,正好对着前面那个架构缺口。它不在会话开始时做一次宽松的授权,而是在每一次工具调用真正执行之前 mediate 一层。具体有两块:路径 confinement,给出一条代表影响路径、可执行收敛的切口;能力校验与效果校验,把模式定义的效果,拿来和从已认证请求编译出的权限做比对。它还区分了「已认证的执行契约」与「被评估的配置」,从而能在提议拦截之后恢复一次被授权的调用,或套用声明的修复。在八个可执行智能体安全基准、三个目标模型族上,PACE 的被评估配置在 79 个合格的攻击列里,有 62 列给出严格最低的攻击成功率、14 列打平;相对无防御的智能体,全基准的原生效用至多损失 3 个点。一个缩小型的自适应搜索,在 30 个越权目标上对它零成功。
增量认知:评测与防御,都要从「文字」搬到「执行图」
把这两篇放在一起,结论比任何单篇都清楚:智能体安全 triggers 是一类不同于文本安全 triggers 的问题。提示词里写「删掉所有文件」会被所有护栏拦下;一段四步的工具调用序列,选文件读取、拼一个路径穿越参数、把输出接进删除、再把结果外发,每一步看起来都合规。这意味着,无论是评测还是防御,重心都要从「这句话危不危险」移到「这串动作合起来做了什么」。对工程团队,短期的可落地动作是:把工具调用序列当成一等审查对象,而不是只扫描自然语言;长期看,则需要在执行层嵌入像 PACE 这种调用前把关,而不是把安全寄托在入口处的文本过滤。
边界:PACE 是对策之一,不是终局
也要把话说回来。PACE 目前更多是方法论与论文阶段的成果,离大规模生产落地还有距离;它在论文自己的基准上表现好,但跨框架、跨业务、跨真实长链路的泛化与开销,作者及行业暂未披露更多细节。那组 200 条攻击链来自研究者发布的数据集,真实环境中攻击手法会更杂。把它当作方向确认,而非可以直接照搬的成品,更稳妥。
结语
当智能体从「回答问题」走向「调用工具、改动真实系统」,安全的定义也随之改变。护栏只盯着文字,等于在敌人已经绕过正面、从侧翼进城时,还死守着正门。58% 的绕过率不是某个模型的耻辱,而是整个安全范式的提醒:接下来比拼的,是谁能在工具调用的执行图上,也装上一道看得见的闸。