fuzzing-obstacles — Claude Code skill: what it does, how to install
Patches anti-fuzzing patterns like checksums and time-seeded PRNGs in C, C++, and Rust. Useful when fuzzers get stuck on early validation checks.
npx skills add trailofbits/skills --skill fuzzing-obstacles -a claude-codeWhat fuzzing-obstacles does
This skill guides the agent in bypassing checks that stop fuzzers from reaching deeper code. Cryptographic hashes and dynamic seeds like time() or rand() break exploration and reproducibility. The technique introduces conditional compilation flags, such as #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION in C/C++ or cfg!(fuzzing) in Rust. Production behavior stays intact.
The workflow covers identifying blocks via coverage reports, applying the patch, and evaluating false positive risks. Blindly skipping checks creates invalid states. If downstream logic assumes validated data, the fuzzer will report crashes that cannot happen in release builds. This is a clear reason to audit assumptions after each patch.
What it helps with
- Bypass checksum and hash checks during fuzzing builds
- Replace non-deterministic PRNG seeds with fixed values
- Reach blocked code paths found in coverage reports
- Prevent false positive crashes when neutering input validation
Example prompts for the agent
- Patch the checksum verification in parser.c using FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
- Make the PRNG seed deterministic in our Rust harness for cargo-fuzz
- Show how to bypass packet validation without causing downstream null pointer crashes
How to install fuzzing-obstacles
1Skills CLI (Vercel)
npx skills add trailofbits/skills --skill fuzzing-obstacles -a claude-code2Manually: put the files in place
~/.claude/skills/fuzzing-obstacles/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/fuzzing-obstacles/
1Skills CLI (Vercel)
npx skills add trailofbits/skills --skill fuzzing-obstacles -a codex2Manually: put the files in place
.agents/skills/fuzzing-obstacles/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add trailofbits/skills --skill fuzzing-obstacles -a cursor2Manually: put the files in place
.cursor/skills/fuzzing-obstacles/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install trailofbits/skills fuzzing-obstacles2Manually: put the files in place
.github/skills/fuzzing-obstacles/SKILL.md1Skills CLI (Vercel)
npx skills add trailofbits/skills --skill fuzzing-obstacles -a gemini-cli2Platform CLI
gemini skills install https://github.com/trailofbits/skills --path plugins/testing-handbook-skills/skills/fuzzing-obstaclesManually: put the files in place
.devin/skills/fuzzing-obstacles/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add trailofbits/skills --skill fuzzing-obstacles -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set35
The whole set →Similar
Questions about fuzzing-obstacles
How do I install fuzzing-obstacles in Claude Code?
Run npx skills add trailofbits/skills --skill fuzzing-obstacles -a claude-code. The skill will be placed in ~/.claude/skills/fuzzing-obstacles/SKILL.md.
Which fuzzers and languages are covered?
The patterns focus on C, C++, and Rust codebases. They support engines such as libFuzzer, AFL++, LibAFL, honggfuzz, and cargo-fuzz.
Why can bypassing validation checks lead to false positives?
Downstream code often assumes input invariants hold true. If validation is stripped completely, fuzzers may trigger impossible crashes like division by zero that never occur in production.