PVBench
收藏资源简介:
PVBench包含来自20个开源C/C++项目的209个真实漏洞,每个漏洞都有基本测试和PoC+测试。
PVBench comprises 209 real-world vulnerabilities from 20 open-source C/C++ projects, where each vulnerability is accompanied by both basic test cases and PoC+ tests.
PVBench 数据集概述
数据集简介
PVBench 是一个用于评估自动化漏洞修复系统中补丁验证方法的综合性基准数据集。该数据集旨在揭示当前基于测试套件的验证方法可能导致的性能高估问题,并提出了更严格的 PoC+ 测试验证方法。
核心发现
- 关键问题:超过 40% 的补丁在通过基本测试验证为正确后,在 PoC+ 测试下失败。
- 假发现率:约为 42%。
- 补丁通过率:通过基本测试的补丁为 47.1%,而通过 PoC+ 测试的补丁为 27.1%。
- 语义等价性:通过 PoC+ 测试的补丁与开发者补丁的语义等价性超过 70%。
数据集构成
- 漏洞总数:209 个真实世界漏洞。
- 项目数量:20 个开源 C/C++ 项目。
- 数据类型:每个漏洞包含基本测试和 PoC+ 测试。
项目与漏洞统计
| 项目 | 代码行数 (LoC) | 案例数 | 测试数 | 项目 | 代码行数 (LoC) | 案例数 | 测试数 |
|---|---|---|---|---|---|---|---|
| PHP | 1,390.2K | 43 | 18.7K | Vim | 564.2K | 11 | 5.2K |
| CPython | 745.9K | 33 | 48.6K | HDF5 | 1,334.4K | 8 | 0.6K |
| LLVM | 8,980.4K | 26 | 128.7K | Exiv2 | 93.5K | 7 | 0.3K |
| V8 | 6,225.6K | 24 | 53.7K | Wabt | 514.9K | 5 | 1.1K |
| libxml2 | 200.4K | 19 | 3.3K | Hermes | 590.0K | 4 | 2.3K |
| ICU | 1,241.5K | 15 | 2.0K | PcapPlusPlus | 160.0K | 3 | 0.3K |
| QuickJS | 78.8K | 2 | 79.7K | libtiff | 109.0K | 1 | 0.2K |
| mruby | 152.4K | 2 | 1.7K | JasPer | 5.5K | 1 | 0.2K |
| jq | 4.7K | 2 | 0.9K | simdjson | 547.5K | 1 | 0.1K |
| htslib | 108.3K | 1 | 0.4K | Wireshark | 6,088.9K | 1 | 0.1K |
CWE 分布
- CWE-476 (NULL 解引用):52 个
- CWE-617 (可达断言):40 个
- CWE-122 (堆溢出):34 个
- CWE-416 (释放后使用):32 个
- CWE-190 (整数溢出):26 个
- CWE-121 (栈溢出):13 个
- CWE-670 (不正确的控制流):3 个
- CWE-415 (双重释放):3 个
- CWE-704 (类型混淆):3 个
- CWE-457 (未初始化的内存):1 个
- CWE-362 (竞争条件):1 个
- CWE-369 (除以零):1 个
PoC+ 测试方法
PoC+ 测试是从 PoC 漏洞利用中衍生出的功能测试,执行超出崩溃检测的全面验证,用于验证预期的程序行为。
PoC+ 测试类别
| 类别 | 描述 | 适用项目 |
|---|---|---|
| 输出检查 | 验证程序处理外部输入时的输出是否符合预期结果 | exiv2, hermes, htslib, jasper, libxml2, php, jq, llvm, simdjson, wabt, wireshark |
| 中间检查 | 验证 API 函数调用的返回值和中间状态 | hdf5, icu, pcapplusplus, libtiff |
| 自检查 | 在解释型脚本中嵌入断言以验证运行时行为 | cpython, mruby, quickjs, v8, vim |
实验评估结果
AVR 工具性能
评估了三种先进的 AVR 系统(使用 GPT-4.1 和 Claude Sonnet-4 模型):
| 工具 | 模型 | 基本测试通过率 | +开发者 PoC+ 通过率 | +生成 PoC+ 通过率 | 假发现率 |
|---|---|---|---|---|---|
| PatchAgent | Sonnet-4 | 83.5% | 50.7% | 50.1% | 40.1% |
| PatchAgent | GPT-4.1 | 76.4% | 45.2% | 44.5% | 41.7% |
| San2Patch | Sonnet-4 | 41.3% | 21.6% | 20.7% | 49.8% |
| San2Patch | GPT-4.1 | 37.9% | 20.2% | 19.6% | 48.2% |
| SWE-Agent | Sonnet-4 | 29.0% | 20.5% | 19.6% | 32.3% |
| SWE-Agent | GPT-4.1 | 14.4% | 8.4% | 8.3% | 41.3% |
| 总体 | - | 47.1% | 27.8% | 27.1% | 42.3% |
补丁质量分析
对于通过 PoC+ 测试的补丁,与开发者补丁的手动比较显示:
| 类别 | 百分比 | 描述 |
|---|---|---|
| 语义等价 | 74.38% | 与开发者补丁功能相同 |
| 次优修复 | 12.22% | 正确但实现质量较差 |
| 检查规避 | 10.11% | 绕过检查而非修复根本原因 |
| 性能问题 | 3.29% | 比开发者解决方案具有更高的时空复杂度 |
假阳性分析
通过基本测试但未通过 PoC+ 测试的补丁分类:
- 规范违反:54.38%
- 错误根本原因:41.18%
- 不良代码实践:4.40%
目录结构
PVBench/ ├── artifacts/ # 生成的工件和测试输出 │ └── gen/ # 自动生成的 PoC+ 测试 ├── pvbench-/ # 每个项目的漏洞案例 │ └── <issue-id>/ # 单个漏洞 │ ├── poc/ # 概念验证漏洞利用 │ ├── patch/ # 开发者补丁 │ ├── tests/ # 基本测试套件 │ └── poc_plus/ # PoC+ 测试 ├── PatchAgent/ # AVR 工具集成 ├── scripts/ # 实用脚本 │ └── generate_.py # PoC+ 生成脚本 └── README.md
研究意义与建议
- 当前验证高估有效性:超过 40% 的“正确”补丁无法通过严格测试。
- 规范意识至关重要:大多数假阳性违反了无法仅从代码中推断出的项目规范。
- PoC+ 测试提供可靠验证:与开发者补丁的语义等价性超过 70%。
- 建议:采用超越 PoC + 基本测试的多层验证,将规范信息(文档、API 参考)纳入 AVR 系统,使用 PoC+ 测试或类似方法进行全面评估。




