Prefab UIの隔離機能に深刻度10の欠陥|修正版は10月26日公開

米国の脆弱性の識別番号 CVE を割り当てる機関の一つである JFrog は、2026年11月1日の協定世界時15時24分(日本時間2日0時24分)、PrefectHQ が開発する OSS「Prefab UI」の欠陥を CVE-2026-120338 として公開しました。AIが書いたUIのコードを閉じ込めて動かすためのサンドボックス(隔離された実行の場)が、実際にはサーバーのファイルの読み書きと外部との通信を止めていなかったという内容です。深刻度の評価 CVSS 3.1 の基本値は、最も高い10.0です。
影響を受けるのは、Python の部品 prefab-ui の 0.14.0 から 0.20.2 までを使い、Generative UI の機能を有効にしたサーバーです。遠隔からの主な経路は、MCP(AIと外部の道具をつなぐ決まり)のサーバーを作る OSS「FastMCP」の生成UIの機能です。修正は10月26日に公開された 0.21.0 に入っています。
カメ先生AIが書いたコードを安全に動かすための箱に、穴が開いていたという話だ。箱の中から、サーバーのファイルを読んだり書き換えたりできた。
カメ子AIが書いたコードなら、悪いことはしないのではないですか。
カメ先生そのコードは、MCP のツールの引数として外から渡される。認証を設定していない FastMCP のサーバーなら、届く者は誰でもツールを呼べると CVE の記載にある。AIが書いたかどうかは関係なく、渡された中身がそのまま箱に入る。
カメ子箱に入れているから大丈夫、と思っていた中身が、実は箱の外に手を伸ばせたのですね。
- 11月1日、Prefab UI の Generative UI のサンドボックスが、ファイルの読み書きと通信の権限を持ったまま動いていた欠陥 CVE-2026-120338 が公開された。CVSS 3.1 は10.0
- 対象は prefab-ui 0.14.0〜0.20.2 で、Generative UI を有効にし、Deno が入ったサーバー。FastMCP の生成UIの機能が遠隔からの主な経路。修正は 0.21.0
- 悪用の有無、影響を受けるサーバーの数、開発元の勧告 GHSA-595q-jv4r-q7j9 の公開時期は、11月2日の時点で分かっていない
AIの導入・活用、何から始めるべきかお悩みですか?
デボノはアカウント開設・初期設定など「そもそものAI導入」から社内定着まで伴走支援。マーケティング活用など一歩進んだご相談にも対応します。
JFrog が11月1日に公開した CVE-2026-120338 の記載
CVE の記録を公開したのは、ソフトウェアの供給網の安全を扱う米国の企業 JFrog です。JFrog は CVE を割り当てる機関(CNA)として登録されており、今回の記録も同社が作りました。記録の題は、日本語にすると「Prefab UI の Pyodide サンドボックスからの脱出による、ホストでの遠隔コード実行」です。番号の予約は公開の12分前の15時12分でした。
記載によると、発見したのは Yuval Moravchick 氏で、調整は JFrog Security Research が担いました。欠陥の分類(CWE)は3つ挙がっています。保護の仕組みの失敗、コードの注入、権限の管理の不備です。発見の経緯は「外部からの報告」と記録されています。
米国の脆弱性データベース NVD には、同じ日の協定世界時16時18分(日本時間2日1時18分)に載りました。NVD の画面に出ている評価は JFrog が付けた10.0だけで、NVD 自身の分析はまだ付いていません。NVD の状態は、受け付けた段階を示す表示のままです。NVD が独自に評価を付けると、深刻度の値が JFrog の評価と異なる形で並ぶこともあります。
Prefab UI と Generative UI のサンドボックス
Prefab UI は、Python で画面の部品を組み立てる OSS です。リポジトリの説明は「人間でも使える生成UIのフレームワーク」で、作者は FastMCP の作者でもある jlowin 氏です。リポジトリは2026年2月に作られ、11月2日の時点で星(利用者の評価)は約750、派生は76です。使用許諾は Apache 2.0 です。
Generative UI は、AIのモデルに Prefab の Python のコードを書かせ、そのコードを動かして画面を作る機能です。開発元の文書は「AIが書いたコードをサンドボックスが安全に実行する」と説明しています。サンドボックスの中身は2層で、Python を WebAssembly(ブラウザなどで動く共通の実行形式)に移した Pyodide を、JavaScript の実行環境 Deno の別の処理として動かします。
CVE の記載は、この機能が「AIが書いたUIを含む、信頼できないコードの隔離」として文書化されていたと書いています。つまり、中で動くコードは信用できないものとして扱う、という約束の機能でした。サンドボックスは 0.14.0 で初めて入り、Generative UI は利用者が自分で有効にする機能です。
FastMCP の文書は、サンドボックスの中で使えるのは Python の標準の部品と Prefab だけで、外部の部品を読み込もうとすると誤りになると説明しています。ただし、これは使える部品の制限で、サーバーのファイルや外部との通信に触れられるかどうかとは別の話です。CVE が問題にしたのは後者で、部品の制限が効いていても、Deno に残った権限を通じてサンドボックスの外に届いていました。
3月の追加から11月1日の公開までの経緯
経緯は、CVE の記録にある時系列と、GitHub の記録、PyPI の掲載時刻から組み立てられます。下の表の時刻は協定世界時(UTC)と日本時間です。CVE の時系列は、サンドボックスが加わった時点で、既に読み・書き・通信の権限を付けて起動する作りだったと記しています。
| 日時(UTC/日本時間) | 出来事 |
|---|---|
| 3月24日 17時21分/25日 2時21分 | サンドボックスを加える変更が入る。この時点で読み・書き・通信の権限付きで起動 |
| 3月27日 2時36分/11時36分 | サンドボックスを含む最初の版 0.14.0 が PyPI に公開 |
| 6月3日 2時13分/11時13分 | 0.20.2 が公開。後に試験で欠陥が確かめられた版 |
| 8月5日 16時12分/6日 1時12分 | PrefectHQ に GHSA-595q-jv4r-q7j9 として報告 |
| 10月25日 18時48分/26日 3時48分 | 修正を含む変更(プルリクエスト538)が取り込まれる |
| 10月26日 19時00分/27日 4時00分 | 修正版 0.21.0 が PyPI に公開。勧告の文は添えられず |
| 10月26日 19時17分/27日 4時17分 | 0.21.1 が公開(文書の表示の修正) |
| 11月1日 15時24分/2日 0時24分 | JFrog が CVE-2026-120338 を公開 |
| 11月1日 16時18分/2日 1時18分 | NVD に掲載 |
サンドボックスが入った 0.14.0 から修正版の 0.21.0 までは、約7か月です。その間に出た版はすべて対象の範囲に入ります。CVE の記録は、8月の報告の時点の状態を「勧告は選別の段階で、CVE の番号は無い」と書いており、番号は11月1日に JFrog が付けました。
サンドボックスに残っていた読み・書き・通信の権限
Deno は、起動するときにファイルの読み取り、書き込み、ネットワークの利用をそれぞれ許すかどうかを決められる作りです。何も許さずに起動すれば、中で動くコードはファイルにも外部にも触れません。CVE の記載によると、0.14.0 から 0.20.2 では、Deno が読み・書き・通信の3つを制限なしで許された状態で起動していました。
それに加えて、Deno の機能が中の Python の側から呼べる状態になっていました。Pyodide には JavaScript の側の機能を Python から使う仕組みがあり、Deno の機能が隠されていなかったためです。その結果、サンドボックスに入れたコードが、サーバーの OS の利用者の権限でファイルを読み書きできたと CVE の記載は書いています。
記載は、サーバーの Python の仮想環境に書き込むことで、コードを動かし続ける状態にもつながると書いています。サンドボックスの中で一度動いただけのコードが、サーバーの Python が次に起動したときにも動く形を作れる、ということです。書き込みの具体的な方法は CVE の記録に書かれており、本文では触れません。
10.0と9.9、2つの評価が想定する場面
CVE の記録には、CVSS 3.1 の評価が2つ付いています。1つ目は10.0で、想定する場面は「Generative UI を有効にし、Deno が入り、認証を設定していない FastMCP のサーバー」です。遠隔から、複雑な条件なしに、権限も利用者の操作も要らずに突ける、という評価です。
2つ目は9.9で、想定する場面は「信頼できないコードを Generative UI のサンドボックスで動かすサーバーで、ツールを呼ぶことを許された認証済みの利用者」です。1つ目との違いは、攻撃する側に低い権限が要る点だけです。どちらも区分は最も高い「緊急」です。
2つの評価に共通するのは、影響の範囲が「変更あり」とされている点です。CVSS では、欠陥のある部品の外側にまで影響が及ぶことを示します。今回の外側は、サンドボックスを動かしているサーバーです。機密性・完全性・可用性の3つの影響は、いずれも最も高い評価です。NVD の画面には、10.0の評価だけが表示されています。
FastMCP の GenerativeUI プロバイダーという経路
CVE の記載は、遠隔からの主な経路として FastMCP の GenerativeUI プロバイダーを挙げています。FastMCP は MCP のサーバーと利用側を Python で作るための OSS で、GitHub の星は約2万8,000です。FastMCP の文書によると、生成UIの機能は 3.2.0 で加わりました。
FastMCP の文書の説明では、このプロバイダーをサーバーに登録すると、3つのものが加わります。AIが書いた Prefab のコードを受け取ってサンドボックスで動かし、画面として返すツールと、部品を調べるツール、途中まで書かれたコードをブラウザの側で表示する仕組みです。コードを受け取るツールは、最後にサーバーの側で全体をもう一度動かして確かめます。このサーバーの側での確認に、欠陥のあるサンドボックスが使われていました。
CVE の記載によると、このツールは受け取ったコードをそのままサンドボックスに渡します。MCP のツールは、AIのモデルが呼ぶことを想定していますが、仕組みの上ではサーバーに届く利用側なら誰でも呼べます。認証を設定していない FastMCP のサーバーでは届く者なら誰でも、認証がある場合もツールを呼ぶことを許された利用者なら、コードを渡せるとされています。
影響を受ける版と条件
影響の範囲は、CVE の記録の対象の欄と記載の文に書かれています。PyPI で配られている prefab-ui のうち、0.14.0 以上で 0.21.0 より前の版が対象です。欠陥のあるファイルとして、サンドボックスを起動する Python の部品と、中で動く処理の部品の2つが挙がっています。
| 項目 | CVE の記録と開発元の記載 |
|---|---|
| 部品 | prefab-ui(PyPI で配布。リポジトリは PrefectHQ/prefab) |
| 対象の版 | 0.14.0 から 0.20.2 まで(0.21.0 より前)。試験で確かめたのは 0.20.2 |
| 修正版 | 0.21.0(10月26日公開)。11月2日時点の最新は 0.21.1 |
| 機能の条件 | Generative UI を利用者が有効にしていること |
| 環境の条件 | サーバーに Deno が入っていること |
| 主な経路 | FastMCP の GenerativeUI プロバイダーが登録するツール |
| 誰が突けるか | 認証なしのサーバーでは届く者すべて。認証ありではツールを呼べる利用者 |
| 得られる権限 | サーバーの OS の利用者の権限でのファイルの読み書き。継続的なコード実行にもつながる |
Prefab UI を画面の部品として使うだけで、Generative UI を有効にしていない場合は、CVE の記載の条件に当たりません。一方、FastMCP の生成UIの機能を登録したサーバーでは、ツールが外から呼べる限り、AIのモデルを介さずにコードを渡せることになります。認証の設定の有無で、突ける者の範囲が変わります。
0.21.0 の修正で変わった3つの点
CVE の記載によると、0.21.0 の修正は3つの点からなります。1つ目は、Pyodide の実行環境と Prefab の部品を読み込んだ後、コードを受け付ける前に、Deno の読み・書き・通信の権限を取り消すことです。取り消した後に渡されるコードは、ファイルにも外部にも触れられません。
2つ目は、権限の要求に応じる確認の画面を出さない形で起動することです。これにより、中のコードが権限を求めても、あらためて許されることがありません。3つ目は、起動の途中の通信の先を、部品の配信元である jsDelivr の配信網に限ることです。起動の時点で必要な部品を取ってくる通信だけが残ります。
修正は、プルリクエスト538の変更として取り込まれました。作られたのは10月25日の協定世界時18時30分で、18分後の18時48分に取り込まれています。題は「依存関係の更新と、描画とサンドボックスの不具合の修正」で、本文には生成されたコードを動かす前に起動時のファイルと通信の権限を取り消すという一文があります。
報告から修正まで81日、修正から公開まで約6日
CVE の時系列では、報告は8月5日、修正の取り込みは10月25日です。その間は81日です。報告は GitHub の非公開の勧告の仕組みで行われ、勧告の番号 GHSA-595q-jv4r-q7j9 が付きました。時系列は、この勧告が CVE の公開の時点でも選別の段階にあったと書いています。
修正版の 0.21.0 は10月26日の協定世界時19時に PyPI に出ました。CVE の公開は11月1日の15時24分で、その差は約6日です。この6日の間、修正版は配られていましたが、0.21.0 が安全上の修正を含むことは、版の説明からは読み取りにくい状態でした。
CVE の記録は、0.21.0 の公開について「版と一緒に開発元の勧告の文は出されなかった」と明記しています。修正の公開が先、欠陥の公表が後という順番で、間の期間に版を上げた利用者は、理由を知らないまま修正を受け取っていたことになります。
リリースノートに書かれなかったサンドボックスの修正
0.21.0 のリリースノートの冒頭は、新しい機能 AppTool の説明です。Prefab のアプリが MCP の利用側にツールを見せ、AIのエージェントが利用者と同じ画面を操作できるようにするものです。続いて、グラフの部品、操作と状態の扱い、読み上げへの対応、見た目の切り替えの追加が並びます。
サンドボックスに触れているのは、「実行環境と配布」の項目の一行です。依存関係の更新、サンドボックスの起動と終了や出力の扱いの修正などが並ぶ中の一つで、権限の取り消しや安全上の修正という言葉はありません。変更の一覧にはプルリクエスト538の題が載っていますが、題も依存関係の更新と不具合の修正です。
CVE の記録とリポジトリの記載の違いは、次のとおりです。CVE の記録は 0.21.0 を「欠陥の修正版」と明示し、権限の取り消しを修正の中身として説明しています。リポジトリのリリースノートは、同じ変更を不具合の修正の一つとして扱っています。11月2日の時点で、リポジトリの勧告のページは外から見られない状態でした。
0.21.0 の変更の一覧には、サンドボックスに関わる変更がほかに2つあります。Deno のサンドボックスの処理の後始末を確実にする変更と、取り消された起動の後片付けの変更で、どちらも jlowin 氏によるものです。いずれも題は動作の不具合の修正で、権限には触れていません。0.21.0 の18分後に出た 0.21.1 は、文書の表示の不具合だけを直した版で、サンドボックスの変更は含みません。
開発元の文書が書き足した「WebAssembly だけでは境界にならない」
Prefab の公式の文書の Generative UI の説明は、11月2日の時点で、修正後の作りを書いています。文書によると、コードは使い回される Pyodide の実行環境で動き、起動の後に Deno のファイルと通信の権限は取り消されます。権限を求める確認の画面は出ない設定です。
同じ文書は、この作りの限界も書いています。実行環境と読み込んだ部品は呼び出しの間で共有され、呼び出しごとに Python を隔離するものではないとあります。さらに、WebAssembly で動かすだけでは、ホストを守る境界にはならないとも書いています。
CVE の記載が引いた以前の文書は、この機能を信頼できないコードの隔離と説明していました。修正後の文書は、権限の取り消しという具体的な仕組みを示したうえで、隔離の範囲を狭く書いています。文書がいつ書き換えられたかは、文書の画面には示されていません。
修正後の文書は、起動の途中と、コードを受け付けた後の動きを分けて書いています。起動の途中では、Deno が Prefab の部品と Pyodide の実行環境を読み込み、jsDelivr の配信網から部品を取ってきて、手元の一時置き場に書き込みます。コードを受け付けた後は、仮想のファイルの領域と、先に読み込んだ Prefab と Pydantic の部品だけを使います。呼び出しの途中で部品を追加で入れることは、対応していないと書かれています。
Deno の導入をめぐる Prefab と FastMCP の文書の違い
CVE の記載は、欠陥が成り立つ条件の一つに、ホストに Deno が入っていることを挙げています。Prefab の文書も、ホストに Deno を入れておく必要があると書いています。Deno が無いサーバーでは、サンドボックスそのものが動きません。
一方、FastMCP の生成UIの文書は、サーバーの側でコードを確かめる Pyodide のサンドボックスについて「Deno が要り、最初の利用のときに自動で入る」と書いています。この説明に従えば、FastMCP で生成UIの機能を登録したサーバーでは、利用者が自分で Deno を入れていなくても、使い始めた時点で条件がそろう場合があります。
CVE の記録は、自動で入る場合について触れていません。Deno が入っていることという条件が、FastMCP の利用者にとってどの程度の絞り込みになるかは、2つの文書の書き方で受け取り方が変わります。FastMCP の文書は、サンドボックスの外に何が漏れうるかという守りの範囲も説明していません。
FastMCP の依存の指定と10月末のリリース
FastMCP は、生成UIの機能を使う追加の部品の組み合わせで prefab-ui を取り込みます。11月2日の時点の最新の 4.1.5 では、この組み合わせが求める prefab-ui は 0.18.0 以上です。新しく入れれば最新の 0.21.1 が選ばれますが、既に 0.18.0 から 0.20.2 が入っている環境では、FastMCP の指定を満たしたまま古い版が残ります。
修正版の公開の後、FastMCP は10月26日に 4.1.4、27日に 4.2.0 の最初の試験版、11月1日に 4.1.5 と 4.2.0 の2番目の試験版を出しました。いずれのリリースノートにも安全上の修正の欄があり、Prefab の描画の扱いに関する変更も載っています。ただし、Prefab UI のサンドボックスの欠陥や 0.21.0 への更新を求める記載は見当たりません。
FastMCP のリポジトリには公開済みの勧告がいくつかありますが、11月2日の時点で、この件に当たるものは載っていません。Prefab のリポジトリの公開済みの勧告の一覧は空でした。FastMCP の側で利用者に知らせる予定があるかどうかは、どの記録にも書かれていません。
Prefab UI と FastMCP は、どちらも PrefectHQ のリポジトリで、作者も同じ jlowin 氏です。Prefab UI の星は約750ですが、生成UIの機能は FastMCP の追加の部品を通じて、星が約2万8,000ある FastMCP の利用者にも届きます。どれだけの FastMCP の利用者が生成UIの機能を登録しているかは、公表されていません。
現時点で分かっていないこと
11月2日の朝(日本時間)の時点で、CVE の記録、NVD、Prefab と FastMCP のリポジトリと文書のいずれにも、次の点の答えはありません。11月2日の検索では、この件の報道も見当たりませんでした。
1つ目は、悪用の有無です。CVE の記録は悪用の報告に触れていません。2つ目は、影響を受けるサーバーの数です。Generative UI を有効にし、外から届く状態の FastMCP のサーバーがどれだけあるかを示す数字は、どこにもありません。3つ目は、開発元の勧告 GHSA-595q-jv4r-q7j9 がいつ公開されるかです。CVE の記載は FastMCP を「主な経路」と書いており、FastMCP を使わずに Prefab UI の Generative UI を自前の仕組みに組み込んだ場合については、具体的な例を挙げていません。そうした使い方がどれだけあるかも分かっていません。
4つ目は、FastMCP の側で利用者に知らせるかどうかと、依存の下限を 0.21.0 に上げるかどうかです。5つ目は、NVD 自身の評価が JFrog の10.0と同じになるかどうかです。6つ目は、8月の報告から10月の修正まで81日かかった事情で、開発元はこれを説明していません。7つ目は、修正前の版で作られた仮想環境への書き込みが残っているかどうかを、開発元が確かめる方法を示すかです。
JFrog と開発元が示していること
JFrog の CVE の記録は、修正版を 0.21.0 と示し、修正のコミットとプルリクエスト538を参照先に挙げています。試験で欠陥を確かめた版は 0.20.2、サンドボックスが最初に入った版は 0.14.0 です。記録は、修正の中身として権限の取り消しと、権限の再付与を許さない起動と、起動時の通信先の制限の3つを説明しています。
記録には、Generative UI が利用者の有効にする機能であることと、FastMCP のサーバーでは認証の設定の有無で突ける者が変わることも書かれています。開発元の PrefectHQ は、リリースノートと文書で修正後の作りを示していますが、利用者に何を求めるかを述べた勧告の文は、11月2日の時点で公開されていません。詳しい内容は、CVE の記録と、今後公開される開発元の勧告にあります。
- 2026年11月2日の朝(日本時間)に、CVE の記録(11月1日公開の版)、NVD の掲載、Prefab と FastMCP のリポジトリ・リリースノート・文書、PyPI の掲載を確認して書いています。
- 開発元の勧告は未公開です。勧告の公開や NVD の分析で、影響を受ける版・評価・条件の説明が変わる可能性があります。
まとめ
11月1日、JFrog は Prefab UI の欠陥 CVE-2026-120338 を公開しました。Generative UI のサンドボックスが、0.14.0 から 0.20.2 まで、Deno の読み・書き・通信の権限を制限なしで持ったまま動いていたという内容で、中に入れたコードはサーバーの OS の利用者の権限でファイルを読み書きできました。CVSS 3.1 の評価は、認証なしの FastMCP のサーバーを想定して10.0、認証済みの利用者を想定して9.9です。
修正は10月26日公開の 0.21.0 に入り、コードを受け付ける前に権限を取り消す作りになりました。ただし、リリースノートは修正を不具合の修正の一つとして扱い、開発元の勧告は11月2日の時点で公開されていません。FastMCP の依存の指定は 0.18.0 以上のままです。
悪用の有無、影響を受けるサーバーの数、開発元と FastMCP の側からの告知の予定は分かっていません。8月の報告から修正まで81日、修正から CVE の公開まで約6日という経緯の事情も、開発元は説明していません。
※本記事にはAIが活用されています。編集者が確認・編集し、可能な限り正確で最新の情報を提供するよう努めておりますが、情報の完全性、正確性、最新性、有用性等について保証するものではありません。本記事の内容に基づいて行動を取る場合は、読者ご自身の責任で行っていただくようお願いいたします。
AIの導入・活用、何から始めるべきかお悩みですか?
デボノはアカウント開設・初期設定など「そもそものAI導入」から社内定着まで伴走支援。マーケティング活用など一歩進んだご相談にも対応します。
