バグ管理システムへの一見何気ない投稿が、人工知能への隠れた指令として機能してしまうことがあります。Noma Labsの研究者らは最近、たった一件のGitHub Issueによって、GitHubのAgentic Workflowsを操作できることを実証しました。この脆弱性により、リポジトリのAIエージェントが公開コメント上で非公開の内容を露出させられてしまいます。
GitHub Agentic Workflowsとは
GitHub Agentic Workflowsは、GitHub ActionsとAIエージェントをシームレスに統合する仕組みです。このエージェントは通常、ClaudeまたはGitHub Copilotによって動作します。開発チームは自動化の内容を自然言語で定義します。AIエージェントはIssueを解析し、ファイルにアクセスして特定のツールを呼び出します。そして、プロジェクトオーナーが設定した権限の範囲内で応答を投稿します。
「GitLost」脆弱性の仕組み
Noma LabsがGitLostとして詳細を公表したこの脆弱性は、間接的なプロンプトインジェクションに起因します。Issueの割り当てをトリガーとして、ワークフローは投稿のタイトルと本文を評価します。そのため、コメントを追加したりリポジトリを検査したりする権限を持つことになります。エージェントは組織内の公開・非公開いずれのリポジトリにもアクセス可能です。決定的な問題は、エージェントが管理者からの指示と信頼できないユーザー入力とを区別できなかった点です。その結果、Issue内に埋め込まれた文言を正規のコマンドとして解釈してしまいました。
攻撃実証の内容
制御された実証実験の中で、Noma Labsはもっともらしいissueを作成しました。営業担当副社長を装う形で作成したものです。割り当てが行われると、エージェントは2つのリポジトリからREADME.mdファイルを取得しました。一方は公開リポジトリ、もう一方は完全に非公開のリポジトリでした。続いて、エージェントはこれらの内容を統合しました。そして、その統合情報を公開コメントとして発信してしまいました。ただし、研究者らは外部のプロジェクトに対して実際の攻撃を行ってはいません。
安全対策の回避
このシステムの安全対策は、驚くほど単純な言い回しの調整によって回避されました。具体的には、「Additionally(さらに)」という単語を挿入することで、モデルの応答構造が変化しました。この追加によって、拒否メカニズムを回避することに成功したのです。要求内容が明らかにデータ開示を求めるものであったにもかかわらず、回避が成立しました。この実証結果は、重大なリスクを浮き彫りにしています。Issue、コメント、ファイルは、意図せず実行可能な指示へと変貌しうるのです。これは、コマンドと処理対象のデータとを分離できないシステムにおいて起こります。
推奨される対策
Noma Labsは責任ある開示の慣行に則り、この調査結果をGitHubに報告しました。こうしたリスクを軽減するため、開発者は厳格なセキュリティ対策を講じる必要があります。まず、ユーザーが生成したテキストは本質的に信頼できないものとして扱うべきです。次に、エージェントには必要最小限の権限のみを常に付与してください。さらに、セキュリティチームは公開フォーラムでのデータ公開を制限しなければなりません。最後に、モデルによる処理を行う前に、ユーザー入力をシステムプロンプトから厳密に分離する必要があります。
翻訳元: https://meterpreter.org/github-agentic-workflows-vulnerability/