SkillAgentSearch skills...

offensive-fuzzing-course

Week 2 of the exploit development curriculum. Covers fuzzing methodology: target selection, corpus generation, coverage-guided fuzzing with AFL++/libFuzzer, structured fuzzing, and triage/deduplication. Use when setting up fuzz campaigns, selecting harness strategies, or triaging fuzzer output.

Install / Use

npx skills add SnailSploit/Claude-Red --skill offensive-fuzzing-course

Installs into whichever agent you are using.

About this skill
📄

SKILL.md

Installable skill definition

Quality Score

87/100

Category

Security

Supported Platforms

Universal

Our assessment of offensive-fuzzing-course

offensive-fuzzing-course scores 87/100 on our quality scale, 419th of 653 Security skills we index.

Its SKILL.md is 78 KB long, well organised into 286 sections with 37 code examples: long enough that it reads more like full documentation than a focused instruction file, which agents can find harder to follow.

With 6,850 GitHub stars, it is one of the more widely adopted skills in the catalogue.

Substance
21/30
Structure
20/20
Description
15/15
Adoption
16/20
Freshness
15/15

Maintenance, license and trust

  • The repository was last updated 6 days ago, so offensive-fuzzing-course is actively maintained.
  • It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
  • Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.

offensive-fuzzing-course compared with similar skills

All 4 of these similar skills score higher than offensive-fuzzing-course; compare them before choosing.

SkillScoreStarsUpdatedFormat
offensive-fuzzing-course (this skill)by SnailSploit876.8k6d agoSKILL.md
Agent-Reachby Panniantong10085.5k11d agoCLAUDE.md
algorithmic-artby anthropics100177.9k4d agoSKILL.md
pptxby anthropics100177.9k4d agoSKILL.md
designby nextlevelbuilder100130.2k5d agoSKILL.md

Frequently asked questions

How do I install offensive-fuzzing-course?
Run npx skills add SnailSploit/Claude-Red --skill offensive-fuzzing-course. The install tabs above show the steps for each supported agent.
Which AI agents does offensive-fuzzing-course work with?
It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
Is offensive-fuzzing-course safe to use?
It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is offensive-fuzzing-course still maintained?
The repository was last updated 6 days ago, so offensive-fuzzing-course is actively maintained.

SKILL: Week 2: Finding Vulnerabilities Through Fuzzing

Metadata

  • Skill Name: fuzzing-course
  • Folder: offensive-fuzzing-course
  • Source: https://github.com/SnailSploit/offensive-checklist/blob/main/2-fuzzing.md

Description

Week 2 of the exploit development curriculum. Covers fuzzing methodology: target selection, corpus generation, coverage-guided fuzzing with AFL++/libFuzzer, structured fuzzing, and triage/deduplication. Use when setting up fuzz campaigns, selecting harness strategies, or triaging fuzzer output.

Trigger Phrases

Use this skill when the conversation involves any of: fuzzing curriculum, AFL++, libFuzzer, coverage-guided fuzzing, corpus generation, harness, fuzz target, mutation, triage, crash dedup, week 2, exploit dev course

Instructions for Claude

When this skill is active:

  1. Load and apply the full methodology below as your operational checklist
  2. Follow steps in order unless the user specifies otherwise
  3. For each technique, consider applicability to the current target/context
  4. Track which checklist items have been completed
  5. Suggest next steps based on findings

Full Methodology

Week 2: Finding Vulnerabilities Through Fuzzing

Overview

created by AnotherOne from @Pwn3rzs Telegram channel.

This document is Week 2 of a multi‑week exploit development course, focusing on discovering vulnerabilities through fuzzing techniques and analyzing the crashes to determine exploitability.

Last week we studied vulnerability classes through real-world examples. This week we'll learn to find these vulnerabilities ourselves using fuzzing - the automated technique that has discovered thousands of critical security bugs in production software.

Fuzzing can feel a bit front‑loaded: you may spend time wiring harnesses and running campaigns without immediately finding exciting new bugs, especially on hardened or well‑tested targets. That’s normal, and it's one reason the next week on patch diffing often feels more directly "practical" — many companies already run large fuzzing setups and need people who can understand and exploit the bugs those systems uncover. Still, working through this week is important: it teaches you how fuzzers actually discover real vulnerabilities, so when you later triage crashes or study patches, you'll have a solid intuition for how those bugs were found and how to reproduce them.

Prerequisites

Before starting this week, ensure you have:

  • A Linux virtual machine (Ubuntu 24.04 recommended) with at least 8GB RAM and 8 cpu cores
  • Basic understanding of C/C++ programming
  • Familiarity with command-line tools and debugging (GDB basics)
  • Understanding of memory corruption vulnerabilities (from Week 1)

Day 1: Introduction to Fuzzing

  • Goal: Understand the fundamentals of fuzzing and get hands-on experience with AFL++.
  • Activities:
# Setting up AFL++

# Install build dependencies
sudo apt update
sudo apt install -y build-essential gcc-13-plugin-dev cpio python3-dev libcapstone-dev \
    pkg-config libglib2.0-dev libpixman-1-dev automake autoconf python3-pip \
    ninja-build cmake git wget python3.12-venv meson

# Install LLVM (check latest version at https://apt.llvm.org/)
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 19 all

# Verify LLVM installation
clang-19 --version
llvm-config-19 --version

# Install Rust (required for some AFL++ components)
curl --proto '=https' --tlsv1.2 -sSf "https://sh.rustup.rs" | sh
source ~/.cargo/env

# Build and install AFL++
mkdir -p ~/soft && cd ~/soft
git clone --depth 1 https://github.com/AFLplusplus/AFLplusplus.git
cd AFLplusplus
# NOTE: unicorn support might fail(you need to add the env or run ./build_unicorn_support.py and fix issues yourself)
make distrib
sudo make install

# Verify installation
which afl-fuzz
afl-fuzz --version

# Phase 1: Simple crash example
cd ~/ && mkdir -p tuts && cd tuts
git clone --branch main --depth 1 https://github.com/alex-maleno/Fuzzing-Module.git
cd Fuzzing-Module/exercise1 && mkdir -p build && cd build

# Compile with AFL++ instrumentation
CC=/usr/local/bin/afl-clang-fast CXX=/usr/local/bin/afl-clang-fast++ cmake ..
make

# Create seed inputs
cd .. && mkdir -p seeds && cd seeds
for i in {0..4}; do
    dd if=/dev/urandom of=seed_$i bs=64 count=10 2>/dev/null
done

# Run AFL++ fuzzer
cd ../build
echo core | sudo tee /proc/sys/kernel/core_pattern
afl-fuzz -i ../seeds/ -o out -m none -d -- ./simple_crash

# Expected output: AFL++ interface showing coverage, crashes, etc.
# Look for crashes in out/crashes/ directory

# Phase 2: Medium complexity example
cd ~/tuts/Fuzzing-Module/exercise2 && mkdir -p build && cd build
CC=/usr/local/bin/afl-clang-lto CXX=/usr/local/bin/afl-clang-lto++ cmake ..
make

cd .. && mkdir -p seeds && cd seeds
for i in {0..4}; do
    dd if=/dev/urandom of=seed_$i bs=64 count=10 2>/dev/null
done

cd ../build
afl-fuzz -i ../seeds/ -o out -m none -d -- ./medium

Success Criteria:

  • AFL++ compiles and installs without errors
  • Both fuzzing sessions start successfully
  • You can see the AFL++ status screen showing paths found, crashes, etc.
  • Check out/crashes/ directory for any discovered crashes

Troubleshooting:

  • If afl-clang-fast not found: Check /usr/local/bin/ is in PATH
  • If compilation fails: Ensure LLVM 19 is properly installed (clang-19 --version)
  • If fuzzer doesn't start: Check CPU scaling governor (echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor)

Real-World Impact: AFL++ Finding CVE-2024-47606 (GStreamer)

Background: AFL++ and similar fuzzers are actively used to find vulnerabilities in production software. Let's examine a real case from Week 1.

Case Study - CVE-2024-47606 (GStreamer Signed-to-Unsigned Integer Underflow):

  • Discovery Method: Continuous fuzzing campaigns by security researchers using AFL++ on media parsers
  • The Bug: GStreamer's qtdemux_parse_theora_extension had a signed integer underflow that became massive unsigned value
  • Attack Surface: MP4/MOV files processed automatically by browsers, media players, messaging apps
  • Fuzzing Approach:
    1. Target: GStreamer's QuickTime demuxer (qtdemux)
    2. Seed corpus: Valid MP4 files from public datasets
    3. Instrumentation: Compiled with AFL++ and AddressSanitizer
    4. Mutation strategy: Structure-aware (understanding MP4 atoms)
    5. Result: Heap buffer overflow crash after ~48 hours of fuzzing

Why Fuzzing Found It:

  • Rare Input Combination: Required specific Theora extension size values that underflow
  • Static Analysis Limitation: Signed-to-unsigned conversion buried in complex parsing logic
  • Code Review Miss: Integer arithmetic looked correct without considering negative values
  • Automated Testing Gap: Unit tests didn't cover malformed Theora extensions

The Discovery Process:

# 1) Generate a structured MP4 seed corpus (GitHub Security Lab generator)
cd ~/tuts && git clone --depth 1 https://github.com/github/securitylab.git
cd ~/tuts/securitylab/Fuzzing/GStreamer
make
mkdir -p corpus/mp4
./generator -o corpus/mp4

# 2) Build a vulnerable GStreamer (< 1.24.10) with AFL++ + ASan
cd ~/tuts
git clone --branch 1.24.9 --depth 1 https://gitlab.freedesktop.org/gstreamer/gstreamer.git
cd gstreamer
export CC=afl-clang-fast
export CXX=afl-clang-fast++
export CFLAGS="-O1 -g"
export CXXFLAGS="-O1 -g"
sudo apt-get install -y flex bison
# NOTE: this might take a while so you can just build parts of it, not all
meson setup build-afl --buildtype=debug -Db_sanitize=address
ninja -C build-afl -j"$(nproc)"

# 3) Fuzz the QuickTime demuxer pipeline with AFL++
mkdir -p findings
# NOTE: you can fuzz other binaries as well to find bugs
echo core | sudo tee /proc/sys/kernel/core_pattern
afl-fuzz -i ~/tuts/securitylab/Fuzzing/GStreamer/corpus/mp4 \
         -o findings -m none -- \
         ./build-afl/subprojects/gstreamer/tools/gst-launch-1.0 \
         filesrc location=@@ ! qtdemux ! fakesink

# Typical outcome after hours of fuzzing:
#   - ASan crash inside qtdemux_parse_theora_extension()
#   - heap-buffer-overflow in gst_buffer_fill() when copying attacker-controlled data
# Root cause (CVE-2024-47606 / GHSL-2024-166, fixed in 1.24.10):
#   - 32-bit signed 'size' underflows → huge unsigned value
#   - _sysmem_new_block() overflows when adding alignment/header → tiny (0x89-byte) allocation
#   - memcpy() writes the huge size, corrupting GstMapInfo and allocator function pointers

Key Insight: Fuzzing excels at finding edge cases in complex parsers that humans would never manually test. The combination of:

  • Coverage-guided mutation (AFL++ exploring new code paths)
  • AddressSanitizer (detecting memory corruption immediately)
  • Persistent fuzzing (running for days/weeks)

...makes it more effective than manual testing for this vulnerability class.

Key Takeaways

  1. Fuzzing finds real vulnerabilities: Not just theoretical crashes, but exploitable bugs in production software
  2. Coverage-guided fuzzing is powerful: AFL++ intelligently explores code paths rather than random mutation
  3. Sanitizers are essential: ASAN, UBSAN turn subtle bugs into immediate crashes
  4. Time matters: Many bugs require hours/days of fuzzing to discover
  5. Seed corpus quality affects results: Starting with valid inputs helps reach deeper code paths

Discussion Questions

  1. Why did fuzzing find CVE-2024-47606 when code review and unit testing didn't?
  2. What advantages does coverage-guided fuzzing have over purely random fuzzing?
  3. How do sanitizers (ASAN, UBSAN) enhance fuzzing effectiveness?
  4. What types of vulnerabilities are fuzzing best suited to find? What types does it miss?
  5. How can seed corpus selection impact fuzzing effectiveness?

Day 2: Continue Fuzzing with AFL++

  • Goal: Understand and apply advanced fuzzing techniques.
  • Activities:
    • Reading: Continue with "Fuzzing for Software Security Testing and Quality Assurance" (From 3.3 to 3.9.8).
    • Real-World Examples:
    • Exercise:
      • Experiment with different AFL++ options (for example, dictionary-based fuzzing, persistent mode).
      • Running AFL++ with a real-world application like a file format parser to mimic real-world scenarios.
      • Optionally, target an image or media parser so you can practice finding heap overflows and o

Truncated for display — read the full file on GitHub.

Related Skills

View on GitHub
GitHub Stars6.8k
CategorySecurity
Updated6d ago
Forks896

Languages

Python

Trust signals

100/100

From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.

No cautions