Author and submit a project to Google OSS-Fuzz - the open-source continuous fuzzing service that runs libFuzzer / AFL++ / Honggfuzz campaigns on Google infrastructure 24x7. Covers the project.yaml + Dockerfile + build.sh contract, the $OUT/$WORK conventions, supported languages + sanitisers, seed-corpus + dictionary submission, the OSS-Fuzz Build Status dashboard, and the disclosure SLA (issues filed in Monorail with 90-day deadline). Use to offload long-running fuzz campaigns to dedicated infrastructure rather than self-hosting.
75
94%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
OSS-Fuzz (per google.github.io/oss-fuzz) runs libFuzzer / AFL++ / Honggfuzz campaigns 24x7 on Google Cloud across multiple sanitiser configurations (ASan, UBSan, MSan), auto-files bug reports with crash reproducers, and tracks fix status with a 90-day disclosure SLA.
For corpus discipline see
corpus-management-reference;
for sanitiser pairing see
sanitiser-integration-reference.
For commercial / closed-source projects: ClusterFuzz (the open-source backend behind OSS-Fuzz) can be self-hosted.
projects/<project-name>/ with project.yaml, Dockerfile, and build.sh per references/project-contract.md.infra/helper.py build_image, then build_fuzzers --sanitizer address, then check_build.<target>_seed_corpus.zip) and, for structured formats, a dictionary (<target>.dict) beside the target.github.com/google/oss-fuzz; the OSS-Fuzz team reviews security, scope, and maintainer verification.infra/helper.py reproduce) within the 90-day disclosure deadline.Each project lives at projects/<project-name>/ with three files: project.yaml
(metadata - language, fuzzing_engines, sanitizers, contacts), a Dockerfile that
builds the fuzz targets on base-builder, and a build.sh that produces
$OUT/<fuzz_target> plus seed corpora. Verify locally with infra/helper.py
before opening the PR.
Full field-by-field contract, file templates, and the local-testing commands: references/project-contract.md.
projects/<project-name>/.Bugs are filed in Monorail (issues.oss-fuzz.com) with:
After the 90-day deadline, unfixed bugs become public.
Fork -> modify -> PR. Common changes:
*.cc + build.sh updates)OSS-Fuzz crash artefact format matches libFuzzer's. The Monorail issue includes:
python infra/helper.py reproduce <project-name> fuzz_target_1 <crash-file>Feed this to bug-report-from-failure
for downstream bug-tracker filing.
A maintainer wants continuous fuzzing for a JPEG decoder library. They add
projects/jpeg-decoder/ with language: c, fuzzing_engines: [libfuzzer, afl],
sanitizers: [address, undefined], and primary_contact set. build.sh compiles
the decoder and links decompress_fuzzer against $LIB_FUZZING_ENGINE, then copies
decompress_fuzzer_seed_corpus.zip (sample JPEGs) to $OUT. Locally,
python infra/helper.py check_build jpeg-decoder passes. They open the PR; OSS-Fuzz
merges it about a week later. A few days in, Monorail files a heap-buffer-overflow
in the Huffman decoder with an attached reproducer. They run
python infra/helper.py reproduce jpeg-decoder decompress_fuzzer crash-abc123,
confirm the bug, patch it, and the issue closes before the 90-day deadline.
| Anti-pattern | Why it fails | Fix |
|---|---|---|
| Submitting an experimental harness | Slow path discovery wastes OSS-Fuzz compute | Mature harness locally first; ≥10k execs/sec |
| No seed corpus | Wastes first weeks rediscovering shallow inputs | Submit <target>_seed_corpus.zip with the project |
| No dictionary for structured formats | Slow grammar discovery | Submit <target>.dict |
| Fuzz target builds incompletely with MSan | Build matrix slot wasted | Skip MSan in project.yaml until dependencies instrumented |
Stale main_repo URL | OSS-Fuzz pulls from wrong branch | Keep main_repo current |
| Missing primary_contact / auto_ccs | Bug reports go nowhere | Always set contact emails |
| Fix-then-ignore | Disclosure deadline still applies; the bug becomes public 90 days later | Fix within deadline OR request extension |
corpus-management-reference,
sanitiser-integration-reference.libfuzzer-cpp,
afl-plus-plus,
cargo-fuzz-rust,
atheris-python-fuzzing,
jazzer-jvm-fuzzing,
go-native-fuzzing.fuzz-tool-selector.