跳到正文
原文
arXiv· arXiv:2608.02001· Kexing Ji, Jiachen Liu, Enze Hu, Cuiyun Gao, Keke Lian, Yongheng Liu, Lei Zhang, Tian Dong, Hao Chen, Wang Bin·本站收录· 原文发表

VulnGym:面向仓库级漏洞检测的编码 Agent 基准

VulnGym: Benchmarking Coding Agents for Repository-Level Vulnerability Detection

论文速读

评测与基准

据论文 PDF 整理(AI 生成),以原文为准

VulnGym评测编程智能体;Hard、OpenHands、DeepSeek-V4-Flash的AR为22.58%。

问题
编程智能体要在完整仓库中自行定位漏洞相关代码,但现有基准多在预选片段上做分类,又缺少行级痕迹,难以判断失败发生在哪一步。
方法
VulnGym把已审阅GitHub advisory对齐到漏洞版本仓库,标注行级入口点、关键操作和执行痕迹,共184条advisory、408个条目、23个仓库。评测含端到端任务,以及用oracle拆开的入口识别、关键操作定位和痕迹构造。
实验与结果
Hard上OpenHands配DeepSeek-V4-Flash的AR/ER/ES为22.58%、15.22%、11.63%。Qwen3.5配Claude Code时,作者称端到端分数随难度下降;oracle端点下痕迹ES最高36.37%。
局限与可以继续做的
论文未专门讨论局限。实验包含七个模型、三种脚手架;前沿组合的T1与oracle子任务数值报告在Hard。论文未报告重复次数、采样温度和轮次上限。
实验设置Qwen3.5-2B、Qwen3.5-4B 等 · VulnGym · AR、ER 等
被测模型
Qwen3.5-2BQwen3.5-4BQwen3.5-9BQwen3.5-27BDeepSeek-V4-FlashMiniMax-M3GLM-5.2
基准
VulnGym
指标
ARERESFRLRFPTNRTNP
AI 导读VulnGym 是一个面向真实仓库的漏洞检测基准,用于评测编码 Agent 在完整代码库中自主探索并定位漏洞的能力。它把已审阅的 GitHub advisory 与其对应的漏洞版本仓库对齐,覆盖 23 个仓库、184 条 advisory 和 408 条漏洞条目,每条都标注了行级入口点、关键操作和漏洞轨迹。基于这些细粒度标注,VulnGym 定义了端到端检测任务和三个基于 oracle 的子任务,同时评估漏洞检测效果并诊断代码定位与证据构建环节的局限。评测结果显示,当前编码 Agent 在端到端仓库级漏洞检测和构建准确支撑轨迹两方面都仍有限。

VulnGym 是一个面向真实仓库的漏洞检测基准,用于评测编码 Agent 在完整代码库中自主探索并定位漏洞的能力。它把已审阅的 GitHub advisory 与其对应的漏洞版本仓库对齐,覆盖 23 个仓库、184 条 advisory 和 408 条漏洞条目,每条都标注了行级入口点、关键操作和漏洞轨迹。基于这些细粒度标注,VulnGym 定义了端到端检测任务和三个基于 oracle 的子任务,同时评估漏洞检测效果并诊断代码定位与证据构建环节的局限。评测结果显示,当前编码 Agent 在端到端仓库级漏洞检测和构建准确支撑轨迹两方面都仍有限。

深度解读

6个问题,点开问题读完整回答

  1. 这篇论文试图解决什么问题?

    编程智能体做仓库级漏洞检测时,现有基准难以定位失败发生在哪一步。

    如何评测并诊断编程智能体在真实仓库中的漏洞检测失败位置。

    • 场景: 作者称编程智能体把检测从预选片段扩到完整仓库,需要自行搜索文件并追踪依赖。文中举例,Open WebUI 的存储型 XSS 会经过多个组件,到达不安全的 innerHTML 赋值。
    • 现有不足: 作者称现有基准主要对预选代码做分类,不要求智能体自主探索并定位相关代码。没有细粒度痕迹时,标签正确仍可能对上错误缺陷或无关证据,评测看不出失败步骤。
    • 要回答的问题: 如何在真实仓库中评测检测过程,并诊断失败发生在何处。
    • 提出的基准: VulnGym 把已审阅 GitHub advisory 对齐到漏洞版本仓库,含 184 条 advisory、408 个条目、23 个仓库。每条标注行级入口点(Entry Point, EP)、关键操作(Critical Operation, CO)和漏洞痕迹(Trace),并定义端到端任务与三个 oracle 子任务。
  2. 有哪些相关研究?

    作者称现有基准不要求自主探索,也缺少可诊断的链级证据。

    作者按评测范围和证据粒度讨论漏洞检测基准,并用 Table 1 对照。

    函数级分类基准

    • 早期数据: Lin 等(2019)把检测做成函数级二分类。BigVul(Fan 等,2020)和 Devign(Zhou 等,2019)提供大规模函数标注;论文称它们有标签噪声和重复,并引用 Croft 等(2021)、Tamberg 与 Bahsi(2025)、Liu 等(2024)。
    • 后续清洗: PrimeVul(Ding 等,2024)用自动策略提高标注准确性,并以 MD5 去掉完全重复。SecVulEval(Ahmed 等,2026)把标注细化到语句级,并抽取多种代码上下文。论文称这些工作仍缺少过程间上下文,以及从入口到关键操作的完整执行链。

    仓库范围但仍以分类为主

    • VulEval(Wen 等,2026): 给目标函数补仓库级依赖上下文,并在更宽上下文中做分类;还从补丁定位漏洞文件与行,提供跨函数调用依赖。
    • CWE-Bench-Java(Li、Dutta 与 Naik,2025): 120 个经人工核验的漏洞,来自可编译 Java 项目,每条关联修复 commit。
    • 论文的区分: 作者称二者主要评分类准确率,而不是自主仓库探索,且都不提供漏洞执行链。

    智能体基准与对照表

    • JITVul(Yildiz 等,2025): 作者称这是面向 ReAct 智能体的首个仓库级漏洞检测基准。它把检测做成漏洞引入 commit 与修复 commit 的成对分类,智能体用工具调用检索跨过程上下文,并用 pAcc 避免过度预测漏洞类而抬高 F1。论文指出它仍针对预选函数,且没有链级标注来评估推理是否完整。
    • Table 1: 五个维度是评测范围(Level)、文件与行定位(Location)、自然语言缺陷原因(Cause)、跨文件行级执行链(Chain)、人工核验(Val.)。作者称此前没有基准同时覆盖五项,尤其缺 Chain 和 Cause;表中 VulnGym 五项均为有。
    • 实验对照: 论文没有把这些基准当作检测器基线来跑。实验对照是同一任务下的 LLM 与脚手架组合,数据为 VulnGym。

    作者把本文定位为:用仓库级行标注、自然语言缺陷原因和经人工核验的跨模块 Trace,评测自主探索和完整证据链构造。

  3. 论文如何解决这个问题?

    用行级EP、CO和Trace定义端到端任务及三个oracle子任务。

    VulnGym 先把 advisory 对齐到漏洞版本快照并生成可达条目,再经人工核验与修订,然后用 EP、CO、Trace 定义四项任务。

    数据构建

    Figure 1 分三阶段。作者称时间过滤是为降低数据泄漏。

    • Phase I: 从 2025 年 1 月至 2026 年 4 月的 3,632 条已审阅高风险 GitHub Advisory 出发,覆盖 1,579 个仓库。只保留 2025 年 11 月至 2026 年 4 月、星数超过 10,000 的仓库,得到 184 条 advisory。无法定位仓库或无法可靠确定漏洞快照的 advisory 被排除。
    • 可达条目: 在漏洞快照上用数据流和控制流分析,找出外部可达 EP、安全相关 CO,以及连接二者的 Trace。多条独立 EP–CO 路径各存一条记录。
    • 定义: EP 是可触发漏洞的外部可达位置,如 API handler 或事件回调。CO 是漏洞生效的安全关键位置,如不安全操作或缺失的安全检查。Trace 是有序执行路径,每步对应文件位置和代码片段。

    核验与修订

    • Phase II: 先把位置与源码逐行比对,分为精确匹配、行偏移、内容不匹配或文件缺失。两名评审按漏洞描述独立标为 Correct、Repair、Incorrect 或 Unsolved,核对外界可达性、CO 的安全相关性和 Trace 顺序。不一致或 Unsolved 由第三名资深评审裁定。Cohen's κ = 0.87,作者称一致性高。
    • Phase III: 按标签和行级修正重定位源文件与行并更新字段。无需修改的标为 Verified;有源码依据的修正标为 Update,回到 Phase II。无法可靠识别文件或行号的条目排除。
    • 规模: 最终 408 条可达记录,来自 184 条 advisory、23 个仓库。Figure 2 展示各仓库条目占比和漏洞类别分布;正文未给出各类别的全局比例。作者称基准包含自然语言缺陷原因,正文未单独写 Cause 的标注步骤。

    四项任务

    Figure 3。一条 advisory 可含多条独立可达路径,条目写成 EP → Trace → CO。

    • T1: 输入为漏洞仓库以及 advisory 标题和描述。输出一条或多条 EP、CO 及其 Trace,同时考察探索、定位、可达性和证据构造。
    • T2: 论文列出的输入是 oracle CO,要求找出能通向它的外部可达 EP。
    • T3: 论文列出的输入是 oracle EP,要求定位从它可达的全部 CO。
    • T4: 论文列出的输入是 oracle EP–CO 对,要求构造其间有序证据 Trace。Figure 3 未再写出 T2–T4 是否同时提供 advisory 文本。

    匹配与指标

    位置匹配要求规范化仓库相对路径相同,且行号相差不超过 k = 5。

    T1 中,预测同时匹配参考 EP 与 CO 才算条目命中。ER = Nentryhit / Nentry,即被命中参考条目的占比。advisory 在至少一条条目命中时算命中,对应 AR。ES(P, G) = 1 − DLev(P, G) / max(n, m),用预测 Trace 与参考 Trace 的 Levenshtein 距离衡量位置和调用顺序相似度,只对命中条目计算。

    T2、T3 共用 FR(正确文件占比)、LR(k 行内行级命中占比)和 FP(预测中在 k 行内命中参考的占比)。T4 复用 ES,并报告 TNR、TNP:中间节点的一对一命中分别除以参考中间节点数和预测中间节点数。

  4. 论文做了哪些实验?

    Hard上OpenHands+DeepSeek-V4-Flash的AR为22.58%(Table 2)。

    Hard 上九个前沿组合的端到端 AR,Table 2 中最高为 22.58%,来自 OpenHands 配 DeepSeek-V4-Flash。

    实验设置

    • 模型: 论文选择上下文至少 256K token 的模型。规模实验为 Qwen3.5-2B、4B、9B、27B。前沿模型为 DeepSeek-V4-Flash、MiniMax-M3、GLM-5.2。
    • 脚手架: Claude Code、OpenHands、MiniSWE。智能体只可调用只读命令;论文列出 cat、find、grep、head、ls、nl、pwd、rg、sed、tail、wc。
    • 难度: 按 Trace 长度分为 Easy(≤7)、Medium(=8)、Hard(≥9),并使 Medium 与 Hard 规模接近。advisory 为 110/31/31,条目为 278/56/46。
    • 任务分配: 四个 Qwen3.5 规模在三个难度上用 Claude Code 跑 T1。九个前沿组合在 Hard 上跑 T1(Table 2)和 T2–T4(Table 3)。
    • 判定: 对照人工核验的参考条目,k = 5。论文未使用 LLM 评审,也未报告重复次数、采样温度和轮次上限。

    主结果

    下表为 Hard 上的 T1,数字据 Table 2。受行数限制,省略 Claude Code+MiniMax-M3(12.90 / 8.70 / 6.25)和 MiniSWE+MiniMax-M3(16.13 / 10.87 / 6.95)。表中已包含 AR 最低的 OpenHands+GLM-5.2。

    表格较宽,可左右滑动

    脚手架模型AR(%)ER(%)ES(%)
    Claude CodeDeepSeek-V4-Flash9.686.523.37
    Claude CodeGLM-5.212.908.706.94
    OpenHandsDeepSeek-V4-Flash22.5815.2211.63
    OpenHandsMiniMax-M316.1310.877.93
    OpenHandsGLM-5.26.454.352.15
    MiniSWEDeepSeek-V4-Flash16.1310.877.67
    MiniSWEGLM-5.216.1310.878.65
    • 与规模模型对照: 作者称前沿组合高于 Qwen3.5-27B 配 Claude Code 在 Hard 上的 12.90% AR、8.70% ER、4.55% ES。作者仍称,即便最好的组合,检出的 Hard 条目也少于四分之一。
    • 组合方向相反: 作者称 DeepSeek-V4-Flash 在 OpenHands 上最好,换到 Claude Code 后下降;GLM-5.2 从 OpenHands 到 Claude Code 上升。表中数字即这两对对比。
    • MiniSWE: 三个 LLM 的 AR 均为 16.13%、ER 均为 10.87%。省略行的 ES 为 6.95%;作者给出的 ES 区间为 6.95%–8.65%。作者称该脚手架相对稳定,组合兼容性对端到端结果关键。

    规模与难度

    • 测了什么: Qwen3.5 四个规模,脚手架固定为 Claude Code,指标为 T1 的 AR、ER、ES(Figure 4 及正文)。
    • 结果: 作者称 2B 与 4B 只在 Easy 上非零;9B 把非零结果扩到 Medium;在这四个规模中,27B 各难度、各指标领先,且只有它在 Hard 上非零。Qwen3.5-9B 的 AR、ER、ES 从 Easy 的 6.36%、4.32%、2.52% 降到 Medium 的 3.23%、1.79%、1.67%,Hard 上均为 0。2B 与 4B 在 Medium 和 Hard 上三项均为 0。27B 在 Hard 上为 12.90%、8.70%、4.55%。
    • 作者解读: 作者称 4B 在 Easy 上三项都高于 9B,并认为规模收益可能随难度变化。论文未给出 2B、4B 以及 27B 在 Easy、Medium 上的具体百分比。

    Oracle 条件能力

    • 测了什么: Hard 上九个组合的 T2–T4(Table 3)。T2 给 oracle CO,T3 给 oracle EP,T4 给 oracle EP–CO。
    • 结果: 作者称除 OpenHands+GLM-5.2 外,CO 定位的 FR 都高于 EP 识别。该例外的 EP、CO 的 LR 为 9.30% 与 2.33%;据 Table 3,其 FR 为 18.60% 与 6.98%。作者给出的最高 CO 定位 FR、LR 为 51.16%、30.23%,分别对应 MiniSWE+DeepSeek-V4-Flash 与 Claude Code+GLM-5.2。最高 EP 识别 FR、LR 为 30.23%、18.60%,FP 最高为 EP 的 11.11% 与 CO 的 5.22%。TNR 为 30.60%–53.96%,TNP 为 14.61%–26.71%,ES 最高 36.37%(MiniSWE+GLM-5.2)。
    • 作者解读: 作者认为 EP 识别通常比 CO 定位更难,但 EP 的 FP 更高,预测更有选择性、覆盖更低。作者称去掉端点不确定性后,证据 Trace 仍不完整且噪声大:能找回部分参考中间节点,同时纳入许多未匹配节点。

    失败构成

    • 测了什么: Hard 上 T1 的关系级失败,共 347 例(Figure 5 及正文)。
    • 结果: 两端文件都未命中 93 例(26.8%);至少一个端点到达正确文件、但都未定位到正确行 103 例(29.7%)。作者称这两类合计 56.5%。只命中 CO、EP 未中为 80 例(23.1%),只命中 EP、CO 未中为 32 例(9.2%)。无可用发现 39 例(11.2%),其中 OpenHands+GLM-5.2 占 18 例。
    • 作者解读: 作者认为在 T1 输出中,EP 识别更常未解决。作者称这些统计能看出预测差在何处,但只是粗粒度视图。

    其他消融与分析

    • 效率(Figure 7,Hard、T1): 作者称 token–AR 帕累托前沿从 Claude Code+GLM-5.2 延伸到 OpenHands+DeepSeek-V4-Flash;后者 AR 最高且属于较便宜配置,OpenHands+GLM-5.2 成本最高但 AR 最低。作者认为更高消耗不一定带来更有效的漏洞发现。正文未给出 token 数或美元金额。
    • 轨迹(Figure 6,DeepSeek-V4-Flash,Hard,T1): 动作分为 Explore(find、ls)、Search(rg、grep)、Read(cat、head、sed、tail)、Other、Failed。作者称 Read 占比最大,Explore 集中在起始轮,Search 贯穿全程;Claude Code 的 Failed 和 Other 较少,MiniSWE 的 Other 更多,OpenHands 的 Failed 更多且集中在早期。正文未给出各动作次数。
    • 非单调规模: Easy 上 4B 的三项指标高于 9B;论文未给出该对比的具体百分比。
  5. 有什么可以进一步探索的点?

    论文没有专节写出局限或后续工作。

    论文未专门讨论局限。

    作者指出的局限与后续方向

    论文未专门讨论局限。所附文本没有 Limitations、Future Work 或附录中的局限说明;Discussion 与 Conclusion 也没有把某项写成局限或后续工作。

    实验覆盖范围

    • 最终数据为 23 个开源仓库、184 条 advisory、408 个可达条目;Phase II 由两名评审独立标注,不一致或 Unsolved 交第三名裁定,Cohen's κ = 0.87。
    • 被测模型为 Qwen3.5-2B、Qwen3.5-4B、Qwen3.5-9B、Qwen3.5-27B、DeepSeek-V4-Flash、MiniMax-M3、GLM-5.2,共 7 个;脚手架为 Claude Code、OpenHands、MiniSWE。
    • 规模对比在 Easy、Medium、Hard 上用 Claude Code 运行 T1。九个前沿组合的 T1 与 T2–T4 数值报告在 Hard;该子集为 31 条 advisory、46 个条目(Table 2、Table 3)。
    • 智能体只可调用论文列出的只读命令。位置匹配使用 k = 5。T1 报告 AR、ER、ES;T2/T3 报告 FR、LR、FP;T4 报告 ES、TNR、TNP。
    • 论文未报告重复次数、采样温度和交互轮次上限;Figure 7 的单次 token 与成本在正文中没有具体数值。
  6. 总结一下论文的主要内容

    作者报告Hard上OpenHands配DeepSeek-V4-Flash的AR为22.58%。

    VulnGym 用行级证据评测编程智能体能否在漏洞版本仓库中检出漏洞,并构造支持该结论的代码位置与执行痕迹。

    • 问题: 函数级分类不要求智能体自己找到相关代码,也看不出失败发生在定位还是证据构造。
    • 做法: 从 2025 年 11 月至 2026 年 4 月、星数超过 10,000 的已审阅高风险 advisory 对齐漏洞快照,经双人核验与修订得到 184 条 advisory、408 个条目、23 个仓库。T1 只给标题、描述和仓库;T2–T4 分别给出 oracle CO、oracle EP 或 oracle EP–CO。路径相同且行距不超过 5 才算位置匹配。
    • 端到端: Hard(Trace 长度 ≥9;31 条 advisory、46 个条目)上,OpenHands 配 DeepSeek-V4-Flash 的 AR、ER、ES 为 22.58%、15.22%、11.63%(Table 2)。Qwen3.5-27B 配 Claude Code 为 12.90%、8.70%、4.55%。同系列 2B、4B 在 Medium 与 Hard 上三项为 0,9B 在 Hard 上为 0;Easy 上 4B 的三项高于 9B。
    • 诊断: 347 例 Hard 失败中,作者称 56.5% 是文件未命中,或只命中文件而未命中行。oracle 条件下,EP 识别的最高 FR、LR 为 30.23%、18.60%,CO 定位为 51.16%、30.23%;T4 的 ES 最高 36.37%,TNR 为 30.60%–53.96%,TNP 为 14.61%–26.71%(Table 3)。
    • 作者结论: 作者称有挑战性的漏洞仍大多未被解决,结果随 LLM 与脚手架组合变化;更高 token 或成本不一定对应更高 AR。作者称该基准为推进仓库级漏洞检测提供基础。
阅读原文arxiv.org