练习10 - V8发动机
版本:v8 7.5
漏洞编号:CVE-2019-5847
CVE-2019-5847 是一个漏洞,可能通过精心制作的文件导致无限递归。
基于堆的内存损坏是一种发生在堆数据区域的内存损坏类型,通常与显式动态内存管理(使用 malloc()和 free()函数进行分配/释放)有关。
因此,远程攻击者可以利用此问题在使用受影响库的应用程序上下文中执行任意代码。
准备环境
1
| sudo apt --yes install clang libcurl3 libpython2.7 libpython2.7-dev libcurl4 git
|
下载 Swift(用于构建 Fuzzilli):
1 2 3 4 5 6
| cd $HOME wget https://swift.org/builds/swift-4.2.1-release/ubuntu1804/swift-4.2.1-RELEASE/swift-4.2.1-RELEASE-ubuntu18.04.tar.gz tar xzvf swift-4.2.1-RELEASE-ubuntu18.04.tar.gz sudo mv swift-4.2.1-RELEASE-ubuntu18.04 /usr/share/swift echo "export PATH=/usr/share/swift/usr/bin:$PATH" >> ~/.bashrc source ~/.bashrc
|
安装 Fuzzilli:
1 2 3 4 5
| cd $HOME wget https://github.com/googleprojectzero/fuzzilli/archive/refs/tags/v0.9.zip unzip v0.9.zip cd fuzzilli-0.9/ swift build -c release -Xlinker='-lrt'
|
下载 V8 发动机:
depot_tools(用于管理v8):
1 2 3 4 5
| cd $HOME mkdir depot_tools && cd depot_tools git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git echo "export PATH=`pwd`/depot_tools:$PATH" >> ~/.bashrc source ~/.bashrc
|
获取 V8 源代码:
1 2 3 4 5 6
| cd $HOME mkdir Fuzzing_v8_75 && cd Fuzzing_v8_75 fetch v8 cd v8 git checkout 1ca088652d3aad04caceb648bcffef100bc4abc0 gclient sync
|
组装 V8:
1 2 3 4
| ./build/install-build-deps.sh gn gen out/Release "--args=is_debug=false" ninja -C out/Release ./out/Release/d8 ./test/fuzzer/parser/hello-world
|
输出 hello world 就代表一切正常。
模糊时间
重新使用 fuzzilli 的 patch 文件来编译 v8:
1 2 3 4
| cd $HOME/Fuzzing_v8_75/v8 git apply ~/fuzz_main/fuzzilli-0.9/Targets/V8/v8.patch gn gen out/fuzzbuild --args='is_debug=false dcheck_always_on=true v8_static_library=true v8_enable_slow_dchecks=true v8_enable_v8_checks=true v8_enable_verify_heap=true v8_enable_verify_csa=true v8_enable_verify_predictable=true sanitizer_coverage_flags="trace-pc-guard" target_cpu="x64"' ninja -C ./out/fuzzbuild
|
1
| cd ~/fuzz_main/fuzzilli-0.9
|
禁用创建核心转存储文件:
1
| sudo sysctl -w 'kernel.core_pattern=|/bin/false'
|
开始模糊:
1
| swift run -Xlinker='-lrt' -c release FuzzilliCli --profile=v8 '/home/fuzz/fuzz_main/Fuzzing_v8_75/v8/out/fuzzbuild/d8'
|
如果需要查看完整的可选项:
1
| swift run -Xlinker='-lrt' FuzzilliCli --help
|