本文へ

利用状態: ログイン状態を復元中...

Deep DiveAbcas Security Research

Local MCPのHTTP公開: DNS rebindingを止めるOrigin検証

localhost上のMCP HTTP serverにもbrowser経由のDNS rebindingが届きます。loopback bind、受信Origin検証、request認証を別々の導入条件として確認します。

Read in English

127.0.0.1でlistenするserviceでも、信頼したdesktop softwareだけが呼べるとは限りません。Browser JavaScriptはnetwork宛にrequestを送り、DNS rebindingは、page読込後に攻撃者管理のhostnameをloopbackやprivate addressへ解決させます。Local Streamable HTTP MCP serverがそのrequestを受け入れると、remote websiteからlocal-onlyと考えていたtoolへ到達される可能性があります。

Current MCP Streamable HTTP仕様の2026-07-28は、受信connectionのOriginを検証し、不正なOriginが存在する場合はHTTP 403を返すこと、local実行時は0.0.0.0ではなく127.0.0.1へbindすること、適切な認証を実装することをそれぞれ求めています。同じ保護はFinal版2025-11-25にもあり、一般に利用される両transport世代に適用できます。

3つのcontrolは別の問いに答える

Control確認できること確認できないこと
Loopback bindどのnetwork interfaceで受けるかどのbrowser originがrequestを開始したか
Origin検証そのweb originからの呼出しを許すか利用者の本人性や実行権限
認証・認可どのprincipalとscopeがtoolを呼べるか他interfaceから到達不能であること

導入時はframeworkのdefaultではなく、実processまたはcontainerのlisten addressを記録します。Containerのport publishやreverse proxyにより、内部bindがLAN公開へ変わることがあります。ProxyでHTTPを終端する場合は、Originが改変されずMCP applicationへ届き、JSON-RPC parseやtool dispatchより前に検証されることを確認します。

Allowlistはscheme、hostname、portを含む完全なoriginでexact matchします。「example.comで終わる」、wildcard、受信値の反射は境界になりません。Originなしのrequestも明示的に扱います。Native MCP clientは省略する場合があり、browserは通常付与します。文書化したnative-client経路で欠落を許可しても、認証まで省略してはいけません。

HostとOriginは別物です。Hostはclientが選んだHTTP宛先、Originはbrowser requestを開始したweb security contextを示します。Host検証はrouting controlを補えますが、仕様が求めるOrigin検証の代わりではありません。またAccess-Control-Allow-Originの設定だけでは、browser codeがresponseを読めるかを制御するにすぎません。変更requestは既にserverへ届く可能性があるため、不正な受信Originをserver側で拒否します。

範囲を限定した受入試験

正式対応するnative clientから、想定認証付きのtool通信が成功することを確認します。未許可originのbrowser test pageからsimple requestとpreflightを伴うrequestを送り、いずれもtool実行前に失敗することを確認します。すべての本番ingress経路と不一致Hostで繰り返します。Remote利用を意図して認証している場合を除き、LANやwildcard interfaceでlistenしていないことも確認します。

公式versioningは2026-07-28をCurrent、/draftを未確定としています。Draftは変わり得るため、実配布物がnegotiationするprotocol versionとtransport実装に受入結果を結び付けます。

確認範囲と限界

Origin検証が主に防ぐのはbrowser経由の到達とDNS rebindingです。Malwareや別local processからの直接request、local MCP processによるfilesystemやOS credentialへのaccessは止めません。Loopback、Origin、認証、最小権限実行、tool-level認可を別々に確認します。