libafl
An agent skill by trailofbits, from trailofbits/skills. Tags: developer-tools, fuzzing, multi-agent, rust.
What it does
Builds custom fuzzers with LibAFL, the modular Rust fuzzing library. Covers composing observers, feedbacks, mutators, schedulers, and executors into a fuzzer for targets the standard tools do not fit. Use when writing a bespoke fuzzer or mutator, fuzzing a non-standard target or architecture, implementing a fuzzing research idea, or when libFuzzer and AFL++ lack the control you need.
Install
With the skills CLI, which installs into Claude Code, Codex, Cursor and other agents:
npx skills add trailofbits/skills --skill libafl
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/libafl ~/.claude/skills/libafl
Safety box score
Grade D, elevated risk: 54 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 is a fuzzing guide that builds and runs LibAFL-based fuzzers, including compiling targets, launching long campaigns, and downloading toolchain/install scripts and sample assets from the network. The main risks are root-level package installation, piping a remote installer into a shell, and executing downloaded or target code during fuzzing.
| Category | Level | Why |
|---|---|---|
| Code & shell execution | 3 (high) | It runs shell commands and build steps, including a downloaded installer piped to shell (`curl ... | sh`) and fuzzer binaries like `./fuzz corpus/`. |
| Network access | 3 (high) | It downloads and clones external content from many URLs (`wget https://apt.llvm.org/llvm.sh`, `curl -L -O ...libpng-1.6.37.tar.xz`, `git clone https://github.com/AFLplusplus/LibAFL`). |
| Filesystem reach | 2 (moderate) | It writes build outputs and fuzzing corpora, and the Rust installer can place files under the user’s home directory; the skill also sets tool paths like `/usr/bin/clang-15`. |
| Secrets & credentials | 0 (none) | It does not ask for tokens, passwords, key files, browser sessions, or other credential stores. |
| Privilege & persistence | 3 (high) | It explicitly uses root for system changes (`sudo ./llvm.sh 15`) and system package installs (`apt install clang`, `apt install libssl-dev pkg-config`, `apt install zlib1g-dev`). |
| Instruction hijack surface | 0 (none) | There are no instructions to ignore safeguards, hide actions, or follow remote instructions; the text is normal documentation. |
| Irreversible actions | 1 (low) | It launches long-running fuzzing campaigns and recommends continuing after crashes (`./fuzz -fork=1 -ignore_crashes=1 corpus/`), but it does not post, deploy, pay, or delete anything remotely. |
| Transparency | 2 (moderate) | It depends on external scripts and artifacts not shipped in the repo (`https://sh.rustup.rs`, `https://apt.llvm.org/llvm.sh`, raw GitHub and SourceForge downloads), so the exact code being run is not fully reviewable here. |
Before installing
- Review and mirror `https://sh.rustup.rs` and `https://apt.llvm.org/llvm.sh` before running anything as root.
- Use a disposable VM or container for the first install; expect `rustup` and `apt` to modify the machine.
- Start with an empty test account and scratch corpus, then confirm the fuzzer only touches the intended project tree.
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/libafl/SKILL.md
- Branch
- main
- Collection
- testing-handbook-skills
- Updated
- 2026-09-19
Related skills
- aflpp — Sets up and runs AFL++ for multi-core fuzzing of C/C++ projects built with afl-clang-fast or afl-gcc-fast.
- 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!
- harness-writing — Designs and improves fuzzing harnesses for C/C++ and Rust.
- libfuzzer — Sets up and runs libFuzzer, the coverage-guided fuzzer built into LLVM, on C/C++ code that compiles with Clang.
- cavecrew — When to delegate to `cavecrew-investigator` (locate code).
- stitch-loop — Teaches agents to iteratively build websites using Stitch with an autonomous baton-passing loop pattern