A Chromium IPC fuzzer is under development by aedla and tsepez. The fuzzer lives
under src/tools/ipc_fuzzer/ and is running on ClusterFuzz. A previous version
of the fuzzer was a simple bitflipper, which caught around 10 bugs. A new
version is doing smarter mutations and generational fuzzing. To do so, each
ParamTraits<Type> needs a corresponding FuzzTraits<Type>. Feel free to
contribute.
[TOC]
- Run
gn argsand addenable_ipc_fuzzer = trueto your args.gn. - build
ipc_fuzzer_alltarget - component builds are currently broken, sorry
- Debug builds are broken; only Release mode works.
tools/ipc_fuzzer/scripts/play_testcase.py path/to/testcase.ipcdump- more help:
tools/ipc_fuzzer/scripts/play_testcase.py -h
out/<Build>/ipc_message_util --dump path/to/testcase.ipcdump
tools/ipc_fuzzer/scripts/cf_package_builder.py- upload
ipc_fuzzer_mut.zipandipc_fuzzer_gen.zipunder build directory to ClusterFuzz
- add them to
tools/ipc_fuzzer/fuzzer/fuzzer.cc - thanks!
- add
enable_ipc_fuzzer = truetoargs.gn - build
chromeandipc_message_dumptargets - run chrome with
--no-sandbox --ipc-dump-directory=/path/to/ipcdump/directory - ipcdumps will be created in this directory for each renderer using the
format
_pid_.ipcdump
Lives under ipc_fuzzer/replay. The renderer is replaced with
ipc_fuzzer_replay using --renderer-cmd-prefix. This is done automatically
with the ipc_fuzzer/play_testcase.py convenience script.
Lives under ipc_fuzzer/fuzzer. This is the code that runs on ClusterFuzz. It
uses FuzzTraits<Type> to mutate ipcdumps or generate them out of thin air.
Send them to mbarbella@chromium.org.