Fuzzing Apache 2.4
Requirements
- honggfuzz
- clang-4.0, or newer (5.0 works as well)
- apache (e.g. 2.4.29 or from githubs' master branch)
- apr, apr-utils, nghttp2
Preparation
Note: The examples provided below use hardcoded paths (here to /home/$USER/) and version strings of the libraries (e.g. apr-1.5.2). These will have to be modified, so they reflect your actual build environment.
- Compile honggfuzz
- Download and unpack the following packages: apr, apr-util, ngttp2, and Apache's httpd
- Patch Apache's httpd
$ cd httpd-master
$ patch -p1 < httpd-master.honggfuzz.patch
- Configure, compile and install Apache
- edit
compile_and_install.asan.shso it contains valid versions/paths
$ ./compile_and_install.asan.sh
- Copy custom configuration files (
httpd.conf.h1andhttpd.conf.h2) to/home/$USER/fuzz/apache/apache2/conf/(i.e. to your apache dist directory)
$ cp httpd.conf.h1 httpd.conf.h2 /home/$USER/fuzz/apache/apache2/conf/
- Edit
httpd.conf.h1andhttpd.conf.h2, so they contain valid configuration paths
Fuzzing
- HTTP/1
$ honggfuzz/honggfuzz -f corpus_http1 -w ./httpd.wordlist -- ./apache2/bin/httpd -DFOREGROUND -f /home/$USER/fuzz/apache/apache2/conf/httpd.conf.h1
- HTTP/2
$ honggfuzz/honggfuzz -f corpus_http2 -w ./httpd.wordlist -- ./apache2/bin/httpd -DFOREGROUND -f /home/$USER/fuzz/apache/apache2/conf/httpd.conf.h2