GitHub がホストする AI エージェントの背後にあるセキュリティガイドラインについての GitHub の説明であり、ユーザビリティとセキュリティは緊張関係にあるという前提から書かれている。製品がエージェント的であるほど、できることは増え、可能になるワークフローも豊かになるが、AI がガードレールを外れたり、アラインメントを失ったり、悪意ある者に操作されたりする可能性と影響も大きくなる。著者は、このガイドラインは GitHub が設計するすべてのものに常に ヒューマン・イン・ザ・ループ の要素があることを保証するために存在すると述べている。
記事は GitHub がホストするエージェントの 3 つの設計目標、すなわち解釈可能性を最大化すること、自律性を最小化すること、異常な挙動を減らすことを述べ、その上で 3 つのリスク分類からなる脅威モデルと、GitHub がホストするエージェント型製品全体に適用される 6 つのルールを示す。具体例として取り上げられるのは GitHub Copilot コーディングエージェント である。記事は冒頭からこれらの原則を読者が自らのエージェントに適用しうるものとして提示し、最後には、それらがあらゆる新しい AI 製品に適用できるように作られたと述べている。
要点
- リスク 1、データの持ち出し:インターネットにアクセスできるエージェントは、うっかり、あるいは悪意によって、コンテキストを意図しない宛先に漏らしうる。記事が挙げる深刻な例は、エージェントが書き込み権限を持つ GitHub トークンを悪意のあるエンドポイントに漏らすことである。
- リスク 2、なりすましと行為の帰属:エージェントが行動するとき、どんな権限を持つべきか、誰の指示のもとで動いているのかが明確でない場合がある。記事の例は、Copilot が issue に割り当てられたとき、指示を出したのは issue を起票した人なのか割り当てた人なのか、そしてインシデントが起きた場合に説明責任とトレーサビリティをどう保つのか、という問いである。
- リスク 3、プロンプトインジェクション:エージェントは issue、リポジトリ内のファイル、その他多くの場所からプロンプトを与えられるため、記事は、起動するユーザーがエージェントを導くすべての情報を明確に把握している必要があり、さもなければ悪意のあるユーザーが指示を隠し、メンテナーをだまして悪い指示でエージェントを実行させうると論じる。
- ルール 1、すべてのコンテキストを可視化する:GitHub はコンテキストの生成元となったファイルを表示し、Unicode や HTML タグによって運ばれる不可視の、あるいは隠された情報を、エージェントに届く前に取り除こうとする。記事が挙げる攻撃の例は、注入された指示を含む不可視の Unicode を含んだ GitHub の issue であり、メンテナーはそれに気づかないまま Copilot に割り当ててしまう。
- ルール 2、エージェントにファイアウォールを設ける:ファイアウォールは、潜在的に有害な外部リソースへのコーディングエージェントのアクセスを制限し、ユーザーがネットワークアクセスを構成して不要な接続をブロックできるようにする。記事は、セキュリティとユーザビリティのバランスとして、MCP のやり取りは自動的にファイアウォールを迂回できるとしている。同じルールのもとで、記事は別の製品における別の統制も挙げている。Copilot Chat ではコードは自動的には実行されない。生成された HTML はプレビュー用のコードとして提示され、それを実行するリッチなプレビューのインターフェースはユーザーが手動で有効にしなければならない。
- ルール 3、機密情報へのアクセスを制限する:記事の定式化では、持ち出しを防ぐ最も簡単な方法は、そもそもアクセスを与えないことである。CI のシークレットや現在のリポジトリの外にあるファイルは自動的にはエージェントに渡されず、コーディングエージェントの GitHub トークンはセッションが完了すると失効する。
- ルール 4、不可逆な状態変更を防ぐ:AI は間違いを犯しうるし、実際に犯すという前提に基づき、エージェントは人間を介在させずに不可逆な状態変更を開始することはできない。コーディングエージェントはプルリクエストを作成することしかできず、デフォルトブランチに直接コミットすることはできない。そのプルリクエストでは CI が自動的には実行されず、人間がコードを検証して手動で GitHub Actions を実行する必要がある。そして Copilot Chat では、MCP のやり取りはいかなるツール呼び出しの前にも承認を求める。
- ルール 5、行為を起動者とエージェントの両方に帰属させる:やり取りは起動したユーザーに、行為はエージェントに帰属させられ、記事はこれを明確な責任の連鎖と位置づけている。コーディングエージェントによるプルリクエストは起動したユーザーとの共同コミットとなり、AI が生成したものであることが明確になるよう Copilot のアイデンティティを用いて生成される。
- ルール 6、認可されたユーザーからのみコンテキストを収集する:エージェントは、やり取りを起動したユーザーの権限とコンテキストのもとで動作する。コーディングエージェントは、リポジトリへの書き込み権限を持つユーザーによってのみ issue に割り当てることができ、また、書き込み権限を持つユーザーによる issue のコメントのみを読む。記事は、これが特に公開リポジトリにとって重要であると指摘している。
背景
これは GitHub 自身のブログにおける、GitHub 自身のセキュリティ設計についての当事者による説明であり、外部による監査、ペネトレーションテスト、あるいはその有効性の測定を報告するものではなく、ベンダーが実装したと述べる統制を記述している。記事自体は、これらの原則をエンドユーザーには見えないことを意図した設計上の判断として位置づけ、透明性のために公開するとしている。
この wiki の関連用語:間接プロンプトインジェクション、ガードレール、Safe Outputs、拒否優先のパーミッション評価、サンドボックス化。