Compétences en modélisation des menaces, scan, tri, correction, plus un harnais de scan autonome que vous pouvez /customize
Une implémentation de référence pour la découverte et la correction autonomes de vulnérabilités avec Claude, basée sur nos apprentissages issus de partenariats avec des équipes de sécurité dans plusieurs organisations depuis le lancement de Claude Mythos Preview. Pour un article détaillé de ces apprentissages ainsi que des bonnes pratiques, voir le blog post associé (également disponible dans blog-post.md). Pour une procédure pas à pas légère basée uniquement sur le SDK du même cycle reconnaissance → recherche → triage → rapport → correctif, voir le livre de recettes compagnon.
Ce dépôt n'est pas maintenu et n'accepte pas de contributions.
🔒 Vous voulez une option gérée ? Anthropic propose Claude Security, un produit hébergé qui trouve et corrige les vulnérabilités dans votre code source sur plusieurs projets. Claude Security scanne votre dépôt pour détecter les vulnérabilités, applique un pipeline de vérification en plusieurs étapes pour réduire les faux positifs, et vous permet de gérer les résultats tout au long de leur cycle de vie : triage, validation des correctifs et génération rapide de correctifs.
Ce dépôt est une implémentation de référence open source basée sur des bonnes pratiques générales pour la recherche de vulnérabilités avec Claude. Vous pouvez l'utiliser pour construire votre propre pipeline de recherche de vulnérabilités, personnaliser la logique, et il peut être utilisé avec tout accès dont vous disposez aux API Claude (y compris Bedrock, Vertex ou Azure).
/quickstart, /threat-model, /vuln-scan,
/triage, /patch, /customize : cadrage interactif, scan, triage,
et correction. Ouvrez ce dépôt dans Claude Code et exécutez /quickstart pour vous
orienter.harness/ : le pipeline de référence autonome (reconnaissance → recherche → vérification
→ rapport → correctif), configuré pour trouver des vulnérabilités mémoire C/C++
en utilisant Docker et ASAN. Ce harnais est une référence, pas un produit.
La structure générale, les invites et le sandboxing sont réutilisables, mais le harnais
ne fonctionnera pas sur toutes les bases de code sans adaptation. Exécutez /customize pour le porter
vers votre langage, détecteur ou classe de vulnérabilité.⚠️ Sécurité :
/quickstart,/threat-model,/vuln-scanet/triagene font que lire et écrire des fichiers. Exécuter/patchsur des résultats statiques (TRIAGE.jsonouVULN-FINDINGS.json) est également en lecture et écriture seule./customizemodifie le code du harnais et exécute des commandes de validation. Toutes ces compétences peuvent être exécutées sans sandbox, à condition que vous examiniez et approuviez chaque utilisation d'outil dans Claude Code. Le pipeline de référence autonome (y compris/patchsur les résultats du pipeline) exécute du code cible, donc il refuse de s'exécuter en dehors d'un sandbox gVisor sauf si explicitement outrepassé. Pour configurer, exécutezscripts/setup_sandbox.shune fois, puis invoquez le pipeline viabin/vp-sandboxed. Voir docs/security.md et docs/agent-sandbox.md pour plus de détails.
git clone https://github.com/anthropics/defending-code-reference-harness
cd defending-code-reference-harness
claude
# Présentation de 30 secondes + première exécution guidée sur la cible canari
> /quickstart
> /quickstart comment porter le pipeline vers Java ?
> /quickstart comment trier tous ces bugs ?
Les équipes de sécurité avec lesquelles nous avons le mieux collaboré sont celles qui ont été opérationnelles le plus rapidement. Bien qu'il soit tentant de passer des mois à concevoir le pipeline parfait, nous recommandons de commencer petit dès le Jour 1 et de construire à partir de là au fur et à mesure des apprentissages. Les étapes ci-dessous suivent ce schéma et fixent un rythme ambitieux (mais raisonnable) basé sur ce que nous avons observé.
Le Jour 1 est consacré à voir l'ensemble du cycle de bout en bout. En utilisant uniquement les compétences interactives, vous allez construire un modèle de menace, exécuter un scan statique cadré par celui-ci, trier les résultats obtenus et rédiger des correctifs candidats. Vous terminerez la journée avec un modèle de menace, une liste classée de résultats statiques et des correctifs candidats.
Les compétences concernées ne font que lire et écrire des fichiers dans votre dépôt. Tant que vous exécutez Claude Code de manière interactive et approuvez chaque utilisation d'outil, aucun sandbox n'est nécessaire.
# Épingler chaque sous-agent au modèle souhaité
export CLAUDE_CODE_SUBAGENT_MODEL=<model-id>
claude
# 0. Introduction + première exécution guidée
> /quickstart
# 1. Construire un modèle de menace (viser avant de tirer)
> /threat-model bootstrap targets/canary
# 2. Exécuter un scan statique, cadré par ce modèle de menace
> /vuln-scan targets/canary
# 3. Vérifier, dédoublonner et classer les résultats obtenus
> /triage targets/canary/VULN-FINDINGS.json
# 4. Générer des correctifs candidats pour les résultats vérifiés
> /patch ./TRIAGE.json --repo targets/canary
Ce flux produit THREAT_MODEL.md, VULN-FINDINGS.{json,md},
TRIAGE.{json,md} et PATCHES/.
Les candidats de vulnérabilité produits à l'Étape 1 proviennent de l'examen statique de Claude du code source (rien n'est construit ni exécuté), attendez-vous donc à plus de faux positifs sur toute cible autre que canari. À l'Étape 2, vous produirez des résultats vérifiés par exécution.
Remarque : sur la cible canari,
/triagepeut rejeter les résultats du scan comme faux positifs.entry.cs'annonce comme un code de démonstration délibérément vulnérable, et/triageexclut correctement les bogues dans le code de test / fixture. Pour voir le flux complet de confirmation / dédoublonnage / faux positif, exécutez-le sur la fixture sélectionnée à la place (/triage .claude/skills/triage/fixtures/canary-findings.json --repo targets/canary) ou orientez les compétences de l'Étape 1 vers votre propre code.
Au Jour 2, vous passerez des compétences interactives à votre première exécution autonome en utilisant le pipeline de référence. Vous exécuterez le cycle complet reconnaissance → recherche → vérification → rapport dans votre environnement sur une bibliothèque open source connue pour être vulnérable, puis générerez un correctif candidat pour ce qu'il trouve. Vous terminerez avec un ensemble de crashes reproductibles, des rapports d'exploitabilité et des correctifs candidats, ainsi qu'une idée du fonctionnement du pipeline.
Exécuter le pipeline est simple :
# Configuration unique
python3 -m venv .venv && .venv/bin/pip install -e .
./scripts/setup_sandbox.sh # installe gVisor, construit les images agent et vérifie l'isolation ; note : nécessite Docker
export ANTHROPIC_API_KEY=sk-ant-... # ou CLAUDE_CODE_OAUTH_TOKEN, ou Bedrock — voir docs/agent-sandbox.md
# Exécuter le cycle reconnaissance → recherche → vérification → rapport
bin/vp-sandboxed run drlibs --model <model-id> --runs 3 --parallel --stream --auto-focus
# Générer un correctif candidat pour chaque résultat
bin/vp-sandboxed patch results/drlibs/<timestamp>/ --model <model-id>
# Ou, demander à Claude Code de lancer le pipeline et de regarder l'exécution pour vous
claude
> exécute le pipeline sur drlibs et explique les résultats au fur et à mesure
Les résultats du cycle atterrissent dans un répertoire results/drlibs/<timestamp>/. Avec
l'option --stream, le premier rapport apparaîtra en quelques minutes sous reports/bug_NN/.
⚠️
rungénère des agents autonomes. Le pipeline exécute chaque agent dans un conteneur gVisor avec une restriction de sortie vers l'API Claude uniquement. Les sous-commandes générant des agents refusent de démarrer en dehors de celui-ci sauf si elles sont explicitement outrepassées. Pour plus d'informations, voir docs/security.md et docs/agent-sandbox.md.
Sous le capot, le pipeline parcourt sept étapes :
Dockerfile de la cible.--auto-focus,
le pipeline utilise la liste focus_areas du config.yaml de la cible.Pour plus de détails, voir docs/pipeline.md.
Aux Jours 3-5, vous personnaliserez le harnais pour votre propre cible. D'abord, vous
orienterez les compétences de l'Étape 1 vers votre code, puis vous utiliserez /customize pour porter le
pipeline vers votre stack. À la fin de la semaine, vous aurez un répertoire targets/<votre-service>/
que le pipeline pourra utiliser, validé par une seule exécution test du pipeline,
et prêt à être mis à l'échelle à l'Étape 4.
Bien que le pipeline de référence soit conçu pour trouver des vulnérabilités mémoire dans du code C et C++, sa structure est générique. Le porter vers une nouvelle classe de vulnérabilité ou un nouveau langage consiste simplement à répondre aux questions suivantes pour votre stack cible :
| Question | Référence C/C++ | Votre cible (exemples) |
|---|---|---|
| Qu'est-ce qui signale un résultat ? | Signature de crash ASAN | exception / fichier canari / rappel DNS |
| À quoi ressemble une preuve de concept ? | fichier d'entrée provoquant un crash | séquence de requêtes HTTP / liste de tx / harnais de test |
| Comment la cible est-elle construite et exécutée ? | Dockerfile (utilisant clang + ASAN) | construction de votre langage dans un conteneur |
Avant de personnaliser, orientez les compétences de l'Étape 1 vers votre propre code. Pour rappel, elles sont en lecture et écriture seule, donc elles peuvent s'exécuter sans sandbox.
claude
> /quickstart comment personnaliser cela pour ~/code/mon-service ?
> /threat-model bootstrap-then-interview ~/code/mon-service
> /vuln-scan ~/code/mon-service
> /triage ~/code/mon-service/VULN-FINDINGS.json --repo ~/code/mon-service
Ensuite, utilisez les artefacts produits par ces compétences dans la compétence /customize,
qui modifie le harnais pour votre base de code.
> /customize use ~/code/mon-service/{THREAT_MODEL.md,VULN-FINDINGS.json} et ./TRIAGE.md
Quand /customize a terminé, vous aurez un répertoire targets/mon-service/
configuré. Validez-le avec une exécution test du pipeline avant de passer à l'échelle.
bin/vp-sandboxed run mon-service --model <model-id> --runs 1
Pour plus de détails, voir docs/customizing.md.
À la Semaine 2, vous utiliserez le pipeline que vous avez personnalisé à l'Étape 3 sur vos propres cibles, en ajoutant une boucle externe à la boucle interne du pipeline - exécutez plusieurs scans du pipeline, triez les résultats de ces différentes exécutions, corrigez en fonction de la priorisation, et répétez.
# Scan - exécutez une vague d'exécutions parallèles contre votre cible
bin/vp-sandboxed run mon-service --model <model-id> --runs 5 --parallel --stream --auto-focus
# Triage - dédoublonnez et classez chaque résultat de toutes les vagues en utilisant votre modèle de menace
> /triage results/mon-service/ --repo ~/code/mon-service --auto --votes 5
# Correctif - générez et validez des correctifs, en commençant par ce que le triage a classé le plus haut
> /patch results/mon-service/<timestamp>/ --model <model-id>
⚠️ Suivez les mêmes directives de sandboxing que dans Étape 2
Une exécution donnée du pipeline vérifie et dédoublonne déjà ses propres résultats.
/triage fonctionne sur plusieurs exécutions du pipeline. Lorsqu'il est pointé vers le répertoire
results/, il réduit les doublons de toutes les exécutions (et de tous les résultats statiques
de /vuln-scan s'ils sont présents), recalibre les évaluations de sévérité par rapport à votre
modèle de menace, et tente d'acheminer chaque résultat vers le propriétaire du composant.
Quand c'est possible, corriger rapidement les résultats aide à maintenir la boucle externe aussi
productive que possible. Lorsque les résultats sont corrigés, le modèle ne peut pas les retrouver,
et à la place fera remonter de nouveaux problèmes, généralement plus profonds. À mesure que vous exécutez
plus de vagues du pipeline, le nombre de résultats diminuera probablement, mais la
complexité augmentera probablement aussi. Si une correction rapide n'est pas possible, même
le simple fait d'enregistrer les résultats antérieurs dans known_bugs de la cible peut aider à orienter
les exécutions futures vers des bogues plus récents.
Le triage et la correction autonomes sont encore des problèmes ouverts, et ce harnais
de référence ne les résout pas complètement. Les stratégies de vérification dans /patch
aident à relever le niveau, mais la sévérité et la priorisation sont en fin de compte
des jugements sur votre environnement, et les correctifs vérifiés ne sont pas toujours
intégrables en amont. De nombreux partenaires ont signalé ces étapes comme leurs
goulots d'étranglement actuels, et vous devez prévoir du temps d'ingénierie réel pour eux.
Pour plus de détails, voir docs/triage.md et docs/patching.md.
Après la montée en puissance initiale, les équipes avec lesquelles nous avons travaillé ont eu tendance à investir dans quelques directions :