aflpp
An agent skill by trailofbits, from trailofbits/skills. Tags: cli, developer-tools, fuzzing, testing.
What it does
Sets up and runs AFL++ for multi-core fuzzing of C/C++ projects built with afl-clang-fast or afl-gcc-fast. Covers instrumentation modes, parallel main and secondary campaigns, persistent mode, corpus minimization, and crash triage. Use when scaling fuzzing across cores, fuzzing a mature C/C++ codebase, reading the afl-fuzz status screen, or moving on after libFuzzer has plateaued.
Install
With the skills CLI, which installs into Claude Code, Codex, Cursor and other agents:
npx skills add trailofbits/skills --skill aflpp
Or copy the skill folder into Claude Code's skills directory by hand (~/.claude/skills for every project, or .claude/skills inside one):
git clone --depth 1 https://github.com/trailofbits/skills
cp -r skills/plugins/testing-handbook-skills/skills/aflpp ~/.claude/skills/aflpp
Safety box score
Grade D, elevated risk: 46 of 100 risk points, rated 2026-10-17. The grade rates what the skill and its scripts can reach on the machine of whoever installs it, across eight categories from shell execution to secrets access. How the score works.
This skill sets up and runs AFL++ fuzzing campaigns, mostly in Docker but with host-side system tuning options. The main risks are privileged container execution, root-required kernel/boot changes that disable mitigations, and fetching tools or headers from external sources.
| Category | Level | Why |
|---|---|---|
| Code & shell execution | 2 (moderate) | It runs many shell commands and the wrapper evaluates its arguments with `bash -c "$*"` and `bash -c "cd /src && bash -c \"$*\""`, giving it real command-execution capability. |
| Network access | 2 (moderate) | It pulls `aflplusplus/aflplusplus:stable` from Docker Hub and downloads `argv-fuzz-inl.h` from `raw.githubusercontent.com`, so external network access is part of the workflow. |
| Filesystem reach | 2 (moderate) | Most actions are scoped to the working tree, but the host-tuning path runs `update-grub` and `reboot`, affecting system configuration beyond the project directory. |
| Secrets & credentials | 0 (none) | The skill does not read key stores, `.env` files, browser sessions, or ask for tokens/passwords. |
| Privilege & persistence | 3 (high) | It uses `docker run --privileged`, and the host tuning steps say `afl-system-config`/`afl-persistent-config` require root, followed by `apt install`, `update-grub`, and `reboot`. |
| Instruction hijack surface | 1 (low) | The wrapper collapses the remaining arguments into shell code with `bash -c`, so quoting is not preserved and shell injection is possible if untrusted text is passed as arguments. |
| Irreversible actions | 1 (low) | It starts background fuzzers, monitors them, and can terminate them with `kill $(jobs -p)`, but it does not post, deploy, or modify external systems. |
| Transparency | 0 (none) | All shipped files are readable text; there are no binaries, blobs, or runtime-decoded code in the skill bundle. |
Before installing
- Read the wrapper section and decide whether you are comfortable with `--privileged` Docker and root-level tuning.
- Use a disposable VM before trying the `afl-system-config` / `afl-persistent-config` steps.
- Check whether you need the external `docker pull` / `curl` downloads, and verify them from a trusted source first.
Rated 2026-10-17 by an automated review of 3 files from the skill's repository.
Source
- Repository
- trailofbits/skills (all skills from this repository)
- Path
- plugins/testing-handbook-skills/skills/aflpp/SKILL.md
- Branch
- main
- Collection
- testing-handbook-skills
- Updated
- 2026-09-19
Related skills
- libfuzzer — Sets up and runs libFuzzer, the coverage-guided fuzzer built into LLVM, on C/C++ code that compiles with Clang.
- cargo-fuzz — Sets up and runs cargo-fuzz, the standard fuzzing tool for Cargo-based Rust projects. Covers cargo fuzz init, the nightly toolchain requirement, fuzz_target!
- fuzzing-dictionary — Builds and applies fuzzing dictionaries so a fuzzer can produce the keywords, magic bytes, and tokens a target expects.
- harness-writing — Designs and improves fuzzing harnesses for C/C++ and Rust.
- dev-browser — Browser automation with persistent named pages via the dev-browser CLI.
- TUI Puppeteering with tmux — Use when automating or testing TUI/CLI applications - provides isolated tmux sessions with scripts for input, output capture, and state verification