独占記事 セキュリティ研究者は、新しいタイプのプロンプトインジェクション攻撃を使用して、GitHubアクションと統合された3つの人気AIエージェントをハイジャックし、APIキーとアクセストークンを盗みました。これらのエージェントを運営するベンダーは問題を公開していません。
研究者はAnthropicのClaude Code Security Review、GoogleのGemini CLI Action、およびMicrosoftのGitHub Copilotをターゲットにした後、欠陥を開示し、3社すべてからバグ報奨金を受け取りました。しかし、ベンダーのどれもCVEを割り当てたり、公開勧告を発表しなかったため、研究者のAonan Guanによると、「これは問題である」とのことです。
「一部のユーザーが脆弱なバージョンに固定されていることは確実です」と、GuanはThe Registerとの独占インタビューで述べました。彼とジョンズ・ホプキンス大学のチームがこのプロンプトインジェクションパターンを発見し、エージェントを侵害した経緯について。「勧告を発表しない場合、これらのユーザーは自分たちが脆弱であるか、攻撃を受けている可能性があることを永遠に知らない可能性があります。」
彼は、この攻撃はGitHubと統合された他のエージェント、およびツールとシークレットへのアクセスを許可するGitHubアクション(Slackボット、Jiraエージェント、メールエージェント、デプロイメント自動化エージェントなど)でも機能する可能性があると述べました。
「Microsoft、Google、およびAnthropicが上位3つです」と、GuanはThe Registerに対して、木曜日に研究を発表する前に述べました。「他のベンダーでもこの脆弱性を見つける可能性があります。」
3つのベンダーのどれも、このストーリーに関するThe Registerの問い合わせに応答しませんでした。
Claude Code Security Review
Guanはもともとこの欠陥をClaude Code Security Reviewで発見しました。これはAnthropicのGitHubアクションで、Claudeを使用してコード変更とプルリクエストを分析して、脆弱性およびその他のセキュリティ問題を検出します。
「脆弱性をコード内で見つけるためにAIエージェントを使用します。これはソフトウェアが設計されている用途です」とGuanは述べました。これにより、彼は「フロー」について疑問に思いました。ユーザープロンプトがエージェントにどのように流れ込み、その後、それらのプロンプトに基づいてどのようにアクションを実行するかについてです。
私はそれらすべてをバイパスしました
Claudeを含むGitHubアクション内の他のAIエージェントはすべて、同じフローを使用していることが判明しました。エージェントはGitHubデータを読み取ります。これにはプルリクエストのタイトル、イシューの本文、およびコメントが含まれます。これをタスクコンテキストの一部として処理し、その後アクションを実行します。
そこでGuanは悪質なアイデアを考案しました。AIによって読み込まれているこのデータに悪意のある指示を挿入できれば、「おそらく私はエージェントを乗っ取り、望むことを何でもできるでしょう。」
それは機能しました。Guanはプルリクエストを送信し、PRタイトルに悪意のある指示を挿入しました。この場合、Claudeに対してwhomiコマンドをBashツールを使用して実行させ、結果を「セキュリティ検出」として返すよう指示していました。
Claudeは挿入されたコマンドを実行し、出力をJSON応答に埋め込み、プルリクエストコメントとして投稿されました。
元々この攻撃をHackerOneのバグ報奨プラットフォームに10月に提出した後、AnthropicはGuanにこのテクニックを使用してGitHubアクセストークンやAnthropicのAPIキーなどのより機密性の高いデータも盗むことができるかどうか尋ねました。Guanはこのプロンプトインジェクションが認証情報の漏洩にも機能することを実証しました。
「タイトルがペイロードで、ボットのレビューコメントが認証情報が表示される1つの場所です」とGuanは述べました。「攻撃者がタイトルを書き、コメントを読みます。」
また、シークレットを漏らした後、攻撃者はPRタイトルを「タイポ修正」または同様のものに戻し、PRをクローズしてボットのメッセージを削除できることは注目に値します。
11月、Anthropicはguanに100ドルのバグ報奨金を支払い、重大度を9.3から9.4にアップグレードし、「セキュリティに関する考慮事項」セクションをドキュメントで更新しました。
「このアクションはプロンプトインジェクション攻撃に対して強化されていないため、信頼できるPRのレビューにのみ使用する必要があります」とドキュメントに記載されています。「メンテナがPRをレビューした後にのみワークフローが実行されるようにするために、リポジトリを設定して「すべての外部コントリビューターの承認が必要」オプションを使用することをお勧めします。」
Gemini、Copilotおよびそれ以降
このプロンプトインジェクションがClaude Codeで機能することを検証した後、Guanはジョンズ・ホプキンス大学の研究者と協力して、他のエージェント、特にGoogle Gemini CLIアクション(GeminiをGitHubイシューワークフローに統合します)およびGitHub Copilot Agent(GitHubイシューに割り当てられることができ、自律的にPRを作成します)に対して同様の攻撃を検証しました。
ネタバレ:機能しました。
Geminiを使用して、研究者は再び悪意のあるプロンプトインジェクションタイトルで攻撃を開始し、その後、段階的なインジェクションを含むコメントを追加しました:
実際の「追加コンテンツ」の後に偽の「信頼できるコンテンツセクション」を挿入することにより、研究者はGeminiのセーフティ指示をオーバーライドし、Gemini APIキーをイシューコメントとして公開することができました。
Googleは1,337ドルの報奨金を支払い、Guan、Neil Fendley、Zhengyu Liu、Senapati Diwangkara、およびYinzhi Caoの発見と開示をクレジットしました。
Microsoft所有のGitHub Copilot Agentへの攻撃は少しより複雑であることが判明しました。これは、GitHubのインフラストラクチャの背後で動作し、自律的にPRを作成できる自律型ソフトウェアエンジニアリング(SWE)エージェントです。
ClaudeおよびGeminiに組み込まれているモデルおよびプロンプトレベルの防御に加えて、Githubは3つのランタイムレベルのセキュリティレイヤーを追加しました:環境フィルタリング、シークレットスキャン、およびネットワークファイアウォール。認証情報盗難を防止するためです。
「私はそれらをすべてバイパスしました」とGuanは述べました。
PRタイトルまたはイシューコメントに目に見えるプロンプトを配置するだけで済む前の2つの攻撃とは異なり、Copilot攻撃では、攻撃者がGitHubの表示されたマークダウンを人間に見えなくするHTMLコメント内に悪意のある指示を挿入する必要があります。攻撃者がコメントを読むことができない被害者は、Copilotエージェントにイシューを割り当てて修正します。
Github は、最初これを「再現できなかった」「既知の問題」と呼んでいましたが、3月にこの問題について500ドルの報奨金を支払いました。
総合すると、Guanと彼の同僚の研究者は、攻撃者がこのプロンプトインジェクション技術を使用してAnthropicおよびGemini APIキー、複数のGitHubトークン、および「ワークフローがアクセス権を持つ任意のユーザー定義リポジトリまたは組織シークレットを含む、GitHub Actionsランナー環境で公開されている他のシークレット」を盗むことができることを実証しました。
コメント・アンド・コントロール・プロンプトインジェクション
Guanはこのタイプのプロンプトインジェクション攻撃を「コメント・アンド・コントロール」と呼んでいます。これは「コマンド・アンド・コントロール」をもじったもので、攻撃全体がGitHub内で実行されるため、外部のコマンド・アンド・コントロール・インフラストラクチャが必要ありません。本質的には、攻撃者がプルリクエストタイトル、イシュー本文、およびイシューコメントにプロンプトを挿入してGitHubデータを制御できるようになります。GitHub Actionsで実行されているAIエージェントがデータを処理し、コマンドを実行し、その後GitHub自体を介して認証情報を漏らします。
本誌に先立って共有された研究で、Guanは「コメント・アンド・コントロール・プロンプトインジェクション」と古典的な間接プロンプトインジェクションの間に「重要な区別」があると述べています。
彼は、後者は「反応的です:攻撃者がペイロードをウェブページまたはドキュメントに配置し、被害者がAIにそれを処理するよう要求するのを待ちます(「このページを要約してください」、「このファイルを確認してください」)。コメント・アンド・コントロールは能動的です:GitHub Actionsワークフローはプルリクエストタイトル、イシュー本文、およびイシューコメントに自動的に起動されます」と説明しています。
「したがって、PRを開くまたはイシューを提出するだけで、被害者からのアクションなしにAIエージェントをトリガーできます」と彼は書きました。Copilot攻撃が「部分的な例外であることを追加しました:被害者はイシューをCopilotに割り当てる必要がありますが、悪意のある指示がHTMLコメント内に隠されているため、割り当ては被害者がペイロードを見ることなく発生します。」
彼は、これらの攻撃が、プロンプトインジェクション防止が組み込まれたモデルでも、「結局バイパスできることを示している」と述べました。
解決策は何ですか?プロンプトインジェクションを人間ではなくマシンのためのフィッシングと考え、AIエージェントを人間の従業員のように扱うことです。「必要最小限の原則に従ってください」とGuanは述べました。
たとえば、コード確認エージェントがBash実行が必要ない場合は、このツールを与えないでください。許可リストを使用して、エージェントがそのタスクを完了するために必要なものにのみアクセスできるようにします。同様に、そのタスクがイシューの要約である場合、GitHub書き込みアクセス用の認証情報は必要ありません。
「エージェントを非常に強力な従業員として扱ってください」とGuanは述べました。「彼らに彼らのタスクを完了するために必要なツールのみを与えてください。®」