Work through 10 guided exercises to learn how to fuzz real programs like PDF readers, GIMP, and Chrome's JavaScript engine.
Set up AFL++ on Ubuntu 20.04 and run your first fuzzing session against a known-vulnerable open-source library.
Learn to write a custom test harness to make a library fuzzable and measure how much code your fuzzer covers.
Practice rediscovering documented CVEs by fuzzing the exact software versions they affected.
Requires a Linux machine (Ubuntu 20.04 tested) and compiling AFL++ from source before starting the exercises.
Fuzzing101 is a free, hands-on course for learning how to find security vulnerabilities in real software. It was created as a GitHub Security Lab initiative and is structured around 10 exercises, each targeting a well-known open-source or commercial program. The goal of each exercise is to rediscover a real, documented security flaw (called a CVE) using a technique called fuzzing. Fuzzing is a way of testing software by feeding it large amounts of randomly generated or mutated input and watching for crashes. When a program crashes on unexpected input, it often signals a security flaw that an attacker could exploit. The course uses a popular fuzzing tool called AFL++ to run these tests. AFL++ works by instrumenting the program it is testing so it can track which parts of the code each input reaches, then mutates the most promising inputs to try to reach more code and trigger more crashes. The exercises progress from simple to complex. Early exercises walk you through fuzzing a PDF reader and a photo metadata library on Linux, with estimated completion times of a couple of hours each. Later exercises cover harder targets: fuzzing an interactive application like GIMP, testing a closed-source commercial application like Adobe Reader using emulation, fuzzing a Windows application using a Windows-specific AFL variant, and finally fuzzing the JavaScript engine inside Google Chrome. Each exercise introduces new techniques along the way, such as using code coverage tools to measure how much of the target program is being tested, or writing a custom test harness to make a library fuzzable. All you need to follow along is a Linux machine (the exercises were tested on Ubuntu 20.04) and a working internet connection. Basic Linux familiarity is recommended. The course takes no prior fuzzing knowledge as a starting point.
← antonio-morales on gitmyhub — every repo by this author, as a profile.
Verify against the repo before relying on details.