2 min de lecture
Pillar Security a démontré qu’une simple issue GitHub publique suffisait à faire poster, par un agent de triage, la commande qui déclenche un agent bien plus privilégié. Google a répondu en supprimant purement et simplement trois workflows du dépôt adk-python.
Le contrôle d’accès n’était pas absent. Il faisait exactement ce pour quoi il avait été écrit : vérifier qui avait posté la commande. Il ne pouvait pas vérifier si cette identité avait été manipulée pour la poster.
Posons le décor
Le dépôt adk-python, l’Agent Development Kit de Google pour Python, automatisait son triage avec des agents. Trois workflows, dont deux qui nous intéressent :
issue-analyze.yml: déclenché automatiquement à l’ouverture de toute issue, y compris par un parfait inconnu. Il s’authentifie avecADK_GCP_SA_KEY, fait analyser l’issue par un agent, et poste le résultat en commentaire via le compteadk-bot.issue-fix.yml: nettement plus privilégié. Il écoute les commentaires contenant la commande/adk-issue-fix, et engage un agent capable de générer et de pousser du code. Toutes les capacités de l’agent y sont activées.
Le troisième, pr-analyze.yml, suit la même logique côté pull requests.
Entre les deux, un contrôle d’accès. Il existe, il est explicite, et il n’est pas naïf : issue-fix.yml ne se déclenche que si l’auteur du commentaire est Collaborator, Member ou Maintainer. C’est exactement ce qu’on recommande, c’est ce que j’aurais moi-même validé en revue d’architecture il y a quelques mois.
Sauf qu’adk-bot est enregistré comme collaborateur du dépôt. Il faut bien qu’il le soit : sans ça, il ne pourrait pas commenter.
Note du PandaRedacteur : le compte de service qu’on ajoute aux collaborateurs « juste pour qu’il puisse commenter », et qui se retrouve six mois plus tard à détenir les clés du royaume parce que la gâchette du workflow privilégié regarde la liste des collaborateurs. On n’a rien inventé depuis les comptes de service AD des années 2000.
L'analyse détaillée (STRIDE complet, règles de conception, pseudo-code de balayage des workflows) part d'abord aux abonnés payants de ma newsletter Substack, avant d'être publiée intégralement ici. Pour la lire en avant-première, c'est sur sgioria.substack.com.
📚 Références
- The Hacker News : Google Deletes 3 ADK AI Workflows After Malicious GitHub Issue Could Trigger Privileged Agent
- SC Media : Researchers find agent-to-agent privilege escalation in Google’s ADK for Python repo
- Pillar Security
- Sur ce blog : Pwn request et pull_request_target · AsyncAPI, un cas réel · CoreBreak · Les 8 risques d’identité des agents IA selon la CSA
-
✓
Une issue GitHub publique suffisait à faire poster par l'agent de triage de Google la commande
/adk-issue-fix, déclenchant un agent privilégié. Ni compte, ni code, ni credentials nécessaires. -
✓
Le contrôle d'accès vérifiait l'identité de l'auteur, pas la provenance de l'intention :
adk-botétant collaborateur, sa commande passait la gate. - ✓ Aucun des deux workflows n'était individuellement mal conçu : la vulnérabilité naît de leur composition, quand la sortie de l'un devient le déclencheur de l'autre.
- ✓ L'allowlist de commandes shell a été contournée par un hook git : un agent qui peut écrire un fichier peut faire exécuter du code sans lancer de commande interdite.
- ✓ Google a supprimé les trois workflows plutôt que de les durcir, et c'est la bonne réponse : il n'existe pas de version sûre de cette topologie.
Articles lies
SlugFest : un nom de repo n'est pas une identité, de npm à vos rôles IAM
Analyse de SlugFest (Bloom Security, 13 octobre 2026) : le Trusted Publishing npm liait un package au nom d'un repo GitHub et non à son identifiant...
23/10/2026Un faux témoignage envoyé à la police de Philadelphie : Anthropic coupe internet à toutes ses évaluations
Analyse du rapport Anthropic du 9 octobre 2026 sur les actions non voulues de Claude pendant les évaluations : quatre catégories d'incidents, la pe...
21/10/2026MCP TypeScript SDK : c'est le serveur MCP qui choisissait à qui envoyer vos secrets OAuth
Analyse de la CVE-2026-104850 dans le SDK TypeScript officiel du Model Context Protocol : mécanisme de confusion de serveur d'autorisation, issuer ...
20/10/2026Copilot CLI : un texte chiffré suffit à lui faire voler votre .env, et GitHub n'y voit pas une faille
Analyse de la Cryptographic Context Injection (CCI) contre GitHub Copilot CLI : mécanisme du leurre à deux clés, dépendance au modèle et au routage...
19/10/2026AI-Pods, volet 2 : l'attaque des clones, le manifeste en 12 points pour que les Jedi gardent la main
Volet 2 de la série AI-Pods : le manifeste en 12 points pour des équipes de développement augmentées d'agents, le cycle en 7 étapes avec ses contrô...
16/10/2026