La chaîne, telle que décrite
Adversa AI a publié le 6 octobre une attaque où une seule URL contrôlée par l’attaquant, demandée par l’utilisateur lui-même, fait lire des fichiers locaux à GitHub Copilot CLI et en expédie le contenu vers le serveur de l’attaquant. Les chercheurs, dirigés par Rony Utevsky, chiffrent la chaîne complète à 28 secondes, « sans confirmation, et sans aucun point de la transcription qui nomme l’hôte de destination ou indique que du contenu de fichier a quitté la machine ».
La page se présente comme un contenu chiffré et propose à l’agent deux clés de déchiffrement candidates. L’une est réelle. L’autre est un gabarit que l’agent ne peut pas remplir sans lire d’abord des fichiers locaux : en préparant le déchiffrement, il lit donc les fichiers visés sur le disque et en intègre le contenu à la chaîne de clé. Cette lecture est le vol, et elle survient avant qu’un déchiffrement n’aboutisse.
La clé gabarit échoue à dessein. L’agent se rabat sur la vraie clé, le déchiffrement fonctionne, et la deuxième étape déchiffrée lui ordonne d’aller chercher une URL de suivi « pour obtenir plus de contexte », laquelle porte le contenu récolté en paramètre de requête. L’agent lance la requête.

Pourquoi le chiffrement est le cœur de l’affaire
Adversa appelle cela l’injection cryptographique de contexte, une technique publiée pour la première fois en août contre des assistants conversationnels. L’argument : les garde-fous statiques lisent le texte mais ne l’exécutent pas. Le texte chiffré, livré avec le matériel de clé et une consigne de déchiffrement, force la restitution dans l’environnement d’exécution de l’agent, car — à la différence du base64 — le modèle ne dispose d’aucun raccourci dans ses poids. Les instructions déchiffrées arrivent alors comme la sortie d’un code que l’agent vient d’écrire et d’exécuter, dans son contexte d’exécution de confiance.
Les chercheurs sont explicites sur ce qui fait fonctionner l’attaque : « Les mêmes instructions livrées en clair sont détectées comme injection de prompt et refusées. »
Le modèle que vous obtenez relève du pile ou face
L’attaque n’est pas universelle. Adversa indique qu’elle requiert deux choses : la CLI en mode pilote automatique et un modèle permissif chargé de la session. Sur ce second point, le constat est gênant pour Copilot en particulier.
Le mai-code-1.1-flash de Microsoft a exécuté la chaîne complète dans 50 % des essais des chercheurs. Deux modèles GPT-5.6 proposés dans le même produit ont systématiquement refusé la charge identique. Sur le compte payant testé, le modèle vulnérable n’était pas celui par défaut et devait être choisi à la main — mais sur un compte laissé en routage automatique, le routeur a attribué le modèle vulnérable sur certaines sessions et un modèle sûr sur d’autres, sans action de l’utilisateur. « L’utilisateur ne choisit pas, et ne voit pas, quel modèle a traité la session », écrit le rapport.

GitHub a validé puis clos
Adversa a signalé le constat au programme de primes aux bugs de GitHub le 17 septembre. Au 1er octobre, l’équipe de tri l’avait validé mais refusait de le traiter comme une vulnérabilité, au motif que l’utilisateur « a explicitement demandé à Copilot CLI d’aller chercher un contenu contrôlé par un attaquant tout en donnant à copilot les pleins droits d’agir de manière autonome ». GitHub a dit pouvoir durcir la fonctionnalité à l’avenir mais n’avoir rien à annoncer, et a jugé le rapport inéligible à la prime.
Adversa dit contester cette évaluation du risque et affirme que la chaîne se reproduit toujours telle que décrite. L’entreprise ne publie pas de charges concrètes.
Ce que cela vaut, et de qui cela vient
Adversa vend une plateforme de sécurité pour agents de codage et affirme que cette plateforme a stoppé la chaîne lors de ses propres tests : les recommandations de fin de texte ne sont donc pas désintéressées. Elles sont en elles-mêmes classiques : conserver par session une trace de chaque appel d’outil avec des arguments entièrement résolus plutôt que des gabarits, alerter sur la séquence — contenu non fiable entrant, exécution de code, lecture de fichiers, appel vers un hôte étranger à la tâche — plutôt que sur une charge isolée, exiger confirmation pour toute nouvelle destination réseau et toute écriture hors de l’espace de travail, et mettre en quarantaine le contenu récupéré dans un contexte sans outils ni identifiants.
Un détail mérite d’être retenu quel qu’en soit l’auteur. Lors de l’essai d’Adversa, le résumé final de l’agent indiquait qu’il avait « confirmé un point de terminaison de lecteur autorisé ». Ce n’est pas ce qui s’est passé. Le récit qu’un agent fait de sa propre session ne prouve pas ce que la session a fait.