Google ADK Repository Agent-to-Agent CI Privilege Crossing
Pillar Security showed that attacker-controlled PR text could make google/adk-python's public triage agent post a first-line @gemini-cli comment. Because the agent used a collaborator account, gemini-dispatch treated that comment as authorized and started gemini-invoke. The initial handoff was reproduced in a research lab; further token and review-manipulation impacts were demonstrated or analyzed, not a confirmed malicious merge. Google hardened the repository.
Threat Analysis
A low-trust PR became a high-trust workflow request because the first agent commented through a collaborator user identity. The receiving Gemini dispatch workflow checked the commenter's apparent role, not the root requester or whether review authority had actually been delegated.
- A PR description portrays a first-line @gemini-cli comment as the repository's normal triage procedure.
- The public-facing ADK triage agent processes the PR text and posts the requested comment using adk-bot, a collaborator user identity rather than a low-trust bot identity.
- The dispatch workflow accepts the collaborator's @gemini-cli comment and routes it to gemini-invoke; it has not independently verified the real request origin or delegated task.
- The second workflow receives the attacker-shaped prompt in a stronger CI context. The researcher demonstrated the handoff and investigated token and PR-review operations within its actual scopes.
- The researcher built a PoC for editing review-related comments, labels, or approval signals. A maintainer still had to merge a PR; no malicious merge was reported.
The researcher reproduced the cross-agent trigger in a controlled environment and demonstrated further token or review-signal paths. The reported permissions still required a maintainer to merge a PR; Google said it hardened the repository. This is not evidence that a malicious release was merged.
Applicable AIDEFEND Defenses (5)
What Defenders Should Do Now
- Give automation its own narrow bot identity; do not let public-input agents comment through a collaborator's personal access token.
- At every comment-triggered handoff, verify the root principal, delegated task and allowed capability independently of the account that posted the comment.
- Restrict the receiving agent's final tool calls to the exact PR and task; keep human merge review and branch protection independent of bot-generated approval signals.
1 additional consideration
Evidence and deployment boundary
Conclusion
Last updated: