explaingit

antonio-morales/fuzzing101

3,772Audience · developerComplexity · 3/5Setup · moderate

TLDR

A free hands-on course with 10 exercises for learning how to find real security vulnerabilities in software using a technique called fuzzing. Each exercise rediscovers a documented real-world security flaw using the AFL++ fuzzing tool on Linux.

Mindmap

mindmap
  root((fuzzing101))
    What it does
      Hands-on fuzzing course
      10 real CVE exercises
      AFL++ based
    Tech stack
      AFL++ fuzzer
      Linux Ubuntu
      C programs
    Use cases
      Learn security testing
      Find crashes in apps
      Practice CVE hunting
    Audience
      Security learners
      Developers
      Researchers
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Work through 10 guided exercises to learn how to fuzz real programs like PDF readers, GIMP, and Chrome's JavaScript engine.

USE CASE 2

Set up AFL++ on Ubuntu 20.04 and run your first fuzzing session against a known-vulnerable open-source library.

USE CASE 3

Learn to write a custom test harness to make a library fuzzable and measure how much code your fuzzer covers.

USE CASE 4

Practice rediscovering documented CVEs by fuzzing the exact software versions they affected.

Tech stack

AFL++LinuxC

Getting it running

Difficulty · moderate Time to first run · 1h+

Requires a Linux machine (Ubuntu 20.04 tested) and compiling AFL++ from source before starting the exercises.

In plain English

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.

Copy-paste prompts

Prompt 1
I am starting fuzzing101 exercise 1. Walk me through setting up AFL++ on Ubuntu 20.04 and running a basic fuzz test against a PDF reader.
Prompt 2
How do I use code coverage tools with AFL++ to see which parts of a program my fuzzing inputs are reaching?
Prompt 3
In fuzzing101, what is a test harness and how do I write one to fuzz a C library that does not have a standalone executable?
Prompt 4
How do I fuzz a closed-source binary using AFL++ in QEMU mode, as covered in the later fuzzing101 exercises?
Prompt 5
After AFL++ finds a crash in fuzzing101, how do I reproduce and analyze it to understand what security flaw it represents?
Open on GitHub → Explain another repo

← antonio-morales on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.