AFL++实战其十

练习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

AFL++实战其十
https://zlsf-zl.github.io/2026/04/18/AFL-实战其十/
作者
ZLSF
发布于
2026年4月18日
许可协议