Prévenir les fuites avec les AI Hooks
Les AI Hooks intègrent ggshield aux outils de codage IA que vos développeurs utilisent déjà. Lorsqu'un prompt ou un appel d'outil contient un secret, ggshield bloque l'action avant qu'elle n'atteigne le modèle et indique au développeur ou à l'agent ce qu'il faut supprimer. Lorsqu'un secret n'apparaît que dans la sortie d'un outil, ce qu'une commande shell ou une réponse MCP peut produire de façon imprévisible, l'action a déjà été exécutée. Certains assistants permettent à ggshield de retenir cette sortie afin que le modèle ne la voie jamais ; sur les autres, ggshield déclenche une notification bureau pour que le développeur sache qu'il doit procéder à une rotation. Consultez ce que chaque assistant prend en charge.
Pourquoi les AI Hooks sont importants sur les endpoints des développeurs
Le scan des endpoints inventorie les identifiants déjà présents sur une machine. Les AI Hooks empêchent les nouveaux d'en sortir.
Les développeurs qui utilisent des outils de codage IA divulguent des secrets à un taux environ deux fois supérieur au taux de référence. Un agent chargé de déboguer un déploiement défaillant lit le fichier .env ou ~/.aws/credentials et transmet le contenu à un fournisseur de modèle. Il n'y a ni commit, ni push, ni pull request, donc aucun des points de contrôle qui protègent vos dépôts et votre CI ne se déclenche jamais.
Les hooks agissent au moment de l'interaction, ce qui vous apporte plusieurs choses :
- La prévention plutôt que le nettoyage. Un secret intercepté dans un prompt ou un appel d'outil n'atteint jamais un tiers, il n'y a donc aucune rotation à planifier ni aucun fournisseur de modèle à interroger sur la conservation. Il en va de même pour la sortie d'un outil sur les assistants qui permettent à
ggshieldde la retenir. - Une correction sur laquelle le développeur peut agir. Chaque blocage indique le secret détecté et ce qu'il faut supprimer, afin que le développeur ou l'agent puisse corriger le contenu et réessayer immédiatement.
- Aucun agent supplémentaire à déployer. Les hooks réutilisent le binaire
ggshieldque vous installez déjà pour le scan. Ils ne s'exécutent que lorsque l'outil IA les appelle, il n'y a donc aucun processus résident sur la machine.
Ce que les hooks scannent
ggshield s'enregistre sur trois étapes d'une interaction IA :
- Soumission du prompt : le prompt est scanné avant d'atteindre le modèle, et bloqué s'il contient un secret.
- Avant l'utilisation d'un outil : les lectures de fichiers, les commandes shell et les appels MCP sont scannés avant que l'agent ne les exécute, et bloqués s'ils contiennent un secret.
- Après l'utilisation d'un outil : l'outil a déjà été exécuté, donc ce que
ggshieldpeut faire dépend de l'assistant. Là où l'assistant le permet, la sortie est retenue et le modèle ne voit jamais le secret. Partout ailleurs, le développeur reçoit une notification bureau et le secret doit être considéré comme exposé.
La détection utilise le même moteur que tous les autres scans ggshield, couvrant plus de 600 types de secrets.
Ce que chaque assistant prend en charge
Les deux premières étapes se comportent presque partout de la même manière : un secret dans un prompt, dans une commande ou dans un fichier sur le point d'être lu est bloqué avant d'atteindre le modèle. C'est à la troisième étape que les assistants diffèrent, car le remplacement de la sortie d'un outil est une fonctionnalité que l'assistant doit proposer, ce que la plupart ne font pas.
| Assistant | ggshield minimum | Secret dans un prompt | Secret dans une commande ou une lecture de fichier | Secret dans la sortie d'un outil |
|---|---|---|---|---|
| Claude Code | 1.49.0 | Bloqué | Bloqué | Retenue pour les commandes shell et les lectures de fichiers, notification uniquement pour MCP et les autres outils |
| Cursor | 1.49.0, 1.55.0 sur Windows | Bloqué | Bloqué | Notification uniquement |
| VS Code | 1.51.0 | Bloqué | Bloqué | Notification uniquement |
| Copilot CLI | 1.52.0 | Bloqué | Bloqué | Notification uniquement |
| Codex | 1.53.0 | Bloqué | Bloqué | Retenue pour tous les outils |
| Mistral Vibe | 1.54.0, avec Vibe 2.21 ou ultérieur | Bloqué | Bloqué | Retenue pour tous les outils |
| Junie CLI | 1.55.0 | Bloqué | Bloqué | Non disponible : Junie n'exécute aucun hook post-outil |
| Kiro CLI | 1.55.0 | Bloqué | Bloqué | Notification uniquement |
| Kiro IDE | 1.55.0 | Détecté, non bloqué | Bloqué | Notification uniquement |
Là où la sortie est retenue, l'assistant lit le message ggshield à la place de la sortie de l'outil, de sorte que le secret n'atteint jamais le fournisseur de modèle et qu'il n'est pas nécessaire de procéder à sa rotation. Le message suggère plutôt comment garder le secret hors de la prochaine sortie, par exemple en le déplaçant vers un gestionnaire de secrets ou en ne partageant pas le fichier avec l'agent. La commande elle-même a tout de même été exécutée, donc tout effet qu'elle a eu sur vos systèmes, comme un appel d'API ou une entrée dans un journal d'accès, s'est tout de même produit. La rétention nécessite ggshield 1.55.0 ou ultérieur.
Ce qui reste sur le disque dépend de l'assistant. Claude Code écrit le message ggshield dans sa transcription de session à la place de la sortie. Codex et Mistral Vibe écrivent tout de même la sortie brute dans leurs propres fichiers de session, les fichiers de rollout sous ~/.codex/sessions/ et le journal de session Vibe, où aucun hook ne peut l'atteindre. Cette copie est locale, donc à elle seule elle ne justifie pas une rotation, mais supprimez le fichier de session si vous ne voulez pas que le secret y soit conservé en clair.
Là où seule une notification est possible, la sortie a déjà été fournie à l'assistant. Considérez le secret comme exposé et procédez à sa rotation.
Trois assistants nécessitent une remarque :
- Junie n'est pris en charge qu'en tant que Junie CLI. Junie au sein d'un IDE JetBrains fonctionne via ACP, qui n'invoque aucun hook, donc rien n'y est scanné.
- Kiro CLI ne lit la configuration du hook qu'en mode v3. Démarrez-le avec
kiro-cli --v3; les autres sessions prennent leurs hooks depuis la configuration de l'agent à la place et le hook installé ne s'applique pas. - Kiro IDE ne peut pas bloquer un prompt.
ggshielddétecte le secret, mais le prompt atteint tout de même le modèle. Considérez le secret comme exposé et procédez à sa rotation.
Pour la configuration outil par outil, l'apparence du message de blocage pour un développeur et la manière de gérer les faux positifs, consultez Scan de secrets pour les outils de codage IA.
Ce qu'un hook envoie
La détection se produit du côté de GitGuardian, donc le contenu de l'interaction est scanné par l'API, de la même manière que ggshield scanne un commit ou un push. Les hooks signalent également chaque appel d'outil MCP, avec le nom de l'outil et du serveur ainsi que les arguments transmis par l'agent. C'est ce qui alimente votre vue d'activité MCP et ce qui reporte la décision d'autorisation ou de refus à l'outil.
Les scans de machine fonctionnent dans l'autre sens et conservent la détection sur l'endpoint. Pour le détail complet des deux, consultez Traitement des données et confidentialité.
Déployer les AI Hooks sur l'ensemble de votre parc
Les hooks ne protègent une machine qu'une fois qu'ils y sont configurés, et demander à chaque développeur d'y adhérer laisse des lacunes précisément là où vous avez besoin de couverture. Déployez-les plutôt via votre MDM, aux côtés du reste d'Endpoint Protection.
Le scan nécessite un token chaque fois qu'un hook se déclenche, et comme les hooks s'exécutent dans la session du développeur lui-même plutôt que dans votre tâche MDM, ce token doit être celui du développeur. Injectez un token de compte de service admin à l'exécution pour installer les hooks, puis connectez le développeur afin que le hook scanne sous son appartenance : consultez l'étape 4 et l'étape 5.
Pour configurer une seule machine, exécutez une commande en tant qu'utilisateur connecté :
ggshield machine setup
machine setup configure le hook pour chaque assistant de codage IA qu'il détecte, et ignore ceux qui ne sont pas installés. Il installe également les hooks git pre-commit et pre-push et plante un honeytoken, alors ajoutez --no-git-hooks ou --no-honeytokens si vous voulez uniquement les AI Hooks. Pour sélectionner ou exclure des assistants spécifiques, utilisez --agent ou --exclude-agent avec l'un des claude-code, codex, copilot, cursor, junie, kiro, vibe et vscode.
machine setup nécessite ggshield 1.53.0 ou ultérieur. La version minimale du hook de chaque assistant est indiquée dans Ce que chaque assistant prend en charge. Sur les versions antérieures, installez un assistant à la fois avec ggshield install -t <assistant> -m global, ce qui fonctionne toujours mais est déprécié.
Vérifier que les hooks sont actifs
Sur une machine échantillon, en tant qu'utilisateur connecté, exécutez :
ggshield machine doctor
machine doctor est en lecture seule et indique, pour chaque assistant qu'il trouve sur la machine, si le hook est installé. Il vérifie également que le token atteint GitGuardian et porte les scopes dont vos protections ont besoin, et il se termine avec un code non nul si une vérification échoue, afin que vous puissiez l'exécuter comme script d'audit MDM. Chaque vérification échouée affiche sa propre correction.
Les deux volets de cette vérification sont importants. Comme les hooks échouent en mode ouvert (fail open), une machine avec des hooks installés mais sans identifiants fonctionnels apparaît au développeur comme une machine sans rien à bloquer, hormis l'avertissement indiquant que le contenu n'a pas été scanné.
Pour confirmer de bout en bout, collez un identifiant de test dans un prompt et vérifiez que l'outil affiche le message de blocage ggshield.
Revenir en arrière
Désactiver la tâche de configuration MDM empêche les nouvelles machines de recevoir des hooks, mais laisse en place les configurations déjà présentes sur le disque. Pour les supprimer, effacez les entrées ggshield de la configuration des hooks de l'outil :
| Outil | Configuration des hooks |
|---|---|
| Claude Code | ~/.claude/settings.json |
| Cursor | ~/.cursor/hooks.json |
| Codex | ~/.codex/hooks.json |
| Copilot CLI et VS Code | ~/.copilot/hooks/hooks.json |
| Mistral Vibe | ~/.vibe/hooks.toml |
| Kiro | ~/.kiro/hooks/ggshield.json |
| Junie | ~/.junie/config.json |