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
NemoClaw : une page web piégée suffit pour prendre le contrôle d'un agent Ollama local
Analyse de CVE-2026-65105 (NemoClaw, NVIDIA) découverte par Oasis Security : contournement des origin checks par DNS rebinding vers l'API non authe...
09/09/2026Hermes récidive : cette fois, c'est un État qui se fait cartographier par un essaim d'agents
Analyse du rapport Dream Security sur l'attaque contre des systèmes gouvernementaux taïwanais menée par un essaim d'agents Hermes et OpenClaw : car...
08/09/2026Mind viruses : quand l'agent infecté devient lui-même le vecteur de contamination
Analyse du preprint Anthropic/EPFL sur les mind viruses : des payloads auto-réplicants qui se propagent d'agent en agent via les fichiers de prompt...
07/09/2026Agent harness : le code autour du modèle qui décide si votre agent est fiable ou pas
Qu'est-ce qu'un agent harness ? Définition, boucle d'exécution, état de l'art août 2026 (Pi, DeepSeek Harness, OpenCode, OpenHands, Deep Agents, Mi...
03/09/2026GhostSplice : découpez votre instruction malveillante en trois, et l'agent la recolle tout seul
Analyse de GhostSplice (ASSET Research Group) : la fragmentation d'instructions malveillantes à travers les canaux d'un serveur MCP (description d'...
03/09/2026