CVE-bench
收藏资源简介:
CVE-bench是一个用于评估AI代理修复真实开源软件中安全漏洞能力的严格基准测试数据集。它采用SWE-bench方法应用于安全领域:应用补丁→安全测试。每个实例都是一个来自公共开源仓库的真实CVE,并包含一个一致性防火墙,确保求解器永远不会看到黄金补丁或黄金安全测试。数据集包含5个已验证的实例,均来自PyPI(Python),涵盖算法混淆、拒绝服务、数据泄露等安全漏洞。
CVE-bench is a rigorous benchmark dataset for evaluating the capability of AI Agents to repair security vulnerabilities in real-world open-source software. It applies the SWE-bench methodology to the security domain, following the workflow of patch application → security testing. Each instance is a real CVE sourced from public open-source repositories, and includes a consistency firewall that ensures solvers will never have access to the golden patch or golden security tests. The dataset contains 5 validated instances, all sourced from PyPI (Python), covering security vulnerabilities such as algorithm obfuscation, Denial of Service (DoS), data leakage, and others.
数据集概述
CVE-bench 是一个面向 AI 代理的、评估其修复开源软件中真实安全漏洞能力的基准测试。它采用类似 SWE-bench 的方法论:应用补丁后进行安全测试。
数据集规模与内容
- 当前规模:包含 5 个经过验证的实例,全部来自 PyPI(Python 生态系统)。
- 实例列表:
- CVE-2022-29217 (pyjwt):JWT 密钥处理中的算法混淆漏洞
- CVE-2023-44271 (Pillow):因无界字符串长度导致的拒绝服务漏洞
- CVE-2023-45803 (urllib3):HTTP 重定向泄露包含敏感数据的请求体
- CVE-2023-32681 (requests):HTTPS 重定向时代理凭证泄露
- CVE-2016-2512 (Django):恶意重定向漏洞(CWE-601)
- 扩展路径:构建流程完整,可通过 OSV.dev 拉取候选 CVE,经 §42 验证门后合并入库。在一个10分片GCP验证活动中,扫描了约50个PyPI包,最终获得1个新通过验证的实例(CVE-2016-2512),验证通过率约2%。
数据实例结构
每个 CVE-bench 实例包含以下字段:
- instance_id:CVE 标识符
- repo:上游 GitHub 仓库地址
- base_commit:安全修复提交之前的那个提交
- fix_commit:修复 CVE 的提交(仅用于提取差异,不提供给求解器)
- problem_statement:漏洞的公开公告描述(求解器获得的唯一信息)
- patch:修复提交中的源代码变更(对求解器保密,仅用于验证)
- test_patch:修复提交中添加的回归测试,在修复前失败,修复后通过
- FAIL_TO_PASS:应用代理补丁后必须通过的 pytest 测试 ID
- env_hint:每个仓库的环境设置元数据(apt 包、pip 依赖)
设计原理与合规防火墙
- 核心保证:在评分过程中,代理的补丁是唯一被应用的源码侧变更。黄金补丁和黄金安全测试绝不会展示给求解器。
- 求解阶段:代理读取公告和 base_commit 时的仓库源码,生成
model_patch。 - 评分阶段:测试框架应用
base_commit + model_patch + test_patch,然后运行 FAIL_TO_PASS 测试。 - 验证阶段:黄金补丁仅在
--validate时使用,确认黄金修复本身能通过测试,评分时绝不使用。 - 防止数据污染:代理无法通过记忆修复方式来作弊。
评分规则
一个提交成功解决一个实例必须满足:
model_patch能够无冲突地应用到base_commit。- 安全
test_patch能够在其基础上应用。 - 所有 FAIL_TO_PASS 测试执行并通过。
如果测试无法运行(收集错误、依赖缺失),该实例被标记为"未运行",不计入通过或失败。
环境构建与规模挑战
- 瓶颈:为每个实例构建可复现的 Docker 环境是最大挑战。需要为每个仓库在特定历史版本下安装正确的 Python、系统库和测试依赖。
- 解决方案:
- SWE-bench 配方复用:对于 SWE-bench 支持过的仓库(如 django, requests, pillow 等),复用其已知有效的环境配方。
- 时代对齐环境构建:为其他仓库选择与 CVE 日期相近的 Python 版本,安装其时代固定的依赖,并进行配置兼容性适配。
- 效果:新构建器将之前被环境墙阻挡的候选实例验证率从 0% 提升至约 35%(23个被挡实例中有8个通过验证)。
数据集来源与合法性
- CVE 数据:来自公开的 OSV.dev 数据库。
- 仓库源码:来自公开的 GitHub 仓库(只读克隆)。
- 差异:提取自公开的修复提交,仅存储变更的差异,不存储完整源码。
- 许可证:CVE-bench 框架采用 MIT 许可证。上游仓库代码遵循各自许可证。




