OAuthで保護されたリモートMCPサーバーのリリース:仕様と3つのセキュリティバグ
この記事では、OAuth認証で保護されたリモートMCP(Model Context Protocol)サーバーを実際にデプロイする際の仕様と、発見された3つのセキュリティバグについて解説する。認可フローの実装における注意点や、実際に発生しうる脆弱性を具体的に示しながら、安全なMCPサーバー構築のための知見を提供する。
背景メモ
- **Model Context Protocol (MCP)** は、AIエージェント(Claude Desktopなど)が外部のデータソースやツールに安全にアクセスするためのオープンなプロトコル。従来はローカル専用だったが、リモート接続へと拡張されつつある。
- この記事では、MCPサーバーに **OAuth 2.0**(業界標準の認可フレームワーク)を導入した実装例と、その際に発見・報告された**3つのセキュリティバグ**(認可コード横取り、リダイレクトURIの不一致、スコープ昇格)が解説されている。
- **OAuth 2.0**:ユーザーがパスワードを直接共有せずに、サードパーティアプリに限定的なアクセス権を付与できる仕組み。GitHubやGoogleログインなどで広く使われる。
- **PKCE**(Proof Key for Code Exchange):パブリッククライアント(モバイルアプリなど)で認可コードを横取りから守るための拡張仕様。
- **PGP**(Pretty Good Privacy):暗号化と署名による通信の真正性保証方式。この記事では、GitHub上の偽装MCPサーバーを防ぐために推奨されている。
- この議論が重要な理由:AIエージェントがユーザーに代わって外部APIを操作するユースケース(メール送信、SaaSデータ参照など)が増えており、安全なリモート認証の設計が急務となっているため。