来源笔记
Generating Proof-of-Vulnerability Tests to Help Enhance the Security of Complex Software
摘要
PoVSmith 为依赖存在漏洞库的 Java 应用生成 JUnit 证明漏洞测试。它使用编码代理查找可达的有漏洞 API,编写测试,运行测试,修复失败,并让大语言模型判断测试是否触发了漏洞。
问题
- 开发者需要可执行的 PoV 测试,来判断某个依赖 CVE 是否会影响自己的应用。
- 手工编写 PoV 测试很难,因为利用链必须经过应用代码、库 API、构建设置和运行时约束。
- 论文与先前工作的对比显示,这类任务的现有工具大多失败。
方法
- PoVSmith 以一个有漏洞的库版本和一个调用该库的应用作为起点。
- 它提示 Codex 查找直接或间接调用有漏洞库 API 的应用公开方法,然后记录调用路径。
- 对每条调用路径,它都会把有漏洞的 API、CVE 或问题编号、受影响的库版本、源方法、调用路径,以及一个库级利用测试样例,一起提供给 Codex。
- Codex 根据构建和执行反馈编写并修改 JUnit 测试,最多进行 5 轮修复。
- 另一个基于 GPT 的评估器读取生成的测试以及构建和执行日志,判断测试是否证明了该漏洞。
结果
- 评估使用了 33 对 Java App-Lib 组合,覆盖 29 个 Maven 项目、3 个 Gradle 项目和 1 个纯 Java 项目中的 20 条漏洞记录。
- PoVSmith 找到了 158 个独特的应用层公开入口点,它们会调用有漏洞的库 API;其中 152 个正确,准确率为 96%。
- 它根据正确的调用路径生成了 152 个测试;其中 141 个成功编译。
- 152 个生成测试中有 84 个触发了漏洞,成功率为 55%。
- 论文说,PoVSmith 生成的可触发漏洞测试更多,因此优于先前基于 LLM 的方法,但摘要片段没有给出基线数量。
- 作者基于这些证明此前未报告漏洞的测试提交了 6 个拉取请求和 6 个 CVE 申请。