Package: afl Version: 2.52b-4 Severity: wishlist Dear Maintainer,
I noticed that AFL was not working when not instrumentation was compiled with the target binary. In fact, AFL has a QEMU mode allowing to run the fuzzer on binary-only programs. If you do not have this support you will run into the following error: [-] Oops, unable to find the 'afl-qemu-trace' binary. The binary must be built separately by following the instructions in qemu_mode/README.qemu. If you already have the binary installed, you may need to specify AFL_PATH in the environment. Of course, even without QEMU, afl-fuzz can still work with binaries that are instrumented at compile time with afl-gcc. It is also possible to use it as a traditional "dumb" fuzzer by specifying '-n' in the command line. [-] PROGRAM ABORT : Failed to locate 'afl-qemu-trace'. Location : get_qemu_argv(), afl-fuzz.c:7669 I tried to add the feature to my system (Debian unstable) and was successful. So, I propose to explain what I did to ease the job of the maintainer in order to add it to the current Debian AFL package. After 'apt-get source afl', I went to afl-2.52b/qemu_mode/ and I ran the build_qemu_support.sh script. The first bug is coming from the fact that the script expect /usr/bin/libtool and we have /usr/bin/libtoolize. A simple modification of the build_qemu_support.sh script did the job. The second problem was coming from a wrong function declaration in the QEMU code (declared non-static and defined as static). I added a memfd_create.diff patch to patches/: diff -ru qemu-2.10.0-clean/util/memfd.c qemu-2.10.0/util/memfd.c --- qemu-2.10.0-clean/util/memfd.c 2018-11-20 18:11:00.170271506 +0100 +++ qemu-2.10.0/util/memfd.c 2018-11-20 18:11:13.398423613 +0100 @@ -37,7 +37,7 @@ #include <sys/syscall.h> #include <asm/unistd.h> -static int memfd_create(const char *name, unsigned int flags) +int memfd_create(const char *name, unsigned int flags) { #ifdef __NR_memfd_create return syscall(__NR_memfd_create, name, flags); And modified the build_qemu_support.sh script by adding: echo "[*] Applying patches..." patch -p1 <../patches/elfload.diff || exit 1 patch -p1 <../patches/cpu-exec.diff || exit 1 patch -p1 <../patches/syscall.diff || exit 1 +patch -p1 <../patches/memfd_create.diff || exit 1 echo "[+] Patching done." Then, I ran the ./build_qemu_support.sh script and I ended up with a afl-qemu-trace executable which does perfectly the job. I did not modify the 'debian/rules' script to completely rebuild the package. But, I probably can come with a full patch for that. I hope that the maintainer will find this small message useful! -- System Information: Debian Release: buster/sid APT prefers unstable APT policy: (500, 'unstable') Architecture: amd64 (x86_64) Kernel: Linux 4.18.0-2-amd64 (SMP w/8 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages afl depends on: ii build-essential 12.5 ii libc6 2.27-8 Versions of packages afl recommends: ii afl-clang 2.52b-4 ii afl-doc 2.52b-4 Versions of packages afl suggests: ii gnuplot-nox [gnuplot] 5.2.5+dfsg1-1 -- no debconf information
signature.asc
Description: OpenPGP digital signature