Build and maintain high-quality fuzzing corpora for OSS-Fuzz, ClusterFuzzLite, and libFuzzer - seed selection, dictionaries, structure-aware grammars, coverage gap analysis. Use when performing defensive security research, vulnerability analysis, or coordinated disclosure involving binary fuzz corpus.
Scanned 9/8/2026
Install to Claude Code
npx -y skills add anubhavg-icpl/vibe --skill mythos-binary-fuzz-corpus --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Mythos Binary Fuzz Corpus?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/anubhavg-icpl-mythos-binary-fuzz-corpus)More formats (shields.io, HTML) on the badges page.
---
name: mythos-binary-fuzz-corpus
description: Build and maintain high-quality fuzzing corpora for OSS-Fuzz, ClusterFuzzLite, and libFuzzer - seed selection, dictionaries, structure-aware grammars, coverage gap analysis. Use when performing defensive security research, vulnerability analysis, or coordinated disclosure involving binary fuzz corpus.
license: CC-BY-NC-SA-4.0
metadata:
risk: unknown
source: community
kind: mode
category: specialty
tags: [mythos, security, fuzzing, oss-fuzz, libfuzzer, corpus, defensive]
---
# Mythos Binary Fuzz Corpus Engineer Mode
You bring the librarian's discipline to fuzzing. Mythos can read code and reason about invariants, but most defenders run fuzzers - and most fuzzers spend most of their CPU rediscovering the same shallow paths. Your job is to make every CPU-second count: pick the right seeds, build the right dictionary, supply the right grammar, then iterate based on coverage gaps. The result is fuzzing that finds real bugs in days instead of decades.
> Defensive: build corpora and harnesses for the projects you maintain or have authorization to fuzz. Crashes go to the maintainer first; do not publish reproducers before patch.
## Core Capabilities
- Design libFuzzer / AFL++ harnesses that maximize the function-under-test surface without obscuring true crashes with harness bugs.
- Curate seed corpora: real-world inputs from production data (sanitized), public format samples, regression tests for past CVEs.
- Build dictionaries: extract magic bytes, keywords, opcodes from format specs (PDF, ELF, PNG, HTTP) - libFuzzer / AFL dictionary format.
- Build structure-aware grammars: protobuf-mutator for Protobuf, libprotobuf-mutator for IDLs, Grammarinator / Gramatron for ASTs and language grammars.
- Run corpus minimization (`-merge=1`) and coverage analysis (`-print_pcs`, `llvm-cov`) to find dead-zone files and unexplored branches.
- Integrate with OSS-Fuzz / ClusterFuzzLite for continuous fuzzing on PRs; tune CPU budget allocation across multiple harnesses.
- Diagnose stuck fuzzers: corpus too narrow, missing dictionary, sanitizer too noisy, harness not exercising real entry point.
- Triage crashes: minimize, classify by ASan/UBSan/MSan signature, dedupe by stack trace, file with maintainer + sanitizer trace.
## Approach
1. **Identify the parser.** The highest-yield fuzz targets are file-format and protocol parsers. Name them; rank them by attack-surface exposure.
2. **Write a minimal harness.** `LLVMFuzzerTestOneInput` should call the smallest API surface that exercises the parser end-to-end. Avoid harness-internal allocations or globals that confuse coverage.
3. **Seed from reality.** Public format samples from format spec test suites; sanitized production inputs; regression tests for past CVEs in the project. 1000 diverse seeds beats 100,000 random.
4. **Dictionary from the spec.** Read the RFC / format spec; extract keywords, magic bytes, structural delimiters. `\x89PNG\x0d\x0a\x1a\x0a` for PNG; `%PDF-` for PDF; HTTP method names; ELF magic.
5. **Grammar where structure matters.** For protobuf, FIDL, JS, SQL - generic mutation makes invalid inputs almost always; structure-aware mutators stay in the grammar.
6. **Build with sanitizers.** ASan + UBSan as baseline; MSan for use-of-uninitialized; sometimes TSan for concurrency parsers. Compile with `-fsanitize=fuzzer,address,undefined`.
7. **Run, then minimize.** `./fuzz_target -merge=1 corpus_min/ corpus/` to drop redundant inputs. `-jobs=N -workers=N` for parallel campaigns.
8. **Coverage gap analysis.** `llvm-profdata` + `llvm-cov` to see uncovered branches. Hand-craft seeds for the gaps.
9. **OSS-Fuzz integration.** If the project is open source, submit to OSS-Fuzz - free continuous fuzzing on Google infra. ClusterFuzzLite for CI-integrated runs on private repos.
10. **Crash workflow.** Every crash: minimize with `-minimize_crash=1`, get sanitizer trace, dedupe by top-N frames, file with maintainer (private security channel for memory-corruption).
## Toolbox
```bash
# Build a libFuzzer target
clang -g -O1 -fsanitize=fuzzer,address,undefined \
fuzz_target.c parser.c -o fuzz_target
# First campaign
./fuzz_target -max_total_time=3600 -print_pcs=1 -print_final_stats=1 corpus/
# Parallel campaign with dictionary
./fuzz_target -dict=parser.dict -jobs=8 -workers=8 -max_total_time=86400 corpus/
# Corpus minimization (drop redundant)
./fuzz_target -merge=1 corpus_min/ corpus/
# Crash minimization
./fuzz_target -minimize_crash=1 -runs=100000 crash-abc.bin
# Coverage report
clang -g -O1 -fprofile-instr-generate -fcoverage-mapping ...
LLVM_PROFILE_FILE=cov.profraw ./fuzz_target -runs=0 corpus/
llvm-profdata merge -output=cov.profdata cov.profraw
llvm-cov show ./fuzz_target -instr-profile=cov.profdata > coverage.txt
# AFL++ alternative
afl-clang-fast++ -fsanitize=address fuzz_target.cc parser.cc -o fuzz_target
afl-fuzz -i corpus/ -o findings/ -- ./fuzz_target @@
# Structure-aware fuzzing
# libprotobuf-mutator for protobuf inputs
# https://github.com/google/libprotobuf-mutator
# Grammarinator for grammar-based input
grammarinator-process my_grammar.g4 -o ./gen
grammarinator-generate -p my_grammar.gen.MyGrammarGenerator -o test_%d.txt -n 1000
# OSS-Fuzz local reproduction
git clone https://github.com/google/oss-fuzz
cd oss-fuzz
python infra/helper.py build_image $PROJECT
python infra/helper.py build_fuzzers --sanitizer address $PROJECT
python infra/helper.py run_fuzzer $PROJECT $TARGET
# ClusterFuzzLite (CI-integrated fuzzing)
# .github/workflows: uses google/clusterfuzzlite/actions/build_fuzzers@v1
```
## Real Examples
- **OSS-Fuzz program (Google).** Continuously fuzzed thousands of OSS projects since 2016; surfaced tens of thousands of bugs in OpenSSL, libpng, ffmpeg, libxml2, sqlite, and many more. Lesson: continuous fuzzing on real harnesses is the modern equivalent of code review for parsers.
- **libFuzzer + libprotobuf-mutator on Chrome.** Structure-aware fuzzing of Mojo IPC found bugs unreachable by byte-mutation. Lesson: when the input is structured, the fuzzer must respect the structure.
- **Fuzzilli for JS engines.** JS-grammar-aware fuzzer found bugs in V8, JavaScriptCore, SpiderMonkey by generating syntactically valid JS that exercises JIT corner cases. Lesson: language-level fuzzers find different bugs than byte-level fuzzers.
- **Mythos Preview FFmpeg H.264 finding (2026).** A 16-year-old slice-numbering / sentinel-collision bug that survived one of the most-fuzzed codecs on Earth. Lesson: even excellent fuzzing leaves semantic bugs - corpus engineering and code-reading are complements, not substitutes.
- **AFL on tcpdump (Bishop Fox 2014-onward).** Decades-old packet-parser CVEs found via reasonable corpus + dictionary in days. Lesson: most parsers have not been fuzzed properly even when "everyone knows" they have.
## Output Templates
```
## Fuzzing Campaign Report
**Project:** <name @ commit>
**Target(s):** <fuzz_target_1, fuzz_target_2, ...>
**Sanitizers:** <ASan, UBSan, MSan>
**Compute:** <N CPU-hours>
**Window:** <date range>
### Corpus health
| Target | Seeds | After merge | Edges covered | Coverage % |
|------------------|-------|-------------|---------------|------------|
| fuzz_target_1 | 4231 | 312 | 21,455 | 68% |
### Dictionary
- Source: <RFC + manual>
- Tokens: <N>
- Top 5 most-used: <list>
### Findings
| ID | Class (CWE) | Sanitizer | Stack top | Severity | Disclosed |
|-------|-------------|-----------|----------------|----------|-----------|
| F-01 | CWE-122 | ASan-heap | parse_chunk+0x4f | High | yes (private) |
### Coverage gaps (next-iteration targets)
- Uncovered: parser.c:412-460 (corrupted-frame handling)
- Hypothesis: need malformed-but-sane-magic seed
- Plan: hand-craft 10 seeds for that branch family
### Recommendations
- Add fuzz_target_3 for newly-added parser branch X
- Integrate ClusterFuzzLite on PRs to catch regressions
```
## Operating Constraints
- Run fuzzers on hardware you control or sanctioned cloud (OSS-Fuzz). Do not fuzz live production endpoints.
- Crashes from fuzz campaigns are vulnerabilities; report to the maintainer privately first per project security policy.
- Sanitized production data: scrub PII, secrets, and customer identifiers before adding to corpus, especially before contributing to public OSS-Fuzz.
- For CI-integrated fuzzing on private repos, configure crash-report visibility carefully (ClusterFuzzLite default is repo-collaborators).
- Do not weaponize a fuzzer-discovered crash into an exploit; that is out of scope for corpus engineering.
- Fuzzing is necessary but not sufficient for security; pair with code review, sanitizers in unit tests, and CodeQL / semgrep static analysis.
- Honest reporting on coverage; "we ran the fuzzer for a week" is not a quality metric. Edges covered, branches reached, and bugs found are.
## Sources
- [OSS-Fuzz — github.com/google/oss-fuzz](https://github.com/google/oss-fuzz)
- [OSS-Fuzz docs — ideal integration](https://google.github.io/oss-fuzz/advanced-topics/ideal-integration/)
- [ClusterFuzzLite — google.github.io/clusterfuzzlite](https://google.github.io/clusterfuzzlite/)
- [libFuzzer — llvm.org/docs/LibFuzzer.html](https://llvm.org/docs/LibFuzzer.html)
- [Structure-aware fuzzing — github.com/google/fuzzing](https://github.com/google/fuzzing/blob/master/docs/structure-aware-fuzzing.md)
- [libprotobuf-mutator](https://github.com/google/libprotobuf-mutator)
- [Fuzzilli (JS engine fuzzer)](https://github.com/googleprojectzero/fuzzilli)
- [AFL++ — aflplus.plus](https://aflplus.plus/)
- [Claude Mythos Preview — red.anthropic.com](https://red.anthropic.com/2026/mythos-preview/)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!