Comment un dépôt tiers peut détourner Claude Code : 7 règles de protection
MarkdownQuatre chemins d’injection indirecte documentés : dépôts, contenu GitHub, événements Sentry et métadonnées MCP, avec sources primaires et limites du confinement.
Lire l’article complet
L’essentiel
Les recherches publiées illustrent quatre chemins d’injection indirecte : instructions d’installation, contenu GitHub, télémétrie et métadonnées MCP. Elles datent de périodes différentes et portent sur divers clients et permissions. Voici les sources primaires et des mesures de confinement ; aucun fichier de réglages ne garantit l’immunité.
Documentation Ailoot : API, clés et configuration.
Quatre chemins documentés du texte non fiable aux actions de l’agent
L’essentiel
Ces recherches concernent plusieurs périodes et configurations, pas quatre découvertes en quinze jours. Elles montrent comment du contenu non fiable influence les outils ; défauts d’implémentation, identifiants disponibles et permissions déterminent le résultat.
Le terme formel est « injection indirecte de prompt » : une instruction malveillante ne vient pas directement de vous, mais des données que l’agent traite pendant une tâche — un README d’un tiers, un message d’erreur, un commentaire GitHub ou une réponse d’un service externe. Vous pouvez oublier ce terme dès la fin de ce paragraphe ; à partir de maintenant, j’emploierai des mots simples.
Quatre exemples de recherche présentés ci-dessous :
- Un dépôt à l’apparence inoffensive peut se transformer en shell inversé.
- Le titre d’une Pull Request a été montré comme pouvant détourner trois agents IA différents à la fois.
- Un agent a été montré comme pouvant accepter un faux rapport d’erreur Sentry à la place d’un vrai.
- Microsoft a lancé un avertissement sans détour : la description d’un outil MCP peut contrôler votre agent aussi efficacement qu’un prompt système.
Comment le README d’un dépôt inoffensif se transforme-t-il en shell inversé ?
L’essentiel
La preuve de concept 0DIN du 25 juin 2026 illustre ce scénario : vous clonez un dépôt ordinaire et l’agent suit ses instructions d’installation. Une erreur au premier lancement suggère une commande de « correction » qui résout en réalité l’enregistrement DNS de l’attaquant et lance un shell inversé. La source démontre la technique sans établir sa fréquence dans des incidents réels.
Le mécanisme est conçu de sorte qu’aucune étape prise isolément ne semble suspecte :
- Vous clonez un dépôt d’apparence ordinaire et demandez à Claude Code de l’exécuter.
- Le dépôt inclut un package Python conçu pour échouer lors de sa première utilisation.
- Le message d’erreur suggère poliment une commande de « correction » :
python3 -m axiom init. - La commande
initexécutesetup.sh. - Le script interroge un enregistrement DNS TXT (généralement utilisé pour des notes liées à un domaine, mais qui peut contenir n’importe quel texte). L’attaquant y place une commande encodée en base64 (un moyen de convertir n’importe quelles données en texte brut sans espaces ni caractères spéciaux) et l’envoie directement à bash.
- La valeur de l’enregistrement DNS peut être modifiée à tout moment, ce qui donne à l’attaquant un shell inversé interactif avec vos droits d’utilisateur et l’accès à tous les secrets de la machine.
La démonstration récupérait le payload final dans DNS à l’exécution : analyser seulement les octets du dépôt ne le révélait pas. Cela ne prouve pas tout scanner ou contrôle impuissant : contenu récupéré, surveillance des processus et restrictions réseau peuvent révéler ou interrompre la chaîne. La source est une preuve de concept, pas une mesure de fréquence d’incidents.
Comment un titre de Pull Request a-t-il détourné trois agents IA différents ?
L’essentiel
Le rapport Comment and Control, publié le 15 avril 2026 et actualisé le 4 mai, documente des injections GitHub distinctes dans Claude Code Security Review, Gemini CLI Action et Copilot Agent. Une baisse de gravité ne prouve pas la correction de toute la classe ; le rapport décrit réponses fournisseur et restriction précise de l’outil Claude.
Le rapport décrit ces chemins et réponses : c’est un historique de recherche, pas une vérification de toutes les versions actuelles :
| Agent | Comment l’attaque s’est introduite | Ce qui a été divulgué | Situation actuelle |
|---|---|---|---|
| Claude Code Security Review | Titre de PR inséré directement dans le prompt système sans neutralisation | ANTHROPIC_API_KEY, GITHUB_TOKEN | Le rapport indique restriction de ps et documentation modifiée ; gravité passée à None le 20 avril 2026 |
| Gemini CLI Action | Une fausse section « Trusted Content » dans un commentaire a contourné les consignes de sécurité | GEMINI_API_KEY | Google a ajouté des prompts de garde distincts au prompt système |
| GitHub Copilot Agent | Charge utile masquée dans un commentaire HTML invisible en Markdown | GITHUB_COPILOT_API_TOKEN, COPILOT_JOB_NONCE | GitHub considère qu’il s’agit d’une limite architecturale, pas d’un bug |
Près de cinq mois se sont écoulés entre le premier et le dernier rapport de ce cycle de divulgation (le premier rapport sur Claude Code date du 17 octobre 2025 ; le dernier correctif de bug de GitHub Copilot, du 9 mars 2026). Changement de gravité et mesures décrites ne prouvent pas la clôture de tous les payloads possibles. Le dépôt de preuve de concept documente le chemin Claude démontré ; n’exécutez pas ses charges d’attaque sur de vrais systèmes. Ce qui vous est utile, c’est le schéma d’attaque lui-même : des données GitHub non vérifiées parviennent à l’agent, celui-ci exécute des commandes, et les secrets sont divulgués par ce même GitHub — l’attaquant n’a pas besoin d’un serveur externe.
Deux analyses suffisent pour voir le schéma : il est impossible de corriger séparément chaque nouvelle découverte ; des vulnérabilités de ce type apparaissent toutes les deux semaines. Écrire explicitement les règles de sécurité dans CLAUDE.md et settings.json, au lieu de les garder en tête, fait partie de l’ingénierie du contexte : définissez-les une fois, et elles s’appliquent automatiquement à chaque nouvelle session Claude Code, sans rappel. Trois piliers fonctionnent ensemble : clone IA + Second Brain + ingénierie du contexte — cette combinaison transforme Claude Code, d’un exécuteur qui fait confiance à tout, en un agent doté de règles explicites.
Un faux rapport d’erreur Sentry peut-il prendre le contrôle de votre agent ?
L’essentiel
Un attaquant envoie un faux événement d’erreur à Sentry ; l’agent demande la liste des problèmes via MCP, reçoit l’événement malveillant parmi les entrées légitimes et exécute la commande qu’il contient comme une « étape de correction ». Le rapport Agentjacking de Tenet, actualisé le 17 juin 2026, annonce 85 % d’exploitation sur ses vagues contrôlées et plus de 100 exécutions, dont Claude Code, Cursor et Codex. Il cite une capture Claude Code 2-1-161 du 2 juin, sans liste complète des modèles, harnais reproductible, dénominateur exact ni détail par client. Les 85 % sont une observation agrégée du chercheur, pas la probabilité de compromission de toute installation actuelle.
Cette attaque ne nécessite rien d’autre qu’une clé DSN Sentry — un identifiant public que de nombreux projets incluent directement dans leur code côté client :
Le mécanisme est simple : un développeur demande à l’agent d’examiner les erreurs Sentry ouvertes ; l’agent les récupère via le serveur MCP, reçoit un événement malveillant mêlé aux événements réels et lit la commande qu’il contient comme une instruction de confiance pour corriger l’erreur — car, formellement, c’est bien la tâche qui lui a été confiée.
Tenet indique que les contrôles de ses environnements n’ont pas alerté. Cela ne prouve pas une absence universelle de traces : journaux d’agent et d’outils, télémétrie du poste et réseau peuvent enregistrer les actions. L’entrée vient de télémétrie externe, puis dépend des outils et droits effectifs.
Comment les métadonnées MCP peuvent-elles influencer l’agent ?
L’essentiel
Les métadonnées peuvent porter des instructions influentes sans acquérir automatiquement l’autorité d’un prompt système. MCPTox, soumis le 19 août 2025, évalue l’empoisonnement d’outils MCP réalistes et observe une sensibilité variable selon modèle et configuration.
La formulation de Microsoft est la plus précise que j’aie trouvée sur le sujet :
Cette technique, appelée empoisonnement d’outil, consiste à cacher une instruction dans la description d’un outil anodin pour amener l’agent à agir en conséquence.
L’observation de MCPTox selon laquelle certains modèles plus capables peuvent être plus sensibles appartient à ce benchmark ; ce n’est pas une loi universelle ni une mesure de protection de votre installation.
Qu’ont en commun ces attaques, et que peut manquer la détection ?
L’essentiel
Les quatre découvertes exploitent le même angle mort : l’agent ne distingue pas les « données à analyser » des « instructions à suivre ». Un scan du seul dépôt peut manquer des charges arrivant plus tard par outils ou réseau. La détection reste utile sur le chemin complet ; combinez-la avec limites de fichiers, identifiants, outils et réseau plutôt que compter sur la reconnaissance par l’agent.
La conclusion s’applique aux quatre découvertes : on ne peut pas se fier au fait que « le code semble normal » — chaque étape prise individuellement est effectivement inoffensive. Limitez les capacités effectives et inspectez les actions proposées ; détection et confinement visent différentes étapes.
Quelles protections Claude Code possède-t-il déjà, et pourquoi ne suffisent-elles pas ?
L’essentiel
Claude Code intègre des protections : il analyse l’ensemble du prompt pour repérer les instructions suspectes, utilise des fenêtres de contexte isolées pour le contenu Web, vérifie la confiance au premier lancement dans un nouveau dossier et lors de la connexion à des serveurs MCP. Mais l’option --dangerously-skip-permissions, utilisée par beaucoup pour désactiver les demandes d’autorisation agaçantes, désactive toutes ces protections à la fois.
Anthropic reconnaît directement le problème dans sa documentation, au lieu de le dissimuler :
L’injection de prompt est une technique par laquelle un attaquant tente de remplacer ou de modifier les instructions d’un assistant IA en insérant du texte malveillant. Claude Code intègre plusieurs protections contre ces attaques.
Selon la documentation, l’agent analyse l’ensemble du prompt pour repérer les instructions suspectes, n’approuve pas automatiquement curl et wget, garde le contenu Web dans une fenêtre de contexte distincte pour éviter de le mélanger au contexte principal, et demande une confirmation de confiance la première fois que vous le lancez dans une nouvelle base de code ou que vous connectez un nouveau serveur MCP.
Mais Anthropic énonce sans détour une réserve importante :
Le mode bypassPermissions ne protège pas contre l’injection de prompt ni contre les actions involontaires.
Si vous avez déjà lancé Claude Code avec --dangerously-skip-permissions par irritation, pour qu’il « arrête de poser des questions », vous avez désactivé précisément les mécanismes qui auraient pu arrêter les quatre attaques évoquées plus haut. Je laisse délibérément cette option désactivée, même lorsque Claude Code repose la question pour la dixième fois au cours d’une session : c’est agaçant, mais ces questions forment la frontière entre « l’agent a lu un texte suspect » et « l’agent l’a exécuté ». Pour une personne qui ne programme pas, une configuration raisonnable consiste à utiliser le mode d’autorisation standard (default ou acceptEdits) avec la sandbox activée : les modifications ordinaires de fichiers s’effectuent sans question supplémentaire, tandis que les commandes du terminal ne peuvent physiquement pas sortir de la sandbox, même si l’agent a été piégé.
Comment activer le mode sandbox et combler la lacune qu’il laisse ouverte par défaut ?
L’essentiel
La commande /sandbox dans une session Claude Code limite les emplacements où l’agent peut écrire et les domaines qu’il peut contacter. Elle fonctionne directement sous macOS ; sous Linux et WSL2, les packages bubblewrap et socat sont nécessaires. Un point important : par défaut, la sandbox n’empêche pas la lecture de fichiers tels que ~/.ssh — vous devez activer cette restriction séparément.
Pour l’activer définitivement dans tous les projets, apportez une modification à ~/.claude/settings.json :
{
"sandbox": { "enabled": true }
}
Par défaut, les commandes dans la sandbox ne peuvent écrire que dans le répertoire de travail du projet et le répertoire temporaire de la session. L’accès réseau passe par un proxy : aucun domaine n’est autorisé à l’avance, et Claude Code demande confirmation lorsqu’il contacte un nouveau domaine pour la première fois. Anthropic indique que cela réduit fortement les demandes d’autorisation — de 84 % selon les mesures internes de l’entreprise — car la sandbox traite elle-même certains cas sûrs au lieu de vous demander confirmation à chaque fois.
La lacune des paramètres standard : par défaut, la sandbox restreint l’écriture, mais n’empêche pas la lecture de fichiers tels que ~/.aws/credentials et ~/.ssh. Ces fichiers et variables d’environnement peuvent être ciblés dans des attaques par injection. Comblez cette lacune en ajoutant un bloc distinct dans le même fichier :
{
"sandbox": {
"enabled": true,
"credentials": {
"files": [
{ "path": "~/.aws/credentials", "mode": "deny" },
{ "path": "~/.ssh", "mode": "deny" }
],
"envVars": [
{ "name": "GITHUB_TOKEN", "mode": "deny" },
{ "name": "NPM_TOKEN", "mode": "deny" }
]
}
}
}
L’idée est que, même si le shell inversé de la première analyse s’ouvre dans la sandbox, ces variables et fichiers sont physiquement retirés de l’environnement du processus avant son démarrage : il ne reste rien à voler.
Quelles règles permissions.deny ajouter dès aujourd’hui ?
L’essentiel
permissions.deny dans settings.json bloque des actions précises au niveau des règles, au lieu d’analyser l’intention — et Anthropic garantit explicitement qu’une règle deny a toujours priorité sur une règle allow. Les deny restreignent les actions d’outil correspondantes sans constituer une barrière OS ; commandes indirectes et autres outils nécessitent leurs propres contrôles.
Un ensemble minimal pour une personne qui ne programme pas et qui couvre d’un coup les principales cibles des quatre attaques :
{
"permissions": {
"deny": [
"Read(~/.ssh/**)",
"Read(~/.aws/credentials)",
"Read(.env)",
"Bash(curl *)",
"Bash(wget *)",
"Bash(sudo *)"
]
}
}
Selon la documentation de Claude Code, les règles deny ont toujours priorité sur les règles allow. Ainsi, même si vous (ou l’agent lui-même) autorisez accidentellement un accès plus large ailleurs, une règle deny précise s’applique en premier. Cette priorité vise les requêtes d’outil correspondantes. Elle ne prouve pas qu’un secret est inaccessible à tout sous-processus ou outil ; imposez aussi des restrictions de fichiers et d’environnement.
Claude Code propose aussi un mode auto, dans lequel un modèle de classification distinct vérifie les actions avant leur exécution — ce n’est pas le même modèle que celui qui converse avec vous. Par défaut, il bloque notamment le schéma « télécharger du code et l’exécuter immédiatement » (curl | bash). Anthropic avertit explicitement qu’il s’agit d’un mode de recherche qui réduit le nombre de demandes, mais ne garantit pas la sécurité à lui seul : considérez-le comme une couche supplémentaire, et non comme un remplacement de la sandbox et de permissions.deny.
Comment vérifier un dépôt et un serveur MCP avant de les confier à votre agent ?
L’essentiel
Avant de demander à Claude Code d’exécuter un dépôt tiers, vérifiez son ancienneté, l’historique de ses commits et l’origine du lien. Avant d’installer un serveur MCP, utilisez uniquement des sources fiables et gardez à l’esprit qu’Anthropic ne vérifie pas elle-même la sécurité des serveurs tiers. Ces deux listes de vérification prennent quelques minutes et couvrent précisément les points d’entrée utilisés dans les quatre attaques abordées ici.
Pour les dépôts, voici une courte liste de vérification avant de les confier à l’agent :
- Ne passez pas directement à l’installation depuis un lien reçu dans un e-mail, un article ou un avis provenant d’une source inconnue.
- Si l’installation produit une erreur accompagnée de l’instruction « exécuter la commande X pour corriger le problème », vérifiez ce que fait réellement X avant d’autoriser Claude Code à l’exécuter. L’instruction semblait tout à fait habituelle — c’était justement le but.
- Vérifiez l’ancienneté du dépôt et l’historique de ses commits, pas seulement le nombre d’étoiles : il est facile d’attribuer de fausses étoiles à des dépôts nouvellement créés.
- Si le dépôt ne vous est pas familier, effectuez l’installation dans une machine virtuelle, et non sur votre ordinateur de travail avec de vraies clés. C’est la recommandation directe d’Anthropic pour travailler avec des services externes.
La position d’Anthropic sur les serveurs MCP est clairement énoncée :
Nous recommandons d’écrire vos propres serveurs MCP ou d’utiliser ceux de fournisseurs auxquels vous faites confiance. Anthropic vérifie que les connecteurs respectent ses critères d’inscription avant de les ajouter à l’annuaire, mais ne réalise aucun audit de sécurité et n’exploite aucun serveur MCP.
Cela signifie que la vérification des serveurs MCP tiers vous incombe, et non à la plateforme sur laquelle vous les avez installés. Certaines équipes — principalement des startups spécialisées en sécurité — développent déjà des outils pour cela : des scanners de configuration MCP qui repèrent les descriptions empoisonnées et le « pinning » des outils, qui enregistre le hash de la description lors de la première installation et signale tout changement ultérieur. Ces technologies sont récentes ; il est donc trop tôt pour s’y fier comme unique protection. Elles méritent toutefois d’être suivies, surtout si vous connectez des serveurs MCP à la production. Pour ces connexions, vous pouvez épingler chaque version de package et enregistrer l’empreinte des descriptions d’outils dans un journal d’audit.
7 règles de protection : la liste de vérification du jour
L’essentiel
Tout ce guide se résume à sept actions concrètes : trois modifications dans un fichier settings.json (sandbox, identifiants, permissions.deny) et quatre habitudes à adopter avec le code, les erreurs et les serveurs MCP d’autres personnes. Aucune connaissance particulière n’est nécessaire — la liste entière prend moins de 20 minutes.
- Activez le mode sandbox (
/sandboxou"sandbox": {"enabled": true}dans~/.claude/settings.json) et ajoutez un bloccredentialsqui empêche la lecture de~/.sshet de~/.aws/credentials. - Ajoutez des règles
permissions.denypour la lecture des fichiers secrets et les commandes bash dangereuses (curl,wget,sudo) : une règle deny a toujours priorité sur une règle allow. - N’utilisez jamais
--dangerously-skip-permissionsavec du code tiers ou non vérifié : cette option désactive toutes les protections à la fois, y compris celles qui auraient pu arrêter précisément ces attaques. - Ne laissez pas Claude Code exécuter automatiquement une commande de « correction » provenant d’un message d’erreur : vérifiez d’abord ce qu’elle fait réellement.
- Installez des serveurs MCP uniquement à partir de sources auxquelles vous faites confiance, et rappelez-vous qu’Anthropic ne vérifie pas leur sécurité à votre place.
- Séparez les sessions selon leurs autorisations : l’une travaille avec vos données personnelles et ne voit aucune donnée externe ; une deuxième examine les e-mails, dépôts et tickets d’autres personnes, mais n’a pas accès aux secrets ; une troisième publie à l’extérieur — et uniquement ce que vous avez personnellement approuvé. Je maintiens cette séparation stricte dans mes propres projets : une session qui a accès aux clés de paiement ne lit jamais des tickets ou dépôts externes quelconques, et une session qui analyse le code d’autres personnes ne voit aucun secret. Ne mélangez pas ces rôles dans un même chat.
- Maintenez Claude Code et les scripts d’automatisation connectés à jour : la plupart des lacunes évoquées ici avaient déjà été corrigées par des correctifs au moment de la publication de ce guide, et les nouvelles sont corrigées de la même manière.
Que faire ensuite
Aucune de ces couches n’offre de garantie : Anthropic reconnaît elle-même franchement qu’aucune protection n’assure une immunité complète. Je ne m’attends pas à ce que Claude Code reconnaisse de lui-même un piège dans un message d’erreur ou un commentaire d’issue. Pour moi, la sandbox et permissions.deny font partie de la gestion du contexte de projet : ce que l’agent voit, ce qu’il considère par défaut comme fiable et ce qui se passe lorsqu’il commet une erreur.
Sources
- 0DIN : dépôt piégé et exécution distante, 25 juin 2026
- Comment and Control : injections GitHub, 15 avril 2026, actualisé le 4 mai
- Tenet Threat Labs : Agentjacking, actualisé le 17 juin 2026
- MCPTox : benchmark primaire d’empoisonnement d’outils
- Documentation Claude Code – Modes d’autorisation
- Anthropic Engineering – Mise en sandbox de Claude Code
- Documentation Claude Code – Autorisations
- Documentation Claude Code – Bonnes pratiques de sécurité
- Documentation Claude Code – Model Context Protocol (MCP)
- Analyse d’une vulnérabilité connexe dans la GitHub Action de Claude Code
- Comment configurer Claude Code pour qu’il ne casse pas votre projet pendant la nuit
- Serveurs MCP de Claude Code : 7 configurations prêtes à l’emploi et installation pas à pas
- Sécurité du vibe coding : comment empêcher le piratage de votre application créée par IA
Si vous avez besoin d’accéder aux réseaux neuronaux via Ailoot, découvrez Ailoot.
Plus de détails
Questions fréquentes : Claude Code et dépôts malveillants : sept protections
Les 85 % publiés prédisent-ils le risque de mon installation ?
Non. C’est l’agrégat Tenet de vagues contrôlées, sans liste complète des modèles, harnais reproductible ou nombre exact d’essais. Outils, approbations, identifiants et réseau déterminent les actions possibles dans votre installation.
Pourquoi le scan du seul dépôt cloné ne suffit-il pas ?
Le payload final peut arriver ensuite dans une erreur, des métadonnées d’outil ou du contenu DNS. Inspectez tout le chemin et limitez identifiants, fichiers, outils et réseau ; scanners et deny seuls ne prouvent pas le confinement complet.