GitHub MCPの有害なエージェントフロー:公開Issue経由で非公開リポジトリの情報が流出
Invariant Labsは、悪意のある公開GitHub IssueによってGitHub MCPサーバー上のエージェントが誘導され、非公開リポジトリのデータが公開pull requestにコピーされる手法を示しました。
何が起きたか
2025年5月26日、Invariant Labsは、GitHub MCP serverに関わる「toxic agent flow」と呼ぶ事例を公表しました。攻撃者は公開リポジトリにissueを作成し、エージェント向けの指示を書き込みます。エージェントが後で未解決のissueを読むと、仕込まれたテキストを取り込み、その指示に従います。
エージェントのtokenから、所有者の非公開リポジトリにもアクセスできる場合がありました。issueの指示に従ったエージェントは、非公開リポジトリからデータを取得し、公開リポジトリにpull requestとして投稿しました。その内容は誰でも閲覧できました。
なぜ成功したか
致命的な三要素がすべて1つのセッションにそろっていました。非公開リポジトリにアクセスできるtoken、公開issueに含まれる信頼できないテキスト、そして情報の持ち出し先となる公開pull requestです。それぞれは単独ならありふれたものです。しかし、組み合わさると、issueを作成できる人なら誰でもtokenが読める情報を読める状態になります。
対策
- 公開issueを読むエージェントには、そのリポジトリだけに権限を限定したtokenを割り当ててください。
- 公開リポジトリと非公開リポジトリは、別々のエージェントセッションで扱ってください。
- エージェントが公開リポジトリでpull requestを作成したり、コメントやcommitを行ったりする前に、承認を必須にしてください。
- issueのタイトル、本文、コメントは信頼できない入力として扱ってください。
危険な3要素を断つ最小権限の認証情報を使う重大な操作には承認を必須にする