MCP Apps Boundary

MCP Appsのセキュリティ設計|iframe・CSP・postMessage・書込み操作をどう守るか【2026】

MCP Appsで第三者UIを会話内に表示する際に、sandboxed iframe、CSP、postMessage、UI起点のtool callをどう分離・検証するかを整理します。

古野光太朗古野光太朗·2026.09.17·一次情報 7件
MCP AppのUIをサンドボックスiframeで表示し、postMessage検証、ホスト側ポリシー、人の承認、監査ログを経て操作する多層構成図

本文

結論から言うと、MCP Appsを安全にする中心は「iframeを使っているから安全」と考えないことです。MCP Appsは、MCP serverが返す対話UIをhostがsandboxed iframeで表示し、UIとhostの通信をJSON-RPCで扱う仕組みです。[1] iframe sandboxはparent pageのDOM、cookie、local storageへ直接触れないようにしますが、UIが要求したtool callをhostが実行できれば、書込みやデータ取得という副作用は起こり得ます。実装時には、表示の隔離、外部通信の制限、messageの送信元検証、tool権限と承認を別々に確認します。

最初に、Appの権限を「画面に表示する権限」と「外部へ作用する権限」に分けます。MCP Appsのtool UI templateは事前宣言でき、hostはrender前に取得・cache・security reviewできます。[2] ここでは、どのtoolがUIを出すか、画面がread-onlyか、保存・送信・削除を要求し得るかを、tool schemaとは別に棚卸しします。UIがきれいに見えることは、操作先が正しいことの証明ではありません。特に請求、CRM更新、権限変更、公開、削除は、UI上のbutton labelではなくserver側のtool policyで拒否または承認待ちにします。

次に、CSPをApp固有のallowlistとして扱います。MCP AppsのHTMLは通常のsame-origin web appではなくsandboxed iframeで動くため、network requestを行うAppは_meta.ui.cspにoriginを宣言します。connectDomainsはfetch、XHR、WebSocket向け、resourceDomainsはscript、style、image、font向けです。[3] 開発時のlocalhostも含め、実際に必要なoriginだけを明示します。https:のような広い指定や、便宜上のwildcardは避けます。さらにCSPは「browserに何を許すか」、CORSは「API serverがどのoriginを受け入れるか」を決める別の層です。片方だけを通しても、意図した通信になるとは限りません。

ただし、CSPはprompt injection、XSS、認可不備を解決する代替手段ではありません。W3CはCSPをcontent injectionの被害を抑えるdefense-in-depthと位置付け、入力検証・output encodingの代わりではないと明記しています。[4] Appが外部文書、検索結果、MCP tool outputを表示するなら、その内容を「操作命令」ではなく非信頼データとして扱います。CSPに通したCDNやAPIが侵害された場合、allowlistだけでは安全性を保証できません。

iframeとhostのpostMessageも、文字列を受け取るだけの実装にしません。MCP AppsのPostMessageTransportは、event.sourceを照合するためのwindowを必須にし、view側はwindow.parent、host側は対象iframeのcontentWindowを渡す設計です。[5] hostはmessageのschema、request ID、許可したmethod、対象toolを検証し、想定外のmessageをfail-closeで拒否します。Appが「この操作は安全」と説明しても、approval判断をAppの表示文言やmodel outputへ委ねません。

書込み操作は、read、reversible write、不可逆・高影響の三段階に分けます。readは必要最小限のscopeで自動実行を検討できます。下書き保存など戻せるwriteは、対象・差分・実行主体をpreviewし、監査可能にします。送信、公開、権限変更、削除、支出はhost側で人の確認を要求し、承認の対象をtool名だけでなくarguments、対象record、effectまで固定します。ChatGPTのdeveloper mode向け公式案内も、write/modify actionについてcontextと影響に応じたconfirmation、危険操作のblock、adminによる事前test・vetを示しています。[6]

海外では、MCP Appsは2026年1月にofficial extensionとして公開され、ChatGPT、Claude、Goose、Visual Studio Codeのsupportが案内されました。[7] 一方で、hostごとにsupportするcapability、承認UI、CSPのhost-specific originの扱いは同じではありません。対応clientを推測せず、対象hostでread tool、write tool、拒否、CSP違反、message偽装、network errorを実測します。MCP server自体が信頼できない場合のprompt injection riskも、OpenAIは明示しています。[6]

MCP Appのセキュリティレビューを相談する。

一次情報と確認範囲

確認日:2026年9月17日。製品仕様・制度は更新されるため、導入時はリンク先の最新版を再確認してください。海外の制度・職業規範は日本へ直接適用せず、相違点と限界を本文に明記しています。

  1. MCP Appsはhost管理のsandboxed iframeで表示される
  2. templateは事前宣言でき、hostはrender前にreviewできる
  3. CSPの`connectDomains`と`resourceDomains`は通信・resource originを分ける
  4. CSPはcontent injectionへのdefense-in-depthで、入力検証の代替ではない
  5. PostMessageTransportは`event.source`を照合する
  6. ChatGPTではwrite/modify actionに確認・block・admin reviewを設け得る
  7. MCP Appsは2026年1月にofficial extensionとして公開された
古野光太朗
古野光太朗 / 株式会社TechWorker 代表取締役 CEO兼CTO

上場企業を含む37社・2,500名の生成AI導入・研修支援で得た実務知をもとに、導入・運用・顧客理解を扱っています。この実績はTechWorkerの生成AI支援実績であり、個別製品の導入実績を示すものではありません。

MCP Appの表示境界と操作権限を点検する

iframe、CSP、メッセージ検証、ツール認可、承認を別々の防御としてレビューします。

AIセキュリティを相談する
← AIセキュリティ・ラボの記事一覧に戻る