# Honggfuzz **A security-oriented, feedback-driven, evolutionary fuzzer.** Honggfuzz is a general-purpose fuzzer that uses code coverage (software and hardware-based) to find bugs. It is multi-process, multi-threaded, and supports persistent fuzzing for extreme speed. ## Key Features * **Fast**: Multi-process and multi-threaded engine. unlocking full CPU potential. * **Persistent Fuzzing**: Test APIs directly in-process with iteration speeds up to 1M/sec. * **Feedback-Driven**: Uses hardware (Intel BTS/PT) and software code coverage to evolve inputs. * **Easy**: Can start with an empty corpus and automatically build a valid input set. * **Deep Monitoring**: Uses low-level APIs (`ptrace`) to detect hijacked signals and hidden crashes. * **Broad Support**: Linux, macOS, Android, NetBSD, FreeBSD, and Windows (Cygwin). ## Installation ### Dependencies **Linux (Ubuntu/Debian)** ```bash sudo apt-get install binutils-dev libunwind-dev libblocksruntime-dev clang ``` **macOS** Requires [Xcode](https://developer.apple.com/xcode/) (10.8+) and `libblocksruntime`. ### Build ```bash make # Compilation wrappers are created in hfuzz_cc/ ``` ## Usage ### 1. Compile Target Use the provided compiler wrappers to automatically add instrumentation: ```bash # C code ./hfuzz_cc/hfuzz-clang -o my_target my_target.c # C++ code ./hfuzz_cc/hfuzz-clang++ -o my_target my_target.cpp ``` ### 2. Run Fuzzer Point it to an input corpus directory (can be empty) and your binary: ```bash # Basic run ./honggfuzz -i input_dir/ -- ./my_target ___FILE___ # Persistent mode (faster) ./honggfuzz -P -i input_dir/ -- ./my_target ``` *Note: `___FILE___` is a placeholder for the input filename generated by honggfuzz.* For advanced examples (Apache, OpenSSL, BIND, etc.), check the `examples/` directory. See [USAGE.md](docs/USAGE.md) for detailed options. ## Trophies Honggfuzz has discovered major security vulnerabilities in critical software. ### HTTP & Servers * **Apache HTTPD**: * CVE-2017-7659 (mod_http2 remote crash) * CVE-2017-9789 (Use-after-free) * CVE-2018-1301, CVE-2018-1302, CVE-2018-1303 * **OpenSSH**: Pre-auth remote crash (commit 28652bca) * **BIND**: Multiple bugs * **NGINX Unit**: Infinite loop * **ProFTPD**: CVE-2019-18217 (DoS) * **Samba**: CVE-2019-14907, CVE-2020-10745, CVE-2021-20277 ### Cryptography & SSL * **OpenSSL**: * **CVE-2016-6309 (Critical, Potential RCE)** * CVE-2015-1789, CVE-2016-7054, CVE-2017-3731 * **LibreSSL**: Multiple crashes and invalid frees * **BoringSSL**: Uninitialized memory use * **Crypto++**: CVE-2016-9939 (Remote DoS) ### Languages & Interpreters * **PHP**: WDDX bugs, generic interpreter crashes * **Python/Ruby**: Interpreter bugs * **Rust**: Panics/safety issues in `regex`, `h2`, `sleep-parser`, `lewton` * **Perl**: Multiple interpreter crashes ### Media & Formats * **FreeType 2**: CVE-2010-2497 through CVE-2010-2527 (7+ CVEs) * **LibTIFF**: Multiple bugs * **LibJPEG/Turbo**: Multiple bugs * **VLC**: Double-free RCE * **Adobe Flash**: CVE-2015-0316 * **ImageIO (iOS/macOS)**: Multiple security problems (Project Zero) * **LibreOffice**: Memory corruption ### System & Utils * **Systemd**: Tested by honggfuzz * **fwupd**: 17+ bugs found * **TCPDump**: Multiple bugs * **Rsyslog**: Multiple bugs *(See [OSS-Fuzz](https://bugs.chromium.org/p/oss-fuzz/issues/list?q=honggfuzz&can=1) for hundreds more)* ## Projects Using Honggfuzz * **Google OSS-Fuzz**: Continuous fuzzing for open source software. * **Android**: Used by Android Security team. * **Rust**: `honggfuzz-rs` crate for fuzzing Rust code. * **Bitcoin Core**: Fuzzing infrastructure. * **Apache HTTP Server**: CI fuzzing. * **Systemd**: CI fuzzing. * **Cifasis QuickFuzz** * **Mozilla FuzzOS** ## License Apache License 2.0. __This is NOT an official Google product__