Pillar Securityは、Googleの「Agent Development Kit」Python版においてエージェント間攻撃手法を発見しました。この手法により、秘密情報の漏洩やプルリクエスト(PR)の汚染が引き起こされる可能性があります。
google/adk-pythonリポジトリには、2種類の自動AIエージェントが存在していました。一つはユーザーとの対話が可能な低権限のエージェントで、もう一つはメンテナーのみがアクセスできる高権限のエージェントです。
攻撃者はこの低権限で公開されているエージェントを操作し、高権限のエージェントにプロンプトを渡すことで、コマンド実行を含む制限付き機能へのアクセスを獲得できる可能性があります。これによりサプライチェーン侵害への道が開かれる恐れがあると、Pillarのダン・リシチキン氏は説明しています。
同社はまず、プルリクエストのトリアージを担当するエージェントが「Collaborator」としてPRにコメントしていることを発見しました。これは、そのエージェントがリポジトリ上で高い権限を持っていることを意味します。
次にリシチキン氏は、このエージェントを操作して「@gemini-cli <prompt>」をPRへのコメントとして投稿させる方法を見つけました。これによりgemini-invokeがトリガーされ、より高権限なワークフローへのアクセスが可能になりました。
最初のプロンプトは、gemini_invoke.ymlワークフローからの応答をトリガーし、権限を持つエージェントがMCPサーバー経由でアクセスできるツール群を漏洩させました。
これにより、このボットがあらゆるbashコマンドにアクセスできることが判明しました。つまり、研究者はリモートでコードを実行し、エージェントのGitHubトークンを窃取できる可能性があったということです。
リシチキン氏によると、これにより他のメンテナー・コラボレーター・メンバーのコメント、PR、Issueを改変したり、レビューを却下またはPRの変更を承認したり、任意のPRに対してgemini-invokeとgemini-reviewを呼び出したりすることが可能になったといいます。
さらに、このボットの権限を悪用してPR承認のライフサイクルを汚染することも可能でした。ただし、悪意あるPRが承認・マージされるには、いずれにせよメンバーによる操作が必要であり、そのためにはソーシャルエンジニアリングが求められました。
この攻撃シナリオでは、脅威アクターはまずコラボレーターとしての信頼を築き、その後悪意あるコードを含むPRを開いてレビュー対象としてマークさせる必要があります。続いて、脅威アクターは2つ目のPRを開き、そこに含めたプロンプトによってエージェントに指示を出し、最初のPRをトリアージ済み・レビュー済み・承認済みとしてマークさせることができます。
「トリアージ担当者のコメントを編集する操作にはissues: writeから得られる『なりすまし』のプリミティブを利用し、ボットとして投稿・承認する操作にはRCEによって窃取したGITHUB_TOKENを使用します。そしてラベルやレビュー依頼の変更はpull-requests: writeの権限下で行われます。これらを組み合わせることで、汚染されたPR上に『人間がレビューを依頼し、Geminiがそれを実行し、Geminiが承認した』という、完全かつ信憑性のある一連の記録が作り出されますが、実際にはそのようなことは一切起きていません」とリシチキン氏は指摘しています。
Googleは6月初旬にこの発見について通知を受け、対策強化によって問題に対処しました。ただし、悪意あるPRのマージにはソーシャルエンジニアリングが必要だったことから、バグ報奨金の対象基準には該当しないと判断されました。
その直後、Pillarはadkリポジトリにおいて、Antigravity-SDKベースのエージェントの自動化機能に別の脆弱性を発見しました。この脆弱性は、メンテナーの操作を介さずにリモートコード実行につながる可能性があるものでした。Googleは7月下旬にこの弱点を修正しました。