简单漏洞回归监控与V8Harvest
引言
在我研究JavaScript引擎(V8)的过程中,创建了一个小工具,帮助你在单个页面上查看最近包含回归测试的V8漏洞。由于大多数情况下,回归测试通常包含触发漏洞的PoC,分析它们以找到根本原因并为n-day漏洞编写利用代码非常有用。
例如,regress-1053604.js包含触发kJSCreate操作码中副作用的PoC(CVE-2020-6418)。
|
|
有时,由于Chrome的发布流程,在V8中修复的漏洞可能未在最新的Chrome稳定版本中修复。因此,一些漏洞利用开发者经常在Chrome上进行补丁差异分析。由于补丁差异分析是与时间赛跑,拥有与漏洞修复提交一起暴露的回归测试与否会产生巨大差异。例如,regress-1196683.js也在4月12日随此漏洞修复一起提交,而这个漏洞修复直到4月13日才应用到Chrome稳定版。一些安全研究人员已经基于回归测试编写了利用代码,并在那时在Twitter上发布。
仅仅一天后,4月14日,regress-1195777.js也随此漏洞修复一起提交。基于该回归测试,利用代码再次在互联网上泄露。而这次,直到一周后的4月20日才应用到最新的Chrome稳定版。
工作原理
该工具简单地解析/src/v8/test/mjsunit/
目录及其子目录下的所有regress-*
文件。
从那里,我使用git log
检索与回归文件相关的信息。
|
|
每个回归将包含以下信息:
- Chromium Bugs / V8 Bugs
- V8 Git
- Chromium Code Search
- Chromium Code Review
输出将如下图所示:
使用这种方法,我收集了大量带有相关信息的PoC/回归测试,按提交时间排序并按年份划分,从2016年到2021年。参见V8 Harvest。
如何使用
安装以下python3库:
|
|
将V8 git仓库克隆到本地机器:
|
|
从https://github.com/star-sg/V8Harvest获取v8Harvest.py
将v8Harvest.py放入V8的文件夹中并运行它,输出将命名为output.md
我希望这个工具对你们中的一些人有用或有益。