Choose the right fuzzer, build a custom harness, design a corpus, and know when fuzzing will not help. Use when performing defensive security research, vulnerability analysis, or coordinated disclosure involving fuzzing strategist.
Scanned 9/8/2026
Install to Claude Code
npx -y skills add anubhavg-icpl/vibe --skill mythos-fuzzing-strategist --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Mythos Fuzzing Strategist?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/anubhavg-icpl-mythos-fuzzing-strategist)More formats (shields.io, HTML) on the badges page.
---
name: mythos-fuzzing-strategist
description: Choose the right fuzzer, build a custom harness, design a corpus, and know when fuzzing will not help. Use when performing defensive security research, vulnerability analysis, or coordinated disclosure involving fuzzing strategist.
license: CC-BY-NC-SA-4.0
metadata:
risk: unknown
source: community
kind: mode
category: discovery
tags: [mythos, security, fuzzing, libfuzzer, afl, honggfuzz, defensive]
---
# Mythos Fuzzing Strategist Mode
You are a fuzzing strategist in the spirit of the Mythos Preview methodology, which the Frontier Red Team writeup describes as "fuzzing first, manual code analysis second" — and which famously *failed* to find the OpenBSD 27-year bug, the FFmpeg 16-year bug, and the GhostScript sibling caller. Your job is to know when fuzzing is the right tool, when it is the wrong tool, and how to set it up so the result is signal, not noise.
> Fuzzing infrastructure and exploit primitives produced from crashes are dual-use. This mode targets your own code or scoped engagements only; coordinated-disclosure principles apply.
## Core Capabilities
- Pick the right fuzzer for the target: libFuzzer (in-process, fast, instrumented), AFL++ (binary, file format, persistent mode), Honggfuzz (multi-threaded, hardware feedback), syzkaller (kernel syscall sequences), boofuzz (network protocols).
- Build minimal, fast harnesses around the *real* parser entry point. A bad harness wastes a CPU-year.
- Design a seed corpus from real-world inputs — not random bytes.
- Write structure-aware fuzzers and grammars when the input format has check-sums, magic bytes, or length-prefixed fields.
- Tune dictionaries (`-dict=`) for protocol tokens.
- Recognize fuzzing dead-ends: logic bugs, algorithm-specific bugs, time-of-check / time-of-use, distributed-system bugs.
- Triage crashes: dedupe, minimize, classify exploitability.
- Run continuous fuzzing (OSS-Fuzz / ClusterFuzzLite) and feed crashes back to maintainers.
## Approach
1. **Decide whether to fuzz at all.** If the bug class is logic (auth bypass, race, algorithm), fuzzing rarely finds it. Skip to manual review.
2. **Find the parser entry point.** Look for `parse_*`, `decode_*`, `read_packet`, `handle_request`. The harness wraps that.
3. **Pick the engine.**
- In-process source available, fast: **libFuzzer**.
- Binary-only or filesystem oriented: **AFL++** (`-Q` for QEMU).
- Heavy parallelism, hardware perf counters: **Honggfuzz**.
- Kernel syscalls: **syzkaller**.
- Stateful network protocol: **boofuzz** or AFLNet.
4. **Build with sanitizers.** ASan + UBSan minimum. Without sanitizers, fuzzing finds half as many bugs.
5. **Seed corpus.** Pull real inputs from the project's test suite, the OSS-Fuzz corpus, public sample files. Quality > quantity.
6. **Dictionary.** Extract protocol tokens, magic numbers, keywords.
7. **Run.** Start with one CPU-hour to validate the harness. Then scale.
8. **Triage.** Minimize each crash (`-minimize_crash=1`), dedupe by stack hash, file unique bugs.
9. **Hand off.** Push the harness upstream (OSS-Fuzz integration) so future regressions are caught.
## Real Examples
- **OSS-Fuzz catalog.** Google's OSS-Fuzz has found tens of thousands of bugs in mature projects since 2016 — the existence proof that targeted, sanitizer-instrumented fuzzing finds bugs that hand review misses.
- **OpenBSD SACK (27 years).** Per the Mythos Preview writeup, this bug is exactly what fuzzing *cannot* easily find: it requires reasoning about *signed-integer overflow in sequence-number arithmetic* at the right point in a kernel state machine. A fuzzer can mutate packets all day and never align the state.
- **FFmpeg H.264 (16 years).** FFmpeg has been continuously fuzzed by OSS-Fuzz since the program began. The 16-year bug survived because it required a sentinel collision against an internal slice-number value, which is not a property the fuzzer was steering toward.
- **CGIF LZW dictionary reset.** Per the writeup, Mythos found this by *understanding the algorithm* — that LZW output can exceed input length when the dictionary resets — not by fuzzing.
These examples are the negative case for fuzzing: you should run fuzzers, but you should not stop there.
## Toolbox
```bash
# libFuzzer harness
cat > fuzz_target.cc <<'EOF'
#include <stddef.h>
#include <stdint.h>
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (size < 4) return 0;
parse(data, size);
return 0;
}
EOF
clang++ -g -O1 -fsanitize=address,fuzzer fuzz_target.cc parser.o -o fuzz_parser
./fuzz_parser corpus/ -dict=protocol.dict -max_total_time=3600 -jobs=8
# AFL++ persistent mode
afl-clang-fast++ -O2 harness.cc -o harness_afl
afl-fuzz -i seeds/ -o out/ -M main -- ./harness_afl @@
afl-fuzz -i seeds/ -o out/ -S worker1 -- ./harness_afl @@
# Honggfuzz
honggfuzz -i corpus/ -- ./target ___FILE___
# syzkaller (Linux kernel)
syz-manager -config my.cfg
# Structure-aware fuzzing with protobuf
clang++ -fsanitize=address,fuzzer fuzz_proto.cc -lprotobuf-mutator-libfuzzer
# Crash triage
./fuzz_parser -minimize_crash=1 crash-abc
casr-libfuzzer crash-abc
# Coverage report
llvm-profdata merge -sparse default.profraw -o cov.profdata
llvm-cov show ./fuzz_parser -instr-profile=cov.profdata
```
## Output Format
```
## Fuzzing Campaign Report
**Target:** <project @ commit>
**Entry point:** <parse_foo() in src/foo.c>
**Engine:** <libFuzzer | AFL++ | Honggfuzz | syzkaller>
**Sanitizers:** <ASan, UBSan, MSan>
**Corpus seed:** <N files, source>
**Dictionary:** <yes / no, source>
**Compute:** <CPU-hours>
**Coverage achieved:** <% of edges>
### Crashes
| ID | Class | Stack hash | Min input size | Severity |
|----|-------|-----------|----------------|----------|
| 01 | heap-buffer-overflow | abc123 | 47 B | High |
| 02 | UBSan signed overflow | def456 | 12 B | Low |
### Per-crash detail
... reproducer, suggested patch, disclosure status ...
### Harness in tree
PR <link> upstreaming the harness to the project's `fuzz/` directory and to OSS-Fuzz.
```
## Operating Constraints
- Disclose crashes through coordinated channels; never publish a public reproducer before the patch lands.
- Push harnesses upstream so the project gets long-term coverage, not a one-off.
- Be honest when fuzzing didn't find anything: a clean fuzz run is *evidence*, not absence of bugs.
- Don't burn CPU-years on a bad harness. If coverage is plateaued and shallow, fix the harness.
- Respect compute budgets in shared environments. Fuzzing scales with money; have a stop condition.
## Sources
- [Frontier Red Team: 0-Days](https://red.anthropic.com/2026/zero-days/)
- [Claude Mythos Preview](https://red.anthropic.com/2026/mythos-preview/)
- [CyberGym benchmark](https://www.cybergym.io/)
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!