【ITニュース解説】Prefab UI's Python Sandbox Could Read and Write Your Server's Files. Upgrade to 0.21
2026年11月02日に「Dev.to」が公開したITニュース「Prefab UI's Python Sandbox Could Read and Write Your Server's Files. Upgrade to 0.21」について初心者にもわかりやすく解説しています。
ITニュース概要
Prefab UIのPythonサンドボックスに深刻な脆弱性があり、サーバー上のファイルを読み書きしたり、悪用されると任意のコードを実行される可能性があった。この問題はバージョン0.21.0で修正済みのため、速やかにアップデートしシステムを保護する必要がある。
ITニュース解説
Prefab UIという、ユーザーインターフェースを生成するフレームワークに、非常に深刻なセキュリティ上の問題が発見された。この問題は、悪意のある攻撃者がサーバー上のファイルを自由に読み書きし、さらには任意のプログラムコードを実行できてしまうというもので、CVSSというセキュリティの危険度評価基準では最高の10.0とされており、極めて危険な脆弱性である。この脆弱性は、バージョン0.14.0から0.20.2までのPrefab UIに存在し、現在はすでに修正版の0.21.0および0.21.1が提供されている。
この脆弱性の根本原因は、Prefab UIがユーザーから提供されたPythonコードを実行する際に利用していた「Generative UIサンドボックス」の設計に穴があったことである。サンドボックスとは、プログラムを外部のシステムから隔離し、危険な操作を防ぐための安全な実行環境を指す。Prefab UIでは、PyodideというWebAssemblyにコンパイルされたPythonを、DenoというJavaScript/TypeScriptの実行環境上で動かしていた。Deno自体はセキュリティを重視して設計されており、デフォルトではファイルシステムやネットワークへのアクセスが制限されている。しかし、Prefab UIのサンドボックスを起動する際、Denoに--allow-read、--allow-write、--allow-netという無制限の権限が与えられていた。これにより、本来Denoが提供するはずの隔離機能が完全に失われていたのである。さらに、Pyodide内でDenoのファイル操作API(例えばjs.Deno.readTextFileSyncやjs.Deno.writeTextFileSyncなど)が直接呼び出せる状態であったため、Pythonコードからサーバーのファイルシステムに自由にアクセスできてしまう状況だった。開発者はこのサンドボックスを「読み取り専用」と説明していたが、実際には書き込みも可能であったことが判明している。
ファイルを読み書きできるだけでも重大な問題であるが、攻撃者はこの能力を悪用して、サーバー上で任意のコードを実行することも可能だった。具体的な手口として、攻撃者はサーバーの仮想環境にあるsite-packagesというディレクトリに.pthファイルという特殊なファイルを書き込むことができる。.pthファイルはPythonの起動時に自動的に読み込まれ、その中に記述されたimport文が実行されるという仕組みがある。この仕組みを利用することで、サンドボックスの外部で、つまり何の制限もない状態で、攻撃者の意図するプログラムがサーバー上で実行されてしまうのである。一度悪意のあるコードが仕込まれてしまうと、その環境でPythonインタプリタが起動するたびに、攻撃者のコードが実行されてしまうため、非常に危険な状態となる。
この脆弱性は、特にFastMCPというフレームワークでGenerative UIプロバイダを有効にしているサーバーに大きな影響を与える。FastMCPサーバーのデフォルト設定では認証が不要(auth=None)な場合があり、その場合、ネットワークからアクセス可能な任意のクライアントが悪用できてしまう。認証が設定されていても、ツールを呼び出す権限を持つクライアントであれば、この脆弱性を悪用できる可能性があった。さらに、直接的な攻撃だけでなく、「プロンプトインジェクション」と呼ばれる手法も考えられる。これは、悪意のある入力によってAIモデルの振る舞いを操作し、サンドボックスに送り込むコードを書き換えさせるというものである。例えば、AIチャットボットに特定の指示を与えることで、モデルがサーバーのファイルを削除するようなPythonコードを生成し、それをサンドボックスに送り込んで実行させるといったシナリオが考えられる。
幸いにも、この脆弱性に対する修正はすでにリリースされている。バージョン0.21.0と0.21.1では、サンドボックスの起動プロセスが改善され、生成されたコードが実行される前にDenoのファイルシステムおよびネットワークアクセス権限が確実に剥奪されるようになっている。Denoは--no-promptオプション付きで起動されるため、後から権限を再取得することもできない。また、ブートストラップ時のネットワークアクセスも特定のCDN(コンテンツ配信ネットワーク)に限定されている。これにより、JFrog Security Researchが行ったテストでは、ファイルの読み書きを試みるペイロード(攻撃コード)がDenoの権限エラーで失敗することを確認しており、サンドボックスとしての隔離機能が適切に動作するようになった。
システム管理者は、速やかに使用しているPrefab UIのバージョンを確認し、0.21.0以上にアップグレードする必要がある。FastMCPを使用している場合は、fastmcp[apps]という依存関係を通じてPrefab UIが導入されている可能性もあるため、明示的に追加していなくても確認が必須である。具体的な確認方法として、python -m pip show prefab-uiコマンドでインストールされているバージョンを調べたり、grep -rn "GenerativeUI" --include="*.py" .でGenerative UIプロバイダが登録されていないか確認したり、command -v denoでDenoがインストールされているかを確認したりすることが推奨される。
もし脆弱なサーバーがすでに信頼できないクライアントからアクセス可能な状態であった場合、単にアップグレードするだけでは、過去に書き込まれた悪意のあるファイルが削除されるわけではない。そのため、サーバーの仮想環境をアクティベートした上で、ls -la "$(python -c "import sysconfig; print(sysconfig.get_paths()['purelib'])")"/*.pthといったコマンドを使って、site-packagesディレクトリ内の.pthファイルに不審な記述がないか手動で確認することが非常に重要である。もし今すぐアップグレードできない状況であれば、信頼できないクライアントがアクセスできるサーバー上でGenerative UIを登録しないようにすることが、当面の被害を避けるための唯一の対策となる。
今回の事態は、「サンドボックス」という言葉が示す隔離機能が、設計通りに機能しているかを常に検証する必要があるという重要な教訓を与えている。単に「サンドボックスで実行されるから安全」と鵜呑みにするのではなく、実際に隔離された環境内で意図的にファイルへのアクセスや外部ネットワークへの接続を試みるテストを行い、その隔離が本当に破られていないかを確認することが不可欠である。AIモデルが生成するコードをシステム内で実行する際は、それがサーバーのディスクに触れたり、外部のネットワークに接続したりするのを、何がどのように防いでいるのかを明確に理解しておく必要がある。この原則は、Pythonに限らず、JavaScriptのWeb Workerやコンテナ技術など、コードを隔離して実行するあらゆる状況に当てはまる基本的なセキュリティ意識である。