「GitLost」攻撃、GitHub Issuesを悪用しAIエージェントのコメント経由でプライベートリポジトリのデータを窃取

GitHubのAgentic Workflowsに存在するプロンプトインジェクションの脆弱性により、未認証の攻撃者が公開リポジトリに細工したissueを投稿するだけで、プライベートリポジトリの内容を窃取できることが判明しました。

Noma Security傘下の研究部門であるNoma Labsのセキュリティ研究者は、GitHubのAIエージェントがGitHub Issue内に隠された平易な英語のテキストだけで操作され、プライベートリポジトリのデータを漏えいさせてしまう状態にあったことを発見しました。

この欠陥は、比較的最近登場した機能であるGitHub Agentic Workflowsに影響します。これはGitHub ActionsとClaudeまたはGitHub Copilotを搭載したAIエージェントを組み合わせたもので、コードではなくMarkdownで指示を書くことでリポジトリのタスクを自動化できるようにする機能です。

根本原因は典型的な間接プロンプトインジェクションです。エージェントは、信頼できるシステム指示と、issue本文から読み取った信頼できないコンテンツとを区別できず、その結果、攻撃者が仕込んだテキストがコマンドとして扱われてしまいました。

Noma Labsが発見した脆弱なワークフローは、issues.assignedイベントをトリガーとして設定され、issueのタイトルと本文を読み取り、コメント追加ツールを使って返信を投稿し、同一組織内の公開・非公開両方のリポジトリに対して読み取りアクセス権限を持った状態で実行されていました。

この欠陥を実証するため、研究者らは「VP Sales(営業担当役員)」からの顧客ミーティングの要約依頼を装った、ごく普通に見えるissueを作成しました。

issueが担当者に割り当てられ、自動化されたワークフローがトリガーされると、エージェントは公開リポジトリpocと非公開リポジトリtestlocalの両方からREADME.mdの内容を取得し、それらを元のissueへのコメントとして公開の場に投稿しました。このコメントはインターネット上の誰からでも閲覧可能な状態でした。攻撃者に必要だったのは認証情報やリポジトリへのアクセス権、コーディングスキルではなく、公開issueを投稿して待つ能力だけでした。

GitHubにはこの種の漏えいをまさに防ぐための組み込みの保護機能が備わっていましたが、Noma Labsはたった一語でこれを回避できることを発見しました。

注入したプロンプトに「Additionally(加えて)」という言葉を追加するだけで、モデルはリクエストを拒否する代わりに出力の枠組みを組み替えてしまい、実質的に保護機能を無効化してしまいました。Noma Labsは、独立した検証を可能にするため、ワークフローの実行記録と元のissueを含む完全な概念実証(PoC)の証拠を公開しました。

GitLostは、エージェント型AIシステムに内在する構造的な問題を浮き彫りにしています。issue、プルリクエスト、コメント、ファイルを含むエージェントのコンテキストウィンドウ全体が、そのまま攻撃対象領域にもなってしまうのです。信頼境界がコードによって強制される従来型のソフトウェアとは異なり、エージェント型システムは部分的にモデルの振る舞いに依存しており、指示に従うよう設計されたモデルは本質的に操作を受けやすい性質を持っています。

業界の識者は、エージェント型AIにおけるプロンプトインジェクションを、初期のWebアプリケーションにおけるSQLインジェクションと直接重ね合わせ、これを体系的でカテゴリー全体に及ぶ脆弱性の一群として位置づけています。

Noma Labsは、ユーザーが制御可能なコンテンツを決して信頼できる指示入力として扱わないこと、エージェントの権限を必要最小限の範囲に絞ること、エージェントが公開の場に投稿できる内容を制限すること、そしてユーザー入力がモデルに届く前に指示コンテキストから分離することを組織に推奨しています。この脆弱性は責任ある形でGitHubに開示されており、GitHub側は一般公開に先立って調査結果を伝えられていました。

翻訳元: https://cyberpress.org/gitlost-attack-github-issues-data-exfiltration/

ソース: cyberpress.org