GitHub MCP のLockdown Modeでプロンプトインジェクションのリスクを下げる

GitHub MCP のLockdown Modeでプロンプトインジェクションのリスクを下げる

GitHub MCP Serverのロックダウンモード機能について、実際に動作を検証してみました。プロンプトインジェクション攻撃からの保護を目的とした機能がどのように機能するのか、その実装について紹介します。
2026.08.05

※本記事の内容は筆者が確認した時点(2026年8月)のものです
GitHub MCP はOSSで活発に更新されているため、最新の実装は
リポジトリを確認してください

Lockdown Mode

GitHub MCP Server には ロックダウンモード という機能があり、この機能はそのコンテンツの投稿者がリポジトリへのpush権限を持っている場合のみ読み取り可能にするらしい

https://github.com/github/github-mcp-server/blob/main/docs/server-configuration.md#lockdown-mode

Lockdown Mode
Best for: Public repositories where you want to limit content from users without push access.
Lockdown mode ensures the server only surfaces content in public repositories from users with push access to that repository. Private repositories are unaffected, and collaborators retain full access to their own content.
(訳:ロックダウンモード
最適な用途:プッシュアクセス権を持たないユーザーによるコンテンツの投稿を制限したいパブリックリポジトリ。
ロックダウンモードでは、サーバーはパブリックリポジトリ内のコンテンツのうち、そのリポジトリへのプッシュアクセス権を持つユーザーが投稿したコンテンツのみを表示するようにします。プライベートリポジトリには影響がなく、共同編集者は自身のコンテンツに対して引き続き完全なアクセス権を維持します。)

なぜこの機能が要るのか

GitHub MCPのようなツールは、AIに「issueを読む」「PRのコメントを読む」といった操作をさせる、この時に プロンプトインジェクション という方法で機密情報を抜き取ろうとしてくるような悪い人がいる

例えばissueを立ててその中にAIに対する指示を埋め込んでおき実行させるといった目的の攻撃のこと

Lockdown Modeは、この「誰が書いたか分からないコンテンツ」をAIの目に触れさせないというシンプルな対策になる

実際に試してみる

検証[1]

検証には github/github-mcp-server#2984 のissueを利用する
この投稿者はこのリポジトリにpush権限を持たない

curlで直接叩いた結果

Lockdown Mode OFFの結果(issue本文がそのまま返る):

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"number\":2984,\"title\":\"Security: Bearer JWT + JWKS for agent callers ...\",\"body\":\"...(本文がそのまま丸ごと返ってくる)...\",\"user\":{\"login\":\"Mawyxx\",...},\"author_association\":\"NONE\",...}"
      }
    ]
  }
}

Lockdown Mode ONの結果(失敗):

{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "failed to check lockdown mode: failed to get user permission level: GET https://api.github.com/repos/github/github-mcp-server/collaborators/Mawyxx/permission: 403 Resource not accessible by personal access token []"
      }
    ],
    "isError": true
  }
}

ちゃんと失敗してる

検証[2]

次はgithub/github-mcp-server#2981 のissueを利用する
この投稿者はこのリポジトリにpush権限を持っているはず

Lockdown Mode ONの結果(失敗):

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "failed to check lockdown mode: failed to get user permission level: GET https://api.github.com/repos/github/github-mcp-server/collaborators/ericsciple/permission: 403 Resource not accessible by personal access token []"
      }
    ],
    "isError": true
  }
}

あれ...成功すると思っていたのに...

思ってたのと違う

エラーメッセージを見ると、投稿者のpush権限を確認するために内部でこのエンドポイントを叩いて失敗している様子

GET /repos/{owner}/{repo}/collaborators/{username}/permission

恐らく

  1. Lockdown Modeで弾くかどうか判断したい
  2. 投稿者のpush権限を確認しよう
  3. 確認する権限がない
  4. 失敗

となっていると推測できる(推測だけど)

Lockdown Modeは、自分自身がコラボレーターではないリポジトリの場合は基本的にissueやcommentは取得できないという結果になった

利用者がパブリックリポジトリのコラボレーターである前提で用意されたモードなのかも

まとめ

  • Lockdown Modeは公開リポジトリのコラボレーター(push権限保持者)が自分のリポジトリを守るための機能であり、コラボレーターでない立場から他のリポジトリを覗く用途には向かない
  • この動作は意図的な設計か不明ですが、結果としてコンテンツへのアクセスがより厳しく制限されるのでプロンプトインジェクションのリスクは下がっていると言える

この記事をシェアする

関連記事