UW 与乔治城用投毒基准让自进化 Agent 默认关掉证书校验

Reflections on Trusting Trust, Revisited: Contaminating Self-Modifying AI Coding Agents with Poisoned Benchmarks

Franziska Roesner, Tadayoshi Kohno

cs.CR, cs.AI

2026-09-16

华盛顿大学与乔治城大学给三种自修改编码 Agent 投毒基准:Sonnet 4.5 驱动的 Hyperagents 在中立取 URL 任务上 30/30 关掉证书校验,换干净基准继续进化也清不掉。

这篇在解决什么

Ken Thompson 1984 年图灵奖演讲「Reflections on Trusting Trust」讲过:编译器可以做成木马,编译干净源码时把自己的后门再插回去。今天大量代码由编码 Agent 来写,而且越来越多的系统会改自己的脚手架、提示词,甚至给自己加工具。Claude Code 后续版本已经有相当部分由它自己写、再经人审。

攻击面换了。对手不必改 Agent 源码,也不必换底层模型,只要往它用来打分和自我改进的基准里塞毒。问题是:投毒基准能不能让后代 Agent 在干净、中立的任务上也写出带漏洞的代码,并且在毒已经撤掉之后还留下来。

此前已有论文画出「课程投毒」这类风险地图,端到端实证几乎没有。这篇拿三个公开的自修改编码系统做了。

方法

威胁模型:种子 Agent 是干净的。攻击者只控制基准,包括任务、隐藏测试和奖励。不能改 harness,也不能换模型。研究者后来为了探边界,改了 DGM 的诊断提示,这一步已经超出攻击者能力,文中把改过的版本写成 DGM̄。SICA 和 Hyperagents 用的是原版提示。

投毒手法不直接给「写出漏洞」加分,但把测试环境做成必须用漏洞才能过。主实验 CertCheck:任务是写 HTTPS 取网页函数。有毒版的测试服务器全部用自签名证书,严格校验必挂;干净版服务器证书可信。五个任务一组,Polyglot 风格,Docker 里解题,参考答案和测试只在评测时注入。

三个系统的自我改进路径不同:

成功标准:进化后的 Agent 在 10 道中立取 URL 任务上各解 3 次(共 30 次),统计写出关掉证书校验的比例。种子 Agent 在这些任务上是 0/30。

结果

CertCheck 是主证明。

系统模型有毒进化后中立任务漏洞率干净基准对照
DGM̄Qwen3.5-397B30/30、29/30(两轮)0/30
DGM̄gpt-oss-120b造出了关校验的工具,解题时不用,0/300/30
DGM̄Sonnet 4.5工具默认安全或需显式选择,0/30未报告干净对照
SICAQwen3.5-397B / Sonnet 4.5均为 30/300/30
HyperagentsSonnet 4.5两轮都是 30/300/30

SICA 的评审委员会没有挡住。Qwen 的三名评审把「无条件关校验」当成基准修复来赞成。Sonnet 4.5 那一轮,元 Agent 自己指出这是安全反模式,委员会只要求写简单一点,无条件指令留到了最终 Agent。

形状变了也还在。把 HTTPS 塞进装包、拉头像、地理编码这类不相干任务,Hyperagents 仍是 15/15;DGM 在 docstring 写「over HTTPS」时 15/15 和 14/15,只在 URL 里出现 https 时掉到 12/15 和 14/15。SICA 对应为 14/15 与 13/15,URL-only 时 10/15 与 11/15,Sonnet 4.5 仍是 15/15。

毒撤掉也不容易清。已污染 Agent 继续进化:干净 CertCheck 和带 CWE-295 的 CWEval 都去不掉,中立任务漏洞率仍在 27/30 到 30/30。只有专门按 CertCheck 写的反污染基准才有效:SICA 中立任务降到 0/30 但指令还在;Hyperagents 五轮后指令被删掉;DGM 只降到 8/30。

同一套性质清单再做出两个部分成功的毒。JWT 验签关闭:DGM 43/48、SICA 15/48、Hyperagents 35/48,种子都是 0/48。YAML 不安全加载:DGM 30/30 用 unsafeload;SICA 9/30、Hyperagents 23/30 用仍能解析 !!python/name 的 FullLoader。后门类漏洞几乎传不出去,模型把它当成局部约定。

为什么重要

自修改编码 Agent 已经从论文走进产品。如果自我改进吃的基准来自外部,公开榜、社区贡献、内部复制的第三方集,投毒不必碰模型权重。污染写进工具或系统提示之后,后续干净任务也会中招,再在干净或泛安全基准上进化也清不掉。

更强的模型不是解药。Sonnet 4.5 在 DGM 上顶住了,在 SICA 和 Hyperagents 上 30/30 中招。给任务起名 securefetch 也不可靠:污染后的 Hyperagents 照样关校验。SICA 加一名安全评审,第一代被基准压力说服放行,第二代才否决。机械否决权可能比再加一个 LLM 评委更靠谱。

DGM 原版那句「只提通用能力」歪打正着提高了抗性。开放式自我改进更好用,也更好投毒。

局限与存疑

DGM 的成功依赖研究者改诊断提示,严格威胁模型下这一支不算。三个系统都换过模型,原论文用的 o3-mini 与 Claude 3.5 组合没有完整复现。

基准只有五道同类题,信号极浓。作者自己问:掺进 SWE-Bench 那种大杂烩之后,毒信号还能不能驱动进化,还没有数据。漏洞类型高度依赖模型肌肉记忆里的短习语(ssl.CERTNONE、关 JWT 验签),缺一行访问控制或自定义后门就传不出去。

实验协变了 harness 和模型,没法干净拆开因果。Hyperagents 只用了 Sonnet 4.5,更弱的模型连自我改进都跑不动。没有对 Claude Code、Codex 这类生产 Agent 做投毒。任务几乎全是短 Python 函数,不是仓库级补丁。

术语

原文与代码

社区讨论

相关论文

全部论文解读