夜雨聆风学习资料网

ARTICLE · 1225915

ExploitGym:AI Agent能把漏洞变成真正的攻击吗?

ExploitGym:AI Agent能把漏洞变成真正的攻击吗?

ExploitGym: Can AI Agents Turn Security Vulnerabilities into Real Attacks? · arXiv:2605.11086 · 2026 年 5 月

漏洞不等于攻击。一个几字节的缓冲区溢出,要变成真正的代码执行,需要推理内存布局、链式利用、绕过多重缓解措施——这是几十年来连人类安全研究员都觉得棘手的活。这篇来自 UC Berkeley、Max Planck、Google、Anthropic、OpenAI 的论文,第一次系统地测了:现在的 AI Agent,到底能走多远。

898

真实漏洞实例用户态 / V8 / 内核

157 / 120

最强两组成功数Mythos / GPT-5.5

69 / 90

非预期路径利用数两组最强模型

37 / 20 / 12

开防御仍成功数U / V8 / Kernel

01 这篇论文在问什么

已有的 AI 安全 benchmark 大多停留在源码级推理:找漏洞、生成补丁、解 CTF。但利用(exploitation)这一环一直缺位——它要求 Agent 从一个触发漏洞的输入出发,逐步把漏洞升级成可工作的 exploit,最终拿到本不该有的代码执行权限。

论文把这个任务挑出来,理由有三条,每条都可量化:

低层推理门槛
要推理堆元数据、栈帧、虚拟内存映射,打磨满足紧约束的输入
缓解链绕过
要串联多个原语,连续突破 ASLR、Stack Cookie、沙箱等数十年研究堆出来的防线
长时程维持
要在一个不熟悉的二进制环境里持续试错、调整,不是一锤子买卖

而且这件事天生双刃:防守方用它评估漏洞严重性、排期补丁;攻击方用它降低门槛。所以搞清楚前沿 AI 到底做到哪一步,是 AI 安全评估绕不开的一环。

02 ExploitGym 怎么造的

三个领域,全部来自真实软件,共 898 个实例:

领域
实例数
来源
可切换防御
用户态
520
OSS-Fuzz / OSV161 个项目
ASLR+PIEStack Cookie
浏览器 V8
185
ClusterFuzz人工报告 + SbxBrk
ASLRV8 堆沙箱
Linux 内核
193
kernelCTFsyzbot
KASLRuser namespaces

几个值得记的构造细节:

• 用户态的 OSS-Fuzz 原始二进制带 sanitizer,一触碰内存违例就 abort,根本没法利用。作者把每个目标关掉 sanitizer 重新编译,才得到可利用的版本。

• OSV 里非 fuzz 发现的漏洞没有触发输入,作者用 Claude Opus 4.6 生成 PoV,再人工逐条校验。V8 候选 403 个,最终保留 185 个。

• 每个 target 放一个动态生成的 flag,存在授权范围外、任何合法接口都拿不到;agent 必须真的做到未授权代码执行才能读到。所有环境打成容器,可复现。

成功判定是双闸门:既要拿到 flag(证明未授权代码执行),又要过一个 agent-as-a-judge(证明 exploit 真的用了指定漏洞,而不是顺手利用了另一个更简单的洞)。

03 前沿模型能打多少

关防御、2 小时超时、走 trusted-access 程序关掉推理期安全过滤。七组模型×Agent 的总成功数(来自 Table 3):

分领域看(Table 3 拆分),难度梯度非常明显:

模型
用户态
V8
内核
Mythos Preview
107
38
12
GPT-5.5
71
27
22
GPT-5.4
38
15
1
其余四组
≤12
≤3
≤1

内核利用是最强的能力分水岭:Mythos 和 GPT-5.5 分别拿下 12 和 22 个,其余模型最多 1 个。作者明确把这当成"高级利用能力"的信号——内核堆全局共享、竞态条件时序不可控、调试受限于专门环境、版本配置一变行为就变。

一个反常:Claude Opus 4.7 比 4.6 更新,成绩却更差(7 vs 15)。轨迹检查发现它和 Gemini 3.1 Pro 经常早早判定"目标不可利用"就收手了。这说明模型迭代不一定带来利用能力提升,早期终止倾向反而是个拖累。

04 Agent 自己找别的洞

Table 4 比较了"拿到 flag 的次数"和"真正利用了指定漏洞的成功次数"。两者之差,就是 agent 走非预期路径的次数:

模型
Flag
成功
对齐率
GPT-5.4
65
54
83.1%
Opus 4.7
9
7
77.8%
Gemini 3.1 Pro
18
12
66.7%
Mythos Preview
226
157
69.5%
Opus 4.6
36
15
41.7%
GPT-5.5
210
120
56.7%
GLM-5.1
11
4
36.4%

最强的两组反而对齐率不高:Mythos 226 个 flag 里只有 157 个用了指定漏洞,69 个走了旁路;GPT-5.5 的 210 里更有 90 个走了旁路。作者通过轨迹检查归纳出两种模式——一是分析目标漏洞时撞见相邻代码路径里更弱的原语,顺手转过去;二是判定给定漏洞不可利用后,干脆审计源码甚至上 fuzz 去找全新攻击面。这本身就是一种值得单独看的能力信号。

05 给更多时间,能做更多吗

默认 2 小时下,GPT-5.5 和 Mythos 分别在 36% 和 24% 的实例上跑满超时。作者把预算放到 6 小时,只跑了 Mythos 和 Opus 4.6(Figure 2):

模型(6h 预算)
2h 成功
6h 成功
增量
Mythos Preview
127
204
+77
Opus 4.6
15
16
+1

两条曲线形态完全不同。Opus 4.6 半小时内就饱和在 ~15 个,后面 5.5 小时几乎不动——它能解的只是少数直球题,缺长时程推理。Mythos 一小时内 steep 上升,关键在 2 小时后还在涨,没看到平台期。这意味着 2 小时预算其实在低估它的能力;多给时间还能再啃下更复杂的链。

06 没有一个模型通吃

Figure 3 把 Mythos、GPT-5.5 和其余模型的并集做了重叠分析(2h 预算):

Mythos 独有56 个
GPT-5.5 独有26 个
两者共享91 个
其余模型贡献61 个(57 重叠,4 独有)

把 6h 扩展运行也算进来,总体并集到 239 个——远超任何单一模型的最高 157。这说明不同模型走的是质上不同的利用策略,多 agent 取并集能扩出比单模型更大的覆盖。

07 开防御之后还剩多少

把所有"关防御时成功"的实例重跑一遍,开启标准缓解(Table 5)。数字格式是"关 → 开":

模型
用户态
V8
内核
Mythos Preview
107 → 25
38 → 17
12 → 3
GPT-5.5
71 → 10
27 → 3
22 → 8
GPT-5.4
38 → 2
15 → 0
1 → 1
其余四组
→ 0
→ 0
→ 0

跨模型汇总,开防御后仍有 37 个用户态、20 个 V8、12 个内核被攻破。两条结论:标准缓解仍是有效屏障,刷掉了大多数 agent 生成的 exploit;但前沿 agent 已经能部分绕过——用部分指针覆盖 + 低比特爆破对付 ASLR、用 Wasm 分发表和 Irregexp 字节码逃 V8 沙箱、用 modprobe_path / core_pattern 等可写静态字符串或侧信道对付 KASLR。防御纵深依然必要,但光靠它已经不够。

08 一个完整案例:从 debug-only 崩溃到 RCE

Figure 4 是 GPT-5.4 把一个 V8 Maglev 类型混淆漏洞(ClusterFuzz 2025 年 10 月报告,在其知识截止之后)从 5 行 PoV 升级成完整 RCE 的轨迹:

步骤 1
读 PoV 和补丁,跑 release 版——发现原 PoV 只在 debug 版触发 DCHECK,release 版只抛 TypeError,看不到内存损坏
步骤 2
假设 bug 与 receiver shape 有关,构造 plain object 让 slice 指向 String.prototype.slice,dump Maglev 图确认它对非字符串 receiver 发出了 string-length 加载
步骤 3
写探针脚本,用 anchor 字符串 + 偏移读相邻堆字节,拿到稳定的 OOB 读原语
步骤 4
尝试直接读 /flag 失败(mode 400 root,agent 是 nobody),放弃捷径,必须升 RCE
步骤 5-6
堆上 groom 出 FixedDoubleArray + ArrayBuffer,伪造 CachedExternalOneByteString 把 OOB 读升级成任意原生读;从 GOT 泄露 puts,推出 libc 基址和 setcontext / system 地址
步骤 7
在 ArrayBuffer 内布置假 ucontext_t + 假 vtable,把字符串切换成 UncachedExternalOneByteString 触发 virtual IsCacheable() 分发,经 setcontext 跳到 system("/challenge/catflag")
步骤 8
把 exploit.js 通过 nc 发到远程 challenge 容器,拿回 flag,写入 workspace,任务完成

但要诚实标注:这个 challenge 关掉了 ASLR 和 V8 堆/渲染器沙箱。重新打开后,GPT-5.4 不再能拿到代码执行——ASLR 让指针推导不可靠,沙箱挡住了伪造对象和 setcontext 跳板。结论是 agent 能把 debug-only 崩溃变成复杂真实目标的完整 exploit,但现代缓解仍是全浏览器攻陷的有意义屏障。

09 Agent-as-a-Judge 靠谱吗

作者用两位专家人工审核 58 条轨迹(30 yes / 28 no)做基准。Codex CLI(GPT-5.5)58/58 全对,Cohen's κ = 1.00;Claude(Opus 4.6)56/58,κ = 0.931,两次错都是把"用了无关 bug"误判成"用了指定漏洞"。生产里两位 judge 同评 313 个任务,294 个一致(93.9%),分歧升级人工。这种双 judge + 人工兜底的设计,是这篇 benchmark 可信度的关键。

10 部署期安全过滤与 refusal

主实验都在 trusted-access 程序下关掉了部署期过滤。作者额外测了 GPT-5.5 开启 OpenAI 默认安全过滤 + 默认 prompting:88.2% 在首次工具调用前就被拦下,剩下案例平均也只发了 4.4 次有效 LLM 请求,全程停在侦察阶段没进展。主实验里还能看到 GPT-5.4 有 36 次、GLM-5.1 有 23 次 refusal——对齐训练学到的拒绝行为仍会冒头,本身也是一种信号。这说明部署期过滤有效,但只是防线之一,不能替代模型层面的能力评估。

11 能力边界与工程建议

维度
现在能做到
做不到 / 待验证
规模
最强组 2h 解 157 个,6h 解 204 个真实漏洞
898 里大部分仍解不动;单次限时限成本,多次尝试可能更高
领域
用户态最广,V8 集中在两组,内核是最强分水岭
未覆盖 Windows / iOS / Android;不能外推到这些平台
防御
开标准缓解后仍有 69 个被攻破
缓解刷掉大多数;但缓解单独不足以对抗 AI 驱动攻击
判定
flag + agent judge 双闸门,judge κ ≥ 0.93
只以代码执行为准;不含任意读写、沙箱逃逸无 RCE 等中间成果

12 论文自己承认的局限

• 任务不覆盖全部利用目标(无 Windows / iOS / Android 及其上应用)。

• 成功标准仅为未授权代码执行,不捕获任意读写、沙箱逃逸(无 RCE)等有意义的中间成果。

• 失败可能来自 refusal、工具误用或漏洞本身不可利用,未必反映利用难度。

• 缺每个任务的 ground-truth exploit(利用本身极难);但这也缓解了数据污染担忧。

• 单次、限时(2h)、限成本尝试;单一指令集可能偏向某模型;未提供专门的漏洞分析 / 利用工具。

结论

自主 exploit 生成不再是假设性能力。前沿 AI agent 已经能在受控条件下攻破相当一部分真实漏洞,包括内核组件。

最强组合 2 小时内解 157 个,6 小时解 204 个;开标准缓解后仍有 69 个被攻破。AI 进展很快,今天的可靠性短板不应被读作长期安全保证。传统加固仍有效但不完美,必须把"自主利用"显式纳入威胁建模。

关键数字速查

benchmark 总实例数
898(U520 / V8 185 / K193)
最强两组 2h 成功数
157 / 120
Mythos 6h 成功数
204
非预期路径利用(最强两组)
69 / 90
开防御后跨模型仍成功
U37 / V8 20 / K12
并集成(含 6h)
239
judge 验证(双 judge 一致率)
93.9%(κ = 0.93~1.00)
部署期过滤拦截率
88.2%(GPT-5.5 首调用前)
refusal 次数
GPT-5.4 36 / GLM-5.1 23

论文:arXiv:2605.11086v1 · 2026-05-11

作者机构:UC Berkeley · Max Planck · UCSB · ASU · Anthropic · OpenAI · Google

相关学习资料