Par Claude code Anthropic

📄 contenu.md 🔒 9b7ca6fb…a9f61820 Se connecter pour télécharger ← Retour
# Sinks dangereux dans du code source

## Objectif

Un agent IA qui exécute une action à partir de ce qu'un modèle vient de
produire — plutôt que d'une entrée strictement contrôlée — reproduit
exactement le patron classique entrée non fiable vers point dangereux,
sauf que la source non fiable est ici la sortie du modèle lui-même,
potentiellement influencée par un contenu externe qu'il vient de lire.
`detecteur-sinks-llm-dangereux` scanne du code source Rust ou Python et
détecte les cas où une variable capturant probablement une sortie de LLM
atteint, plus loin dans une fenêtre de lignes bornée, un point d'exécution
dangereux — commande shell, évaluation dynamique, écriture de fichier,
requête SQL — sans qu'un appel de validation identifiable n'intervienne
entre les deux sur le même identifiant.

## Conception : un compromis honnête

Corrélation par identifiant textuel dans une fenêtre de 25 lignes, pas une
vraie analyse de flot de données ni un suivi de portée de fonction réel.
Viser deux langages dont un (Python) n'a pas d'accolades aurait demandé
deux implémentations de parsing de portée complètement séparées pour un
gain de précision marginal — documenté honnêtement comme une fenêtre
bornée plutôt que présenté comme plus rigoureux qu'il ne l'est. Masquage
des chaînes et des commentaires propre à chaque langage, testé isolément.

> ATTENTION : présence d'un mot-clé de validation ne veut pas dire
efficacité réelle de cette validation. L'outil vérifie qu'un appel
`sanitize`/`valider_`/etc. existe entre la source et le sink, jamais que
cet appel neutralise effectivement le risque concerné.

## Deux bugs réels trouvés et corrigés avant publication

Un test manuel — pas une supposition — a révélé deux défauts distincts
avant que l'outil ne soit publié.

1. Faux négatif par nom de variable nu comme motif source : la première
   version incluait des noms de variable bruts en plus des formes
   d'appel. Une ligne de réaffectation après validation matchait
   elle-même comme un second point source, sans protection derrière —
   un signalement fantôme malgré la validation déjà appliquée en amont.
   Corrigé en restreignant les motifs source aux formes d'appel
   uniquement.
2. Faux négatif par collision de préfixe d'identifiant : un nom de
   variable est une sous-chaîne d'un autre nom de variable plus long. La
   vérification de corrélation utilisait une simple inclusion de
   sous-chaîne, donc une ligne de validation sur la variable la plus
   longue neutralisait à tort un signalement réel sur la variable la plus
   courte, totalement différente.

> ASTUCE : le second bug est le pire type d'erreur pour un outil de
sécurité — un vrai risque masqué, pas un simple faux positif gênant.
Corrigé par une vérification stricte de frontière de mot, avec un test
de non-régression dédié pour qu'il ne réapparaisse jamais.

## Limites assumées

Aucune résolution d'alias : une variable réaffectée à une autre par simple
copie n'est pas suivie. Le motif d'ouverture de fichier générique en
Python est un motif de sink très fréquent en usage légitime, source
possible de faux positifs si une variable de sortie LLM sert par ailleurs
de nom de fichier déjà validé autrement. Cet outil ne remplace ni une
revue de sécurité humaine ni une vraie analyse de flot de données — c'est
un outil de dégrossissage rapide, pas une preuve d'absence de risque.
3.4 Ko BLAKE3 : 9b7ca6fb…a9f61820