[緊急警告] Vitestブラウザモードの深刻な脆弱性 (XSS -> RCE) について
はじめに:VitestブラウザモードのRCE脆弱性とは?
フロントエンド開発のテストランナーとして人気のVitestに、非常に深刻な脆弱性 (GHSA-2h32-95rg-cppp / CVE-2026-47428) が発見されました。この脆弱性は、Vitestの「ブラウザモード」を使用している場合に影響を受け、最悪の場合、開発中のPC上で任意のシステムコマンドが実行される「リモートコード実行 (RCE)」に繋がる可能性があります。早急な対応が求められます。
脆弱性の詳細:なぜXSSからRCEに繋がるのか
今回の脆弱性の根幹は、Vitestブラウザモードが提供するWebページにおいて、URLのクエリパラメータである`otelCarrier`が適切にサニタイズされずに、JavaScriptコードとしてDOMに直接埋め込まれてしまうことにあります。これは典型的な「クロスサイトスクリプティング (XSS)」脆弱性です。
攻撃者は、この特性を利用して悪意のあるJavaScriptコードを`otelCarrier`パラメータに仕込んだURLを作成します。そして、開発者がこの細工されたURL(例えばフィッシングメール経由などで)にアクセスすると、Vitestサーバーが稼働しているローカルオリジン (`http://localhost:XXXX` など) 上で、攻撃者の仕込んだスクリプトが実行されてしまいます。
このXSSだけにとどまらず、さらに深刻な事態へ発展する可能性があります。実行された悪意あるスクリプトは、VitestのWebSocket API認証に用いられる機密情報である`VITEST_API_TOKEN`を盗み出すことができます。このトークンが悪用されると、攻撃者はVitestの内部APIを自由に操作できるようになります。
デフォルトのローカル開発環境では、この内部APIを通じて`vite.config.ts`のような設定ファイルを書き換えることが可能です。そして、Vitest/Viteが設定を再読み込みする際、書き換えられた設定ファイル内に埋め込まれた悪意のあるコードが、Node.js環境(つまり開発者のPC上)で実行されてしまうのです。これにより、攻撃者は開発者のPC上で任意のシステムコマンドを実行できる、非常に危険なRCEが成立してしまいます。
影響を受ける環境と攻撃のシナリオ
この脆弱性は、Vitestの「ブラウザモード」を使用している環境が対象です。Vitestブラウザサーバーが実行中に、被害者が攻撃者によって細工されたURLにアクセスすることで攻撃が成立します。例えば、以下のようなシナリオが考えられます。
一度RCEが達成されると、プロジェクトのソースコードの改ざん、機密情報の窃取、さらには開発者のPC全体の制御を奪われる可能性もあります。これは個人情報や企業資産に対する甚大な被害に繋がりかねません。
緊急対策:すぐにアップデートしてください!
この脆弱性は非常に危険であり、**直ちにVitestを最新バージョンにアップデートすることを強く推奨します。** アップデートにより、`otelCarrier`パラメータの不適切な処理が修正され、悪意のあるスクリプトの注入が防止されます。
npmまたはYarnを使用している場合、以下のコマンドでアップデートが可能です。
プロジェクトの依存関係を最新の状態に保つことは、セキュリティ対策の基本中の基本です。特に開発ツールは、今回のようなRCEに繋がりうる深刻な脆弱性が見つかることがあるため、常に注意を払いましょう。
まとめ
VitestブラウザモードにおけるXSSからRCEに至る脆弱性は、開発環境に甚大な被害をもたらす可能性があります。日本のフロントエンドエンジニアの皆さん、ご自身の開発環境を守るためにも、この記事を読んで速やかにVitestのバージョンアップを実施してください。また、不審なURLには安易にアクセスしないなど、基本的なセキュリティ意識も再確認しましょう。
より詳細な情報は、以下の脆弱性情報ページをご確認ください。