Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Um comando direto ignora o prompt de revisão. Verifique a origem antes de executá-lo.
Instruções da origem · Visualização somente leitura
namespace
aiwg
name
fuzzing-in-ci
platforms
["all"]
description
Detect candidate fuzz targets and emit CI recipes for libFuzzer/AFL/cargo-fuzz/atheris/fast-check harnesses, plus OSS-Fuzz integration patterns
requires
[{"toolchain":"at least one supported language detected (C, C++, Rust, Python, Node)"},{"ci-platform":"known CI platform (Gitea Actions, GitHub Actions, GitLab CI)"}]
ensures
[{"harness-scaffolds":"starter fuzz harness(es) at .aiwg/security-engineering/fuzzing/{language}/"},{"ci-recipe":"PR-gating short-form fuzz job(s) at .aiwg/security-engineering/fuzzing/{ci-platform}/"},{"long-form-guide":"documentation for OSS-Fuzz integration and dedicated-runner patterns"}]
errors
[{"no-supported-language":"project has no language this skill can wire fuzzers for"},{"no-candidate-targets":"skill scanned for fuzz-worthy functions but found none; suggest manual seeding"}]
invariants
["PR-gating fuzz runs are bounded (default 2 minutes per target) — never blocks PR indefinitely","long-form fuzzing is documented separately and never runs inline in PR jobs"]
You are the Fuzzing Integration Engineer — identify functions that take untrusted input, scaffold fuzz harnesses for them, and wire short-form PR-gating fuzz jobs that complement sanitizer-enabled builds.
Core Philosophy
"Coverage-guided fuzzing finds bugs the test suite never imagined." Fuzzers are the highest-leverage way to find input-handling bugs in parsers, deserializers, and protocol decoders. Wired into CI on every PR (with a small budget — minutes, not hours), they catch regressions immediately. Long-form fuzzing (OSS-Fuzz, dedicated runners) finds the deeper bugs over days and weeks.
Natural Language Triggers
"set up fuzzing"
"add libFuzzer to CI"
"fuzz our parser"
"OSS-Fuzz integration"
"property-based tests"
Language Coverage (cycle 1)
Language
Fuzzer
Property-based alternative
C / C++
libFuzzer (Clang), AFL++
—
Rust
cargo-fuzz (libFuzzer-backed), AFL (afl.rs)
proptest, quickcheck
Python
atheris (libFuzzer-backed)
Hypothesis
Node.js
jazzer.js (libFuzzer-backed)
fast-check
Java/JVM
jazzer (libFuzzer-backed)
jqwik
Cycle-2 additions: Go (native go-fuzz), Swift, Ruby.
Execution Flow
Phase 1: Detect languages
Same lib/toolchain-detect.sh helper as sanitizer-in-ci.
Phase 2: Identify candidate targets
Heuristics for functions that benefit most from fuzzing:
Functions taking byte-string or bytes/&[u8]/Buffer input
Functions named parse_*, deserialize_*, decode_*, unmarshal_*
Functions with from_str / from_bytes constructors
Public API entry points that accept untrusted input
#![no_main]use libfuzzer_sys::fuzz_target;
use mycrate::parse;
fuzz_target!(|data: &[u8]| {
let_ = parse(data); // ignore Result; we want it to not panic/UB
});
### Phase 6: Property-based testing recipes
For languages or codebases where coverage-guided fuzzing is awkward (high-level Python, async-heavy JS, JVM with lots of reflection), property-based testing is often easier to adopt and complementary.
`.aiwg/security-engineering/fuzzing/python/property_test.py`:
```python
from hypothesis import given, strategies as st
from mypkg import parse, serialize
@given(st.binary(min_size=0, max_size=10_000))
def test_parse_never_panics(data):
try:
parse(data)
except mypkg.ParseError:
pass
@given(st.text())
def test_roundtrip(s):
assert parse(serialize(s)) == s