📑 Table des matières

Plugin4Shell : la zero-click RCE qui a traversé Claude Code, Codex, Copilot et Gemini CLI — et les deux éditeurs qui n'ont jamais patché

Agents IA 🟢 Débutant ⏱️ 17 min de lecture 📅 2026-09-20

Plugin4Shell : la zero-click RCE qui a traversé Claude Code, Codex, Copilot et Gemini CLI — et les deux éditeurs qui n'ont jamais patché

🔎 Quatre agents, une faille, deux silences

Le 17 septembre 2026, le labo de sécurité AIR a publié la divulgation de Plugin4Shell : une zero-click RCE qui touche simultanément Claude Code, Codex, GitHub Copilot et Gemini CLI, les quatre agents de code les plus déployés au monde. The Register relaie l'information le jour même, Help Net Security et la presse spécialisée suivent les 18 et 19 septembre.

Le mécanisme est d'une élégance glaçante : une simple branche git nommée comme un hash de commit suffit à détourner l'installation d'un plugin, pendant que l'agent rapporte une installation « clean ». Pas de clic, pas de prompt, pas d'alerte. L'auto-update des plugins fait le travail pour l'attaquant.

Et le bilan des patchs est inégal — c'est le vrai scandale de l'histoire. Anthropic a corrigé Claude Code en 2.1.179 dès le 17 juin 2026. OpenAI a corrigé Codex en 0.146.0. Google a déprécié Gemini CLI sans jamais le patcher. Microsoft, informé en juin, n'a livré aucun correctif pour Copilot au moment de la divulgation.

Cette faille ne dit rien de la qualité des modèles. Elle dit tout de la maturité de la chaîne de distribution des agents — et c'est le sujet de cet article : comment ça marche, qui a patché, qui a fuité, et quoi faire ce matin.


L'essentiel

  • Plugin4Shell : une zero-click RCE divulguée par AIR Security le 17 septembre 2026, qui touche les plugins de Claude Code, Codex, GitHub Copilot et Gemini CLI.
  • Le mécanisme : git résout une branche nommée exactement comme le SHA épinglé de préférence au commit lui-même. Le checkout atterrit ailleurs pendant que l'agent rapporte une installation « clean ».
  • Zero-click : Claude Code et Codex auto-update les plugins en arrière-plan par défaut. Le plugin tourne avec les permissions de l'agent — code source, credentials cloud, clés SSH, parfois la prod.
  • Patchs : Claude Code 2.1.179 (fix confirmé le 17/06/2026) et Codex 0.146.0 (vérifié le 12/08/2026). Gemini CLI : déprécié, jamais patché. Copilot : aucun correctif au 19/09/2026.
  • Contexte : AIR avait déjà documenté 925 skills détournés touchant ~134 000 agents (SkillJacking). Plugin4Shell est la deuxième faille d'agent majeure de septembre, après GitSpawn.
  • Le fix tient en une ligne dans l'agent : vérifier le commit réellement présent dans le working tree après checkout. Aucune marketplace ne peut le faire à sa place.

Outils recommandés : le statut au 19 septembre 2026

Agent Éditeur Statut Plugin4Shell Correctif Action recommandée
Claude Code Anthropic ✅ Patché 2.1.179 (fix confirmé le 17/06/2026) Mettre à jour immédiatement
Codex OpenAI ✅ Patché 0.146.0 (« Verify Git plugin SHA checkouts », vérifié le 12/08/2026) Mettre à jour immédiatement
GitHub Copilot Microsoft ❌ Non patché Aucun Retirer les plugins non essentiels, verrouiller les permissions
Gemini CLI Google ⚠️ Déprécié, non patché Aucun (Google confirme le 04/08/2026 qu'aucun fix ne sortira) Migrer vers Antigravity ou geler l'existant
OpenCode Communauté Non cité dans la divulgation AIR Alternative open source auditable

Sources : Pondero (19/09/2026), AI Weekly (19/09/2026), The Hacker News (18/09/2026), Help Net Security (18/09/2026).

Un tableau de statut, pas un classement : la seule métrique qui compte ce mois-ci, c'est « ai-je le patch ? ». Si tu dois (re)choisir un agent de code, croise ce tableau avec notre comparatif des meilleurs outils IA pour le code.


Le mécanisme : git préfère une branche à un hash

Réponse directe : Plugin4Shell détourne le checkout git en faisant résoudre un SHA de commit comme un nom de branche. L'agent vérifie le pin, mais jamais le résultat du checkout.

Commençons par ce qui devrait fonctionner. Quand tu installes un plugin dans Claude Code, Codex, Copilot ou Gemini CLI, l'installation est épinglée sur un commit précis : un SHA de 40 caractères hexadécimaux. L'agent vérifie que ce SHA correspond à ce qui est déclaré. Jusqu'ici, la chaîne de confiance tient.

Là où elle casse : l'agent ne vérifie jamais que le checkout a réellement atterri sur ce commit. C'est le point clé de la divulgation d'AIR Security — un « first-of-its-kind AI supply-chain attack » qui ne cible ni le modèle, ni l'agent lui-même, mais la couche de distribution : les marketplaces de plugins.

L'attaque tient en une manipulation. L'attaquant contrôle le repo du plugin. Il crée une branche dont le nom est exactement le SHA épinglé — 40 caractères hexadécimaux, un nom de branche parfaitement valide. Au moment du checkout, git résout la référence : un ref est toujours préféré à un object id. Le checkout part donc sur la branche de l'attaquant, pas sur le commit épinglé. Le seul signal d'alerte est un warning que personne ne lit : « refname is ambiguous ».

Résultat : le code malveillant s'exécute pendant que le pin paraît respecté. L'agent rapporte une installation clean. The Hacker News cite la propre description d'OpenAI : « Git can interpret a requested commit SHA as a branch name ».

Deux conditions limitent l'exploitation : l'hôte doit autoriser une branche nommée comme un hash, et cette branche doit être la branche par défaut du repo. Contraignant sur le papier — sauf que l'attaquant qui contrôle le repo contrôle aussi sa branche par défaut.

La variante Gemini CLI : FETCH_HEAD

Gemini CLI n'emprunte pas exactement le même chemin. Sa séquence clone/fetch/checkout FETCH_HEAD ouvre une variante distincte : la branche par défaut du repo peut être nommée FETCH_HEAD et gagner le checkout au même titre (The Hacker News, Help Net Security). Même défaut de conception, deux portes d'entrée.

Le correctif tient en une ligne

Et c'est là que l'histoire devient presque absurde. Le fix recommandé par AIR tient en une assertion :

test "$(git rev-parse HEAD)" = "<pinned-sha>" || abort

Résoudre le commit réellement présent dans le working tree après le checkout, et aborter s'il diffère du SHA épinglé. C'est la forme exacte du correctif livré par Anthropic et OpenAI, confirmée par Pondero. La leçon tient en une phrase : le pin vérifie une intention, le working tree est une réalité. Quatre équipes ont confondu les deux.

Dernier point, pour ceux qui chercheraient du côté des modèles : Plugin4Shell ne touche ni le modèle ni le prompt. Que ton agent tourne avec Claude Opus 4.7, GPT-5.5 ou un modèle self-hosté comme Kimi K2.6 ne change strictement rien — c'est la couche de distribution qui est attaquée. Notre comparatif des meilleurs LLM pour coder reste pertinent pour choisir un modèle, il ne protège en revanche d'aucun checkout détourné.


Pourquoi « zero-click » change tout

Réponse directe : parce que la victime ne fait rien. Claude Code et Codex auto-update les plugins installés en arrière-plan par défaut — le payload s'exécute sans clic, sans prompt, sans consentement.

C'est ce détail qui transforme un bug de git en campagne potentielle. Sur Claude Code et Codex, la mise à jour automatique des plugins installés est activée par défaut. Le scénario d'attaque le plus simple — un plugin bénin remplacé après coup — n'exige donc aucune action de la victime : l'agent va chercher lui-même le code détourné.

Et un plugin, ça a les mains libres. Il tourne avec les permissions de l'agent : accès au code source, aux credentials cloud, aux clés SSH, aux repos internes, parfois à la production (StartupFortune, 18/09/2026). The Register résume l'enjeu : les attaquants obtiennent « les clés du royaume » — tout ce que l'agent peut atteindre.

Help Net Security va plus loin : l'agent compromis dispose du même accès qu'un employé aux systèmes de l'entreprise. InfoWorld ajoute les systèmes cloud et CI/CD à la liste. La surface d'attaque n'est pas ton poste de dev : c'est l'identité opérationnelle de l'agent, avec tout ce qu'elle touche.

Un développeur qui installe un plugin vérolé, c'est un incident. Des milliers d'agents qui auto-update un plugin détourné, c'est une campagne. Cette différence d'échelle est le vrai sujet.


Deux scénarios d'attaque, un écosystème déjà criblé

Réponse directe : deux portes d'entrée, toutes deux déjà démontrées par AIR dans ses travaux antérieurs — le plugin bénin remplacé et le repo d'un auteur légitime détourné.

Scénario 1 : le plugin bénin remplacé

Un auteur soumet un plugin légitime à une marketplace. Il accumule la confiance, les installations, les pins. Puis il remplace le code dans le repo. Les agents qui auto-update suivent — pin compris, vérification du checkout absente.

Scénario 2 : le repo d'un auteur légitime détourné

L'attaquant prend le contrôle du repo d'un auteur de confiance et pousse la branche au nom du SHA épinglé. AIR avait déjà démontré ce pattern avec SkillJacking et RepoJacking, rappelle The Register, qui cite les chercheurs Or Nevo, Dor Granat et Niv Hoffman.

Les précédents chiffrés donnent la mesure

AIR n'arrive pas de nulle part. Dans SkillJacking, le labo avait documenté 925 skills déjà en usage actif détournés, atteignant 134 000 agents (AI Weekly, 19/09/2026). Dans « The Story of Skills », un seul skill malveillant suffisait à contrôler plus de 26 000 agents. Et le cas du compte re-registré hexiaochun, derrière seedance2-api et ses 11 483 installations, montre que la provenance affichée d'un plugin ne vaut rien.

Septembre 2026, la goutte d'eau

Plugin4Shell est la deuxième grosse histoire de sécurité d'agent du mois seulement (Pulse of Nations). Début septembre, Manifold Security publiait GitSpawn : la config git du repo lui-même nomme une commande exécutée par l'agent au démarrage de session, avec un payload déclenché avant même le workspace-trust prompt sur plusieurs agents.

Avant ça : AgentJacking, où une fake bug report suffisait pour pirater Claude Code, Cursor et Codex — 2 388 organisations touchées, 85 % de taux de réussite (notre analyse ici). Et les agents d'OpenAI avaient attaqué RubyGems avant le hack de Hugging Face — un précédent de supply chain que nous couvrons .

Pendant ce temps, GreyNoise révélait la première campagne mondiale d'exploits générés par des agents (notre article). La boucle est bouclée : les agents sont à la fois la cible et l'arme.


Le bilan des patchs : deux correctifs, une abdication, un silence

Réponse directe : au 19 septembre 2026, Anthropic et OpenAI ont patché. Google a déprécié Gemini CLI sans le corriger. Microsoft n'a livré aucun correctif pour Copilot.

Rappel du calendrier d'abord : AIR a rapporté la faille aux quatre éditeurs en juin 2026, dans le cadre d'une divulgation responsable de 90 jours (byteiota). La divulgation publique est tombée le 17 septembre, à la fin de la fenêtre. Chacun a donc eu trois mois.

Anthropic : patché dans Claude Code 2.1.179

Le fix d'Anthropic est confirmé le 17 juin 2026 (Pondero) — dans le mois qui a suivi le rapport aux éditeurs. Et conformément au constat d'AIR, la correction vit dans l'agent, pas dans la marketplace : aucune marketplace ne peut fermer la faille à la place de l'agent (The Hacker News).

OpenAI : patché dans Codex 0.146.0

OpenAI a décrit publiquement le bug — « Git can interpret a requested commit SHA as a branch name » — et livré le correctif « Verify Git plugin SHA checkouts » dans Codex 0.146.0, vérifié corrigé le 12 août 2026 (The Hacker News, Pondero).

Google : déprécié, jamais patché

Le 4 août 2026, Google confirme qu'aucun fix ne sortira pour Gemini CLI (AIR Security). La réponse officielle : migrer vers Antigravity, qui n'implémente pas le même modèle de SHA-pinning (Pondero). AIR conteste l'idée qu'Antigravity « élimine » le risque : les marketplaces peuvent vivre sur plusieurs plateformes d'hébergement (In Plain English).

Nuance importante de andrew.ooo (19/09/2026) : le package npm de Gemini CLI n'est PAS marqué deprecated et a encore publié la version 0.60.0 le 15 septembre 2026, avec des nightlies jusqu'au 18 septembre. Le « retired » concerne l'entitlement consommateur — le cutover du 18 juin 2026 vers Antigravity — pas la publication de builds vulnérables. Conséquence : chaque installation existante reste exposée indéfiniment (Help Net Security).

Microsoft : le silence

Microsoft a reçu la divulgation en juin 2026 et n'a rien livré au moment de la publication, selon les chercheurs (In Plain English, Pondero). Aucune mitigation officielle, à part retirer les plugins. Copilot reste exposé, y compris via des marketplaces hébergées hors GitHub, comme Bitbucket.

L'enjeu est d'échelle. Microsoft chiffre l'usage de Copilot à environ 90 % du Fortune 500 (chiffre rapporté par The Register) ; GitHub avance environ 90 % du Fortune 100 (rapporté par StartupFortune). Les deux périmètres divergent — nous les attribuons donc chacun à sa source — mais le constat converge : l'agent non patché est aussi le plus déployé dans les grandes entreprises.

GitHub a fermé une porte, pas le couloir

GitHub répond qu'il empêche désormais la création de branches et tags ressemblant à des SHA de commit : l'exploitation est bloquée côté GitHub (The Register). AIR réplique que ce n'est pas suffisant : les marketplaces de plugins peuvent être hébergées ailleurs, Bitbucket en tête. Un pin sur un repo Bitbucket reste exploitable tel quel.


La vraie leçon : la chaîne de confiance des écosystèmes d'agents

Réponse directe : le SHA-pinning n'a jamais été une garantie d'intégrité — seulement une intention déclarée. Et quatre équipes indépendantes ont construit le même défaut sans le voir.

C'est le détail qui devrait inquiéter plus que la faille elle-même. Le même défaut de conception a été construit par quatre équipes indépendantes, et aucune ne l'a attrapée avant un labo externe (StartupFortune). Ce n'est pas une maladresse isolée : c'est un angle mort structurel de la catégorie.

Le pattern est le même partout en 2026 : la confiance repose sur le nom, la provenance ou une version déclarée — trois signaux que rien ne vérifie réellement, comme le résume l'analyse française de Pandia.pro. Le pin dit ce que l'agent devait installer. Rien ne dit ce qu'il a installé.

Pendant ce temps, l'écosystème de plugins devient riche — et c'est précisément ce qui le rend attaquable. Un plugin comme Understand-Anything, qui transforme n'importe quel codebase en graphe de connaissances interactif, montre la puissance du modèle : un tiers lit tout ton code, avec les droits de l'agent. Cette puissance est exactement la surface d'attaque.

Côté entreprise, la gouvernance commence à rattraper : AIUC vient de lever 55 M$ pour imposer un SOC 2 aux agents IA, avec 5 000 tests de jailbreak à l'appui (notre article). Le postulat est le bon : un agent est un tiers privilège, pas une fonctionnalité.

Et en attendant, les défenses possibles — contrôles de plugins, miroirs internes — réduisent le risque sans corriger la faille, qui relève de l'éditeur, comme le résume l'analyste Pareekh Jain (Pareekh Consulting) dans InfoWorld.


Comment te protéger aujourd'hui

Réponse directe : patche Claude Code et Codex, vérifie tes checkouts, et traite chaque plugin installé comme un tiers privilège. Sur Copilot et Gemini CLI, aucun patch n'existe : la réduction de surface est ta seule option.

1. Patche, puis vérifie la version

Claude Code ≥ 2.1.179, Codex ≥ 0.146.0. Vérifie ce qui tourne réellement chez toi :

claude --version
codex --version

2. Vérifie le working tree, pas le pin

Si tu épingles des plugins toi-même, intègre la vérification d'AIR dans ton pipeline :

test "$(git rev-parse HEAD)" = "<pinned-sha>" || abort

Sur un agent patché, ce contrôle est désormais automatique. Sur un agent non patché, c'est ta seule ligne de défense technique.

3. Fais l'inventaire de tes plugins

Sur Copilot et Gemini CLI, la seule mitigation documentée côté utilisateur est de retirer les plugins non essentiels (Pondero). Fais l'inventaire de ce qui est installé, et supprime tout ce qui n'a pas de raison d'exister.

4. Réduis la blast radius

Les recommandations de Pandia.pro tiennent en cinq points : jetons à durée courte, comptes dédiés, permissions minimales, journalisation des commandes et des téléchargements, révocation des clés accessibles à l'agent. Rien de sexy — tout d'efficace.

5. Miroirs internes : reprends le dernier mot

InfoWorld cite les miroirs internes de plugins comme défense d'entreprise : héberger sur une infra que tu contrôles les seuls plugins que tu autorises. Un simple VPS auto-hébergé (Hostinger, tarifs à vérifier sur hostinger.com) suffit pour un miroir git d'équipe. Ça ne corrige pas la faille — ça te rend le dernier mot sur ce qui entre dans ton environnement.

6. Privilégie ce que tu peux auditer

Si l'auditabilité prime, les agents open source ont un avantage structurel : OpenCode revendique 8 millions de devs et 172 000 étoiles GitHub, et son code se lit. Certaines équipes font aussi tourner des agents IA open source en local avec Ollama — en gardant en tête que localiser l'agent ne corrige pas un défaut de checkout : le pattern « je fais confiance au pin sans vérifier le working tree » est reproductible par n'importe quel agent.

Pour choisir un agent en connaissance de cause, croise notre comparatif des meilleurs outils IA pour le code avec le tableau de statut plus haut — et le statut de patch de chaque éditeur.


❌ Erreurs courantes

Erreur 1 : « Je suis sur GitHub, donc je suis protégé »

GitHub bloque désormais les branches et tags ressemblant à des SHA (The Register). Mais les marketplaces de plugins peuvent être hébergées sur Bitbucket ou ailleurs — et les agents les supportent (In Plain English). Le blocage de GitHub ferme une porte, pas le couloir. La correction, elle, doit vivre dans l'agent.

Erreur 2 : « Le SHA-pinning garantit l'intégrité »

Non. Le pin vérifie l'intention — ce que tu as épinglé — pas le résultat — ce qui a atterri dans le working tree. Plugin4Shell est la démonstration par l'absurde : le pin paraît respecté pendant que le code malveillant s'exécute. Vérifie toujours git rev-parse HEAD après un checkout épinglé.

Erreur 3 : « Gemini CLI est retiré, donc plus de problème »

Faux. Le package npm n'est pas marqué deprecated et a publié la 0.60.0 le 15 septembre 2026 (andrew.ooo). Le « retired » concerne l'entitlement consommateur, pas les builds. Chaque installation existante reste exposée indéfiniment (Help Net Security).

Erreur 4 : « C'est un problème de modèle, changeons de LLM »

Aucun rapport. La faille ne touche ni le modèle ni le prompt, mais la couche de distribution des plugins. Passer au meilleur LLM pour coder de notre comparatif (meilleurs LLM pour coder) ne changera rien au checkout. C'est l'agent qu'il faut patcher — ou remplacer.


❓ Questions fréquentes

Qu'est-ce que Plugin4Shell ?

Une zero-click RCE divulguée par AIR Security le 17 septembre 2026, qui touche les plugins de Claude Code, Codex, GitHub Copilot et Gemini CLI. Elle détourne le checkout git via une branche nommée exactement comme le SHA épinglé. Le code malveillant s'exécute avec les permissions de l'agent, sans aucune action de la victime.

La faille est-elle activement exploitée ?

Aucune campagne d'exploitation n'était associée à la divulgation au 19 septembre 2026, et aucun CVE n'était attribué (andrew.ooo). Mais les travaux antérieurs d'AIR — 925 skills détournés touchant environ 134 000 agents — montrent que le pattern d'attaque est déjà industrialisé. L'absence de preuve publique n'est pas une preuve d'absence.

GitHub Copilot a-t-il été patché ?

Non. Microsoft a reçu la divulgation en juin 2026 et n'a livré aucun correctif au 19 septembre 2026, selon les chercheurs et Pondero. La seule mitigation documentée est de retirer les plugins. Copilot reste exposé, y compris via des marketplaces hébergées hors GitHub, comme Bitbucket.

Gemini CLI sera-t-il corrigé ?

Non. Google a confirmé le 4 août 2026 qu'aucun fix ne sortirait et conseille de migrer vers Antigravity. Mais le package npm continue d'être publié — 0.60.0 le 15 septembre 2026 — et les installations existantes restent vulnérables indéfiniment, puisque le fix doit obligatoirement vivre dans l'agent.

Comment vérifier que mon checkout est sain ?

Compare le SHA épinglé au commit réellement présent dans le working tree : test "$(git rev-parse HEAD)" = "<pinned-sha>" || abort. C'est la vérification recommandée par AIR, celle qu'Anthropic et OpenAI ont implémentée dans leurs agents. Sur une version patchée de Claude Code ou Codex, le contrôle est automatique.

Faut-il arrêter d'utiliser des agents de code ?

Non, mais change de modèle mental : un agent est un tiers privilège avec accès au code, aux credentials et parfois à la production. Patche, limite les permissions, journalise, retire les plugins non essentiels. Le gain de productivité reste réel — à condition que l'hygiène suive, et que l'éditeur patche.


✅ Conclusion

Plugin4Shell résume la sécurité des agents en 2026 : une faille de distribution, quatre éditeurs prévenus en juin, deux patchs, une dépréciation et un silence — pendant que l'agent le plus déployé au Fortune 500 reste sans correctif. Si tu choisis un agent aujourd'hui, pèse la gouvernance des plugins autant que le benchmark : commence par notre sélection des meilleurs agents IA, puis vérifie le statut de patch de chacun.