
2026/11/05 0:30
MCP クライアントの利用者を信頼させながら、フィッシングの隙間を生まない方法
RSS: https://news.ycombinator.com/rss
要約▶
日本語訳:
重大なセキュリティ欠陥により、ハッカーは標準的な MCP OAuth サーバーを欺き、ログイン時に悪意のあるウェブサイトのアドレスを受け付けさせることでユーザーアカウントを窃取することが可能です。この脆弱性は最近、Square などの大手企業に対し実証されており、ワンクリックで完全なアカウント乗っ取りを可能にします。核心的問題は、2026 年 5 月の研究で確認された通り、テスト対象の OAuth を備えた MCP サーバーの 95.8% が匿名のリクエスト元から任意の
redirect_uri 値を受け付ける点にあることが特定されました。これにより大規模なフィッシングのベクターが生じました。既存のシステムは登録設定や出版社のアイデンティティに依存していましたが、これらは不十分として却下されました。新しい解決策は、個人ユーザーレベルで厳格な信頼を強制します。この改善されたアーキテクチャでは、ユーザーは「信頼済みアプリ」リストで特定の HTTPS アドレスを手動で承認します。これらのアドレスは認証後のみ、ユーザー固有の信頼リストに対して検証されます。リスクを軽減するためには、サーバーは無権限なコードを即座に拒否し、信頼済みアドレスが削除された場合は全てのアクセスを取り消す必要があります。現在、信頼済みアドレスを追加するには、拒否ページでホストを手動でタイプする必要があります(リンクをクリックしない)。また、通常はメール検証も含まれます。この変更により、信頼できない登録設定をユーザーの直接的な意図の検証に置き換えることで、最近の大規模攻撃が無効化され、オープンリダイレクトリスクが実質的に中和され、デジタルセキュリティに対する真の制御権が回復されます。
改善された要約:
重大なセキュリティ欠陥により、ハッカーは標準的な MCP OAuth サーバーを欺き、ログイン時に悪意のあるウェブサイトのアドレスを受け付けさせることでユーザーアカウントを窃取することが可能です。この脆弱性は最近、Square などの大手企業に対し実証されており、ワンクリックで完全なアカウント乗っ取りを可能にします。核心的問題は、2026 年 5 月の研究で確認された通り、テスト対象の OAuth を備えた MCP サーバーの 95.8% が匿名のリクエスト元から任意の
redirect_uri 値を受け付ける点にあることが特定されました。これにより大規模なフィッシングのベクターが生じました。既存のシステムは登録設定や出版社のアイデンティティに依存していましたが、これらは不十分として却下されました。新しい解決策は、個人ユーザーレベルで厳格な信頼を強制します。この改善されたアーキテクチャでは、ユーザーは「信頼済みアプリ」リストで特定の HTTPS アドレスを手動で承認します。これらのアドレスは認証後のみ、ユーザー固有の信頼リストに対して検証されます。リスクを軽減するためには、サーバーは無権限なコードを即座に拒否し、信頼済みアドレスが削除された場合は全てのアクセスを取り消す必要があります。現在、信頼済みアドレスを追加するには、拒否ページでホストを手動でタイプする必要があります(リンクをクリックしない)。また、通常はメール検証も含まれます。この変更により、信頼できない登録設定をユーザーの直接的な意図の検証に置き換えることで、最近の大規模攻撃が無効化され、オープンリダイレクトリスクが実質的に中和され、デジタルセキュリティに対する真の制御権が回復されます。本文
ユーザー主導の信頼システム:MCP クライアントを安全に運用する方法
はじめに:現状の問題点
ご自身のエージェント(Slack ボット、VPS サービス、自作 MCP クライアントなど)を運用し、ストレージへのアクセス権を得たいと考えています。「ストリーム・ヴェセル」においてこれは S3 バケットの読み書き削除権限を意味します。
しかし、MCP の標準的な OAuth フロー(自己登録→ブラウザ認証→コード取得→トークン交換)では以下の壁に直面します。
- リダイレクト URI の制限: サーバーは
などの独自アドレスを受け付けないことがあります。https://agent.yourhost.example/callback - ホワイトリストの必要性: クロウドプロバイダー(Claude, ChatGPT など)が使用可能な固有のアドレスのみ許可されているため、独自のドメインを追加するにはオペレーターへの手動申請が必要です。
- セキュリティ上のジレンマ:
- 閉鎖的アプローチ: 不正なアクセスを防ぐが、ユーザーの柔軟性を阻害する(例:Atlassian や GitHub の制限)。
- 開放的アプローチ: 自由度が高いが、2026 年 5 月の研究によると95.8% のサーバーが「匿名かつ任意のリダイレクト URI」を受け入れる脆弱性を持ちます。
アタックシナリオ:ワンクリックでバケットへ
サーバー側が登録とリダイレクトアドレスの両方を許容すると、アカウントを持たない攻撃者は以下のようにユーザーを乗っ取れます。
のような偽のクライアントを匿名で登録する。https://evil.example/cb- ユーザーに「ストレージを再接続する」という
リンクを送信する。/oauth/authorize - ユーザーは自分のブラウザ上の真実な同意画面を見て誤って
をクリックする。Approve - コードが攻撃者のサーバーで受け取られ、トークン交換が行われる(身代わり攻撃)。
- PKCE の限界: PKCE はフローを開始したクライアントのみ完了可能ですが、攻撃者がこの「開始」を担当するため無効化されます。
- 同意画面の罠: リダイレクトホスト名は偽物に見えますが、ユーザーは本物の「Approve ボタン」を見て安心してしまいます。これは Microsoft 365 の承認プロンプトに対する偽アプリ攻撃と同様の手法です。
- 実例: Obsidian Security は Square の MCP サーバーに対し、自己登録で任意のリダイレクトを受け付ける仕様を報告しており、これによりユーザーのプロファイルや銀行情報が露見するリスクがありました。
仕様書と実際のギャップ
MCP の仕様書(RFC)はセキュリティについて明確な指示を出しつつも、実装ポリシーはサーバー側に委ねています。
- 仕様の要件:
: リダイレクト URI を厳密に検証する。MUST
: 信頼できる URI へのみリダイレクトする。SHOULD
: ユーザーに通知し、判断を委ねる(RFC 9700 の原則)。MAY
- 登録プロセスの変化:
- 2026 年 7 月からは動的クライアント登録(API 上での自己登録)が廃止され、**「クライアント ID メタデータドキュメント(CIMD)」**の導入へ移行しています。
- CIMD は「誰が発表したか」は示しますが、「ユーザーが接続を意図しているか」は示しません。
システム設計のアプローチ比較
| アプローチ | 例 | 接続範囲 | 脆弱性レベル |
|---|---|---|---|
| 固定許可リスト (Operator Defined) | pgEdge Postgres MCP | リストのみ(構成変更必須) | 低い |
| 完全開放型 (Open Registration) | 2026 年 5 月調査の 119 サーバー中 114 個 | 任意のクライアント | 高い: ワンクリックフィッシング可能 |
「固定許可リスト」は現実的なユーザーにとってコストが高く、修正困難です。サーバー側の変化が必須であることが示されました。
解決策:サインイン時における個別の信頼判断
ストリーム・ヴェセルでは、「オペレーターの許可リスト」と「ローカルクライアントのループバックアドレス(localhost)」は維持し続けます。これに加えて、各ユーザーごとの個別の決定権を付与します。
設計思想
- 登録時: 匿名かつ任意の HTTPS URI を受入る(誰かからの要求として)。
- サインイン時 (Authorize ページ): ユーザーが特定された時点で、そのユーザーが信頼するリストのみへのリダイレクトを許可。
- ルール: コードとエラーメッセージは、ユーザーが信頼していない限り、何のアドレスへもリダイレクトしない。
具体的な対策(7 つのポイント)
- ブラウザセッションによる管理: リスト変更はアプリや API トークンからはできないため、窃取されたトークンでの被害を防ぎます。
- 拒否画面からの追加制限: 「信頼して続行」ボタンはホスト名の手動入力まで無効化されています(単なるワンクリックでは利用不可)。
- 同意画面の透明性: 本次のサインインへ戻るアドレスと根拠(許可リスト内、ループバック、またはユーザーが明示的に信頼したこと)を明記します。
- 通知による監査: すべての追加はメールで通知され、アクティビティログに残ります(リンク化せずホスト名のみ)。
- 即時の切断: アドレス削除時に、与えられたすべての権限(授与)と進行中のコードを破棄します。
- 入力チェックの強化: ブラウザが
と表示する URI をサーバーは「不正」とみなして拒否します。good.example.evil - 正確一致のみ: ワイルドカードやプレフィックスマッチは許可されません。
社会的工学攻撃への対応と見解
この設計により、説得されたユーザーが攻撃者のホストを入力し承認した場合のリスクを完全にゼロにはできません。したがって私たちは「防ぐ」のではなく、以下の「制限」策を採用しました。
- 入力されたホストを表示する
- 警告メールを送信する
- 即時に接続を遮断する
- 同意画面で読み取り専用などをデフォルトとする
注意: 当初は書き込みアクセスのみに制限していましたが、データを削除できないリスクがあるため、現在は完全に解放しました。制限はバックアップ的な防御策と位置付けています。
ご自身の MCP サーバーへのチェックリスト
ご運用される MCP サーバーが安全か確認してください。
- リダイレクト先の決定タイミング: 登録時ではなく、サインイン済みのユーザーが特定された authorize ステージで決めているか。
- エラー処理の厳密さ: トークン交換だけでなく authorize ステージでも、自身のドメイン上のページへのみリダイレクトしているか(Cloudflare workers-oauth-provider の CVE-2025-4143 を参照)。
- 同意画面の説明: どのホストにリダイレクトし、なぜ許可されるかを明確に表示しているか。
- 追加の厳格さ: リスト拡張をサインインフローの外で行い、入力確認を行ってから実施しているか。
- 通知体制: アドレス追加時に必ずユーザーにメールを送信しているか。
- 削除時の挙動: 削除時に権限と進行中のコードを即座に破棄しているか。
- ホスト検証: ブラウザとサーバーで解釈が異なるホストを持つ URI は拒否しているか。
やってみませんか?
ご自身のエージェントへ、ストリーム・ヴェセルの MCP サーバーを追加し、上記の拒否画面を実際に試してみてください。もしあなたのエージェントがリストにない場合でも、手動でアドレスを入力して信頼を確認し、安全な接続を確立できます。
- MCP サーバー URL:
https://mcp.streamvessel.com
出典資料
- RFC 9700 (OAuth 2.0 セキュリティベストプラクティス)
- IETF OAuth WG: MCP DCR リダイレクト URL のリスク評価
- Zhou et al.: リアルワールドリモート MCP サーバーにおける認証セキュリティ調査 (2026 年 5 月)
- Obsidian Security: Square MCP サーバーに対する攻撃報告 (2026 年 1 月)
- n8n / Cloudflare: 過去に公開された関連する CVE リポート