简易漏洞回归监控与V8Harvest
引言
在研究Javascript引擎(V8)期间,我创建了一个小工具,帮助你在单个页面上查看包含回归测试的近期V8漏洞。由于回归测试通常包含触发漏洞的PoC(概念验证代码),分析它们对于找出根本原因和编写n-day漏洞的利用代码非常有用。
例如,regress-1053604.js
包含触发kJSCreate操作码中副作用(CVE-2020-6418)的PoC代码:
|
|
由于Chrome的发布流程,V8中修复的漏洞可能未在最新Chrome稳定版本中修复。因此,一些漏洞利用开发者经常对Chrome进行补丁间隙利用(patch gapping)。由于补丁间隙利用是与时间赛跑,拥有随漏洞修复提交一起公开的回归测试与否会产生巨大差异。
例如,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
我希望这个工具对你们中的一些人有用或有益。