AIモデルを外部データソースに接続するための標準であるModel Context Protocol (MCP) を使用する開発者は、カスタムエージェントを構築する際にしばしばジレンマに直面します。エージェントをS3バケットのようなサービスに接続するには、開発者はOAuth認証を使用する必要があります。しかし、多くのMCPサーバーは、ClaudeやVS Codeといったあらかじめ承認された既知のアプリケーションのリストからのリダイレクトURIのみを許可しています。サーバーがこれらのカスタムアドレスを拒否する場合、開発者は安全でない方法を使用せざるを得なくなり、逆に匿名登録中に提供された任意の住所を受け入れる場合は、重大なフィッシングの脆弱性を生じさせることになります。

認可サーバーが任意のリダイレクトURIを受け入れる場合、攻撃者は「Claude」のような名前で偽のクライアントを登録し、自身の悪意のあるURLをコールバックポイントとして設定することができます。ユーザーが「ストレージを再接続する」ためのリンクをクリックすると、実際のドメイン上で正当な同意画面が表示されますが、ユーザーは気づかないうちにワンタイム認証コードを攻撃者のサイトに直接送信してしまいます。この脆弱性の証拠は広く存在しており、2026年5月の調査では、テストされたMCPサーバーの約96%が匿名のリクエスト者からの任意のリダイレクトを受け入れていることが判明しました。現実の世界では、このような欠陥により、加盟店のプロフィールや銀行の詳細が侵害された事例がすでに発生しています。

この問題を解決するために、Stream Vesselは、信頼を初期登録時ではなく、サインインの瞬間にユーザーごとに決定する設計を導入します。サーバーは依然として多様なクライアントに対応するために任意のURIを匿名で登録することを許可しますが、ホストがグローバルな許可リスト、ループバックアドレス(localhostなど)、または特定のサインインしたユーザーによって管理される個人リストに含まれている場合にのみリダイレクトを実行します。ユーザーが攻撃者のホストを手動で追加するように騙されるソーシャルエンジニアリングを防ぐため、システムはユーザーが信頼リストに追加する前にホストアドレスをプレーンテキストとして入力することを要求します。これにより、自動監査メールと、新しく信頼されたアドレスに対するデフォルトの「読み取り専用」権限状態によってサポートされる意図的な摩擦(フリクション)が生み出され、ユーザーが騙されたとしても被害の範囲を限定できるようにします。

リダイレクトURIの認可決定ロジックを示すフロー図。
認可ロジックは、グローバル許可リスト、ループバックアドレス、またはユーザー固有の信頼リストに基づいて同意を付与するかどうかを決定します。streamvessel.com

この図は、サーバーが認可を進めるかどうかを決定するために、リダイレクトURIを異なる信頼レベル(グローバル、ループバック、または個人)に照らして評価するロジックフローを説明しています。

警告と、ユーザーが手動でホストアドレスを入力するためのテキストフィールドを表示する拒否ページ。
拒否ページでは、ユーザーにホストアドレスを手動で入力して信頼リストに追加することを要求し、ソーシャルエンジニアリングに対する意図的な摩擦を生み出します。streamvessel.com

この画像は、最終段落で説明されている、ユーザーが新しいホストを認可するためにプレーンテキストの入力を提供しなければならないセキュリティメカニズムを例示しています。