[緊急警告] Vitestブラウザモードに深刻なリモートコード実行 (RCE) の脆弱性 (GHSA-g8mr-85jm-7xhm / CVE-2026-53633)
はじめに
Vitestをご利用のフロントエンドエンジニアの皆さん、重要なセキュリティ情報です。この度、Vitestのブラウザモードに深刻なリモートコード実行 (RCE) の脆弱性 (CVE-2026-53633 / GHSA-g8mr-85jm-7xhm) が発見されました。この脆弱性は「critical」と評価されており、設定次第では外部からの攻撃によってVitestを実行している環境が乗っ取られる可能性があります。開発環境やCI/CD環境での利用も多いため、速やかに内容を確認し、対応してください。
脆弱性の概要と仕組み
この脆弱性は、Vitestのブラウザモードが提供するChrome DevTools Protocol (CDP) のAPIが、セキュリティ設定で適切に保護されていないことに起因します。通常、Vitestの設定でファイル書き込み (`allowWrite: false`) やコマンド実行 (`allowExec: false`) を無効にしていても、CDPのAPIはこれらの設定の影響を受けません。これにより、悪意のある攻撃者はCDPを介してこれらの制限を迂回し、ファイルシステムへの書き込みやコマンド実行に相当する操作をリモートから実行できてしまいます。
具体的な攻撃シナリオ
攻撃者は以下のステップでVitest実行環境を乗っ取ることが可能です。
1. **情報抽出:** まず、Vitestのブラウザランナーページから、ブラウザAPIの認証に必要なAPIトークン、セッションID、そしてプロジェクトのルートパスといった情報を抽出します。
2. **API接続:** 抽出した情報を用いて、ブラウザAPIのWebSocketに接続します。
3. **ダウンロードパスの設定:** CDPの `Page.setDownloadBehavior` メソッドを呼び出し、ダウンロード先のフォルダをプロジェクトのルートに設定します。
4. **悪意のあるファイルの上書き:** 次に、`Runtime.evaluate` メソッドを使用して、悪意のある内容(例: シェルコマンドを含むNode.jsコード)が記述された `vite.config.ts` ファイルをダウンロードさせ、プロジェクトルートにある本来の `vite.config.ts` を上書きします。
5. **RCEの実行:** Vitestは設定ファイルの変更を検知すると自動的にリロードを行うため、上書きされた `vite.config.ts` に仕込まれたNode.jsコードが、Vitestを実行しているサーバー上で実行されてしまいます。これにより、結果としてリモートコード実行 (RCE) に繋がります。
特に影響を受ける環境
この脆弱性の影響を最も受けるのは、以下の条件を満たすプロジェクトです。
* Vitestの**ブラウザモード**を使用している。
* Playwright Chromiumのような**CDP対応のプロバイダ**を利用している。
* そして最も重要なのが、`--browser.api.host=0.0.0.0` のように、ブラウザAPIサーバーが**ローカルネットワークだけでなく、インターネットを含む外部ネットワーク全体に公開されている**場合です。この設定をしている場合、リモートからの攻撃が容易になります。
直ちに取るべき対応策
この脆弱性に対する迅速な対応が不可欠です。Vitestのブラウザモードを使用しており、APIサーバーをネットワークに公開している場合(特に `host: '0.0.0.0'` などの設定をしている場合)、以下の対策を直ちに実施してください。
`--browser.api.host` オプションや Vitest の設定ファイルで指定されている `browser.api.host` の値を、信頼できるローカルネットワークのみからのアクセスに制限するか、完全に無効にしてください。
* **推奨:** `host` オプションは `localhost` または `127.0.0.1` に限定することを強く推奨します。
* **代替:** 必要であれば、特定のローカルIPアドレス範囲のみに制限することも検討してください。
Vitestのセキュリティパッチがリリースされ次第、速やかに最新バージョンへのアップデートを検討してください。最新のセキュリティ対策が施されたバージョンを利用することが、恒久的な解決策となります。
まとめ
Vitestのブラウザモードにおけるこの深刻な脆弱性は、開発環境やCI/CD環境を危険に晒す可能性があります。特にAPIサーバーを外部に公開している場合は、リモートからのRCE攻撃を受けるリスクが高まります。本記事で説明した対応策、特にAPIサーバーの公開範囲の制限を**直ちに実施**し、プロジェクトの安全を確保してください。