Catégories

Tags

🔍 Licence d'Utilisation 🔍

Sauf mention contraire, le contenu de ce blog est sous licence CC BY-NC-ND 4.0.

© 2025 à 2042 Sébastien Gioria. Tous droits réservés.

⏱️
Temps de lecture estimé
4 min de lecture

Un compte GitHub sans le moindre droit d’écriture, une simple issue postée sur un dépôt public, et voilà les secrets de la CI qui repartent tranquillement chez l’attaquant. Aucun scénario de threat model sorti d’un atelier ici : des chercheurs l’ont démontré sur Claude Code, Gemini CLI et OpenAI Codex à Black Hat USA 2026.

Source : Cloud Security Alliance AI Safety Initiative, “Comment and Control: When a GitHub Issue Steals CI Secrets”, research note publiée le 7 août 2026, sur la base de la présentation Black Hat USA 2026 de Novee Security (Elad Meged, 5 août 2026).


Ce que je retiens en premier

Je passe beaucoup de temps sur ce blog à documenter des attaques contre des agents de codage, et celui-ci mérite un arrêt pour une raison précise : le modèle n’est pas le maillon qui casse. Dans les deux vagues de recherche que je détaille ici, avril 2026 puis Black Hat en août, le LLM a fait ce qu’un assistant coopératif fait toujours, produire une commande plausible. C’est une couche en dessous que ça a lâché : un validateur de commande, une frontière de sandbox, une allowlist de domaine.

Le modèle a été persuadé. Le système, lui, a échoué.

Et ça change tout pour la remédiation. Durcir le prompt système, filtrer les sorties, entraîner le modèle à résister : ces trois choses font baisser le taux auquel un agent se fait avoir par une instruction adverse, c’est utile et c’est mesurable.

Aucune ne répare un validateur qui inspecte la mauvaise représentation d’une commande, ni un sandbox à qui il manque une frontière d’isolation.

Le contexte

Claude Code, Gemini CLI, GitHub Copilot coding agent et OpenAI Codex ont quitté le rôle d’assistant interactif pour tourner en mode headless dans GitHub Actions, avec mission de trier les issues, relire les pull requests, parfois corriger des bugs sans supervision directe. Ils héritent au passage des mêmes variables d’environnement, clés API et jetons de dépôt que n’importe quelle autre étape du workflow.

Le chiffre que je retiens de la note CSA d’avril 2026 : les commits assistés par IA exposent des secrets à un taux environ deux fois supérieur aux commits humains seuls. Ce chiffre ne dit rien de l’attaque elle-même, il décrit le terrain sur lequel elle pousse.

Le mécanisme sous-jacent, l’injection de prompt indirecte, n’a rien de nouveau. Je l’avais documenté côté dépôt Git piégé dans L’ennemi dans le terminal, côté enregistrement DNS dans Cloner ce dépôt vous appartient, et côté configuration IDE agentique dans AWS Kiro. Le point commun à chaque fois : n’importe quel texte qu’un agent lit dans le cadre normal de son travail, titre d’issue, description de PR, commentaire, peut fonctionner comme une instruction si le modèle l’interprète comme telle.

flowchart LR
    A["Compte GitHub<br/>sans droit d'écriture"] -->|"ouvre une issue"| B["Texte adverse<br/>(titre, corps, commentaire)"]
    B --> C["Agent de codage IA<br/>(Claude Code / Gemini CLI / Codex)"]
    C -->|"commande plausible émise"| D{"Couche de contrôle<br/>(validateur / sandbox / allowlist)"}
    D -->|"échoue à bloquer"| E["Secrets CI exfiltrés<br/>(API keys, GITHUB_TOKEN)"]
    D -.->|"tiendrait le rôle attendu"| F["Commande rejetée"]
    style E fill:#dc3545,color:#fff
    style F fill:#28a745,color:#fff

“Comment and Control”, le nom qui dit tout

La recherche originale, menée par le chercheur en sécurité Aonan Guan et des collaborateurs de Johns Hopkins, signalée dès octobre 2025 et publiée en avril 2026, a nommé son pattern “Comment and Control” en écho volontaire au command-and-control (le C2 que tout le monde connaît) : toute la boucle d’exploitation se joue dans les champs de commentaire et d’issue natifs de GitHub, sans infrastructure externe.

Note du PandaRedacteur: Ça me rappelle une présentation vue à un BSides en 2025 sur le C2 dans un ticket JIRA qui comprenait tout le payload d’exfiltration et plus si affinités…

Trois produits, trois variantes du même problème :

  1. Claude Code (action de revue de sécurité) : un titre de pull request conçu pour sortir des limites attendues du prompt a fait exécuter à l’agent des commandes shell lisant ANTHROPIC_API_KEY et GITHUB_TOKEN depuis l’environnement du process via ps auxeww
  2. Gemini CLI (GitHub Action) : un commentaire d’issue malveillant a injecté un marqueur “trusted content” forgé, 3. GitHub Copilot coding agent : un payload caché dans un commentaire HTML d’un corps d’issue,

Note du PandaRedacteur : les bounties versées pour ces trois découvertes, 100, 1337 et 500 dollars, tiennent presque de la private joke. Pas sûr que le montant reflète la gravité d’une exfiltration de token CI, mais au moins le 1337 a le mérite de l’humour ;) .

Anthropic a corrigé en bloquant spécifiquement la commande ps, plutôt que d’adopter un modèle d’exécution en moindre privilège. Les chercheurs ont noté que le pattern restait exploitable avec un payload ajusté. Je le redis parce que ça revient tout le temps : patcher la signature de l’attaque au lieu de la cause structurelle repousse simplement la prochaine découverte de quelques mois.

📬 Analyse complète réservée aux abonnés payants
La suite (les CVE de Black Hat USA 2026, l'analyse STRIDE complète, le tableau d'impact et les mitigations) est disponible dès maintenant pour les abonnés payants de ma newsletter Substack, avant sa publication intégrale ici. Pour la lire, c'est sur sgioria.substack.com.