Contexte et découverte
Air Security a identifié une faille affectant quatre agents de codage assisté par IA : Anthropic Claude Code, OpenAI Codex, GitHub Copilot et Google Gemini CLI. Le problème réside dans la façon dont ces agents récupèrent les plugins depuis des dépôts Git. Chaque marketplace verrouille un plugin à un commit hash précis, censé garantir que le code installé correspond exactement à la version révisée. Air a démontré que les agents téléchargent le snapshot indiqué mais ne valident jamais que le contenu reçu correspond réellement à ce hash.
La recherche a été menée en mai 2026, les fournisseurs ont été informés en juin, et au 18 septembre 2026 aucun identifiant CVE n’était attribué et aucune advisory officielle n’était publiée.
Mécanisme d’échange de code
Le vecteur d’attaque exploite la possibilité, sur certains hébergeurs Git, de créer une branche dont le nom ressemble à un commit SHA‑1 (par ex. e3b0c44298fc1c149afbf4c8996fb924). Un propriétaire de dépôt peut alors rediriger ce nom de branche vers un commit différent. L’agent, en demandant le hash, interprète la chaîne comme une branche et télécharge le code de la branche, tout en affichant le même hash dans le rapport d’installation.
GitHub interdit les noms de branche ou de tag qui ressemblent à des hashes, ce qui neutralise le vecteur sur les dépôts hébergés par GitHub. En revanche, Bitbucket, GitLab auto‑hébergé ou tout serveur Git permissif accepte ces noms, rendant les dépôts externes vulnérables. Le Gemini CLI subit une variante : son installateur accepte un dépôt dont la branche principale s’appelle FETCH_HEAD, contournant la règle GitHub et permettant le même détournement.
État des correctifs et recommandations
Anthropic a publié le correctif dans Claude Code 2.1.179 ; OpenAI a intégré la mitigation dans Codex 0.146.0. Aucun correctif n’est disponible pour GitHub Copilot, et Google a indiqué qu’il ne corrigerait pas le Gemini CLI, qui a d’ailleurs été retiré du marché grand public au profit de l’agent Antigravity.
Les deux agents corrigés activent par défaut la mise à jour automatique des plugins, ce qui peut remplacer silencieusement un plugin de confiance si le dépôt externe a été compromis. Cette fonction est désactivée ou optionnelle pour les marketplaces tierces, selon la documentation d’Anthropic et de GitHub. Les utilisateurs doivent donc désactiver l’auto‑mise à jour lorsqu’ils installent des plugins depuis des dépôts non‑GitHub, ou vérifier manuellement les hashes après chaque mise à jour.
En l’absence de correctif côté marketplace, la responsabilité revient aux développeurs d’agents : ils doivent implémenter une vérification du hash côté client, comparer le SHA‑1 du contenu reçu avec le hash déclaré, et refuser l’installation en cas de divergence. Les organisations qui hébergent leurs propres dépôts doivent interdire les noms de branche ressemblant à des hashes dans leurs politiques Git.