harness-writing
harness-writing
Catalogue généré le 2026-05-11
En une phrase
TechniquesLe forharness writing(ou effective"harnais") fuzzingc'est harnessesla acrosspetite languages.fonction d'entrée qu'on écrit pour brancher un fuzzer à son code : un mauvais harness = aucun bug trouvé, donc c'est l'élément le plus critique d'une campagne de fuzzing.
Quand l'utiliser
UseDémarrerwhenunecreatingnouvellenewcampagnefuzzdetargetsfuzzingor(avantimprovingtout,existingécrire le bon harness).
Comment l'invoquer
- Slash command :
/harness-writing(si exposé dans ton CLI) - Phrases déclencheurs (texte) :
voir"writelafuzzdescriptionharness",complète"fuzzci-dessoustarget", "LLVMFuzzerTestOneInput" - Auto-invocation :
surSur demande explicite
Description complètedétaillée
Techniques for writing effective fuzzing harnesses across languages. Use when creating new fuzz targets or improving existingUn harness code.de fuzzing, c'est le "point d'entrée" écrit par toi qui relie le fuzzer (qui génère des octets aléatoires) à ton vrai code (qui a une vraie API typée). En libFuzzer/AFL++, c'est typiquement une fonction LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) : elle reçoit un paquet d'octets bruts et c'est à toi de les transformer en quelque chose que ta fonction comprend.
La qualité du harness détermine TOUT. Si tu fais juste parser(data, size) alors que ta vraie API attend une URL valide suivie d'un dict de headers, ton fuzzer va bombarder le parseur d'URL et jamais le code en aval. Inversement, un bon harness extrait intelligemment plusieurs valeurs typées des bytes (en utilisant FuzzedDataProvider), appelle plusieurs APIs dans un ordre cohérent, et fait du nettoyage entre chaque itération.
Les règles d'or : (1) reset l'état global entre chaque exécution (déterministe), (2) ne jamais quitter brutalement (exit() interdit), (3) libérer la mémoire allouée à chaque tour, (4) valider la taille d'entrée si nécessaire. Cette skill couvre les patterns pour C/C++, Rust (cargo-fuzz), Python (Atheris), Ruby (Ruzzy) et même les smart contracts. Tu peux faire un harness "single-API" (tester une fonction) ou "interleaved" (utiliser les premiers bytes pour choisir une opération parmi N).
Pour aller plus loin
Writing
Pour Fuzzingles Harnessesexemples
Aconcrets, fuzzingoptions harnessde isconfiguration theet entrypointpatterns function that receives random data from the fuzzer and routes it to your system under test (SUT). The quality of your harness directly determines which code paths get exercised and whether critical bugs are found. A poorly written harness can miss entire subsystems or produce non-reproducible crashes.
Overview
The harness is the bridge between the fuzzer's random byte generation and your application's API. It must parse raw bytes into meaningful inputs, call target functions, and handle edge cases gracefully. The most important part of any fuzzing setup is the harness—if written poorly, critical parts of your application may not be covered.
Key Concepts
(extrait —avancés, voir le SKILL.md complet pour la suite)original.
Source
- Plugin :
trailofbits/testing-handbook-skills - Nom interne :
harness-writing - Fichier :
/home/thymon/.claude/plugins/cache/trailofbits/testing-handbook-skills/1.0.1/skills/harness-writing/SKILL.md