Modern Frontend CVEs

対象CVE: CVE-2026-92940

[Critical] vm2の重大な脆弱性 (CVE-2026-92940) がホストの機密情報を漏洩させる危険性について

サンドボックスライブラリvm2において、httpsモジュールの利用が許可されている場合に、ホストプロセスのHTTPS認証情報やTLS通信がサンドボックス内から漏洩するCriticalな脆弱性が発見されました。バックエンドでvm2を利用している場合、早急な対策が必要です。

はじめに:サンドボックスライブラリvm2とは?

日本のフロントエンドエンジニアの皆さん、こんにちは。今回は、皆さんが直接触れる機会は少ないかもしれませんが、バックエンドやクラウド環境でJavaScriptコードを実行する際に利用されることがある重要なサンドボックスライブラリ「vm2」に関する深刻な脆弱性 (CVE-2026-92940) について解説します。

vm2は、Node.js環境で信頼できないコードを隔離された「サンドボックス」内で実行するためのライブラリです。例えば、ユーザーが提供したJavaScriptコードを実行するSaaSプラットフォームや、カスタムスクリプト機能を提供するサービスなどで利用されることがあります。サンドボックスは、悪意のあるコードがホストシステムや他のユーザーデータにアクセスするのを防ぐために非常に重要です。しかし、今回報告された脆弱性は、このサンドボックスのセキュリティ境界を破り、ホスト側の機密情報を漏洩させる可能性があるものです。

脆弱性の概要:https.globalAgentを介した情報漏洩

この脆弱性 (GHSA-h85j-hv3c-qfgq / CVE-2026-92940) は、vm2のバージョン3.11.6以前で、NodeVMのインスタンスが明示的に `https` モジュールを `require` することが許可されている場合に発生します。サンドボックス内のコードがホストプロセスの実際の `https.globalAgent` にアクセスできてしまうため、ホストが送受信するHTTPS通信に関する機密情報(認証情報やTLSトラフィック)が漏洩する可能性があります。深刻度はCriticalと評価されています。

なぜホストの機密情報が漏洩するのか?技術的な詳細

Node.jsの `https` モジュールには、HTTP/HTTPSリクエストの接続プールを管理するための `globalAgent` というオブジェクトが存在します。これはNode.jsプロセス全体で共有されるシングルトン(単一のインスタンス)であり、`EventEmitter` としてイベントを発行します。

vm2は、サンドボックス内で `require('https')` が許可された際に、ホストの `https` モジュールを読み取り専用 (readonly) プロキシでラップして提供します。しかし、`https.globalAgent` のようなイベントエミッターオブジェクトの場合、プロキシを介した `on()` メソッドの呼び出しは、結局ホスト側の実際の `globalAgent` インスタンスに到達し、その内部状態(イベントリスナーの登録など)を直接変更してしまいます。

`https.globalAgent` は、ホスト側でHTTPSリクエストが完了し、使用済みのTLSソケットが接続プールに解放される際に `free` イベントを発行します。このイベントには、解放された `TLSSocket` オブジェクトと、そのソケットが使用されたリクエストのオプション(ヘッダー情報など)が含まれます。

攻撃者は、サンドボックス内でこの `globalAgent` に `free` イベントリスナーを登録することで、ホストが発行した `free` イベントを傍受できます。これにより、以下の情報が攻撃者に漏洩します。

これらの情報により、攻撃者は次のような攻撃を実行できます。

つまり、サンドボックス内の信頼できないコードが、ホストアプリケーションのネットワーク活動を完全に監視し、操作できる状態になってしまうのです。

影響を受ける環境と対策

この脆弱性は、vm2バージョン3.11.6以前に影響します。特に、バックエンドアプリケーションでユーザーが提供したJavaScriptコードを実行する機能がある場合や、何らかの理由で `NodeVM` に `https` モジュールの利用を許可している場合に大きなリスクとなります。

フロントエンドエンジニアへの影響と注意点

直接 `vm2` を利用する機会は少ないかもしれませんが、皆さんが開発に関わるWebサービスやバックエンドAPIが、内部的にコード実行環境を提供している場合、この脆弱性の影響を受ける可能性があります。例えば、Node.jsで動作するEdge Functions (Lambda@Edge, Cloudflare Workers, Deno Deployなど) や、カスタマイズ可能なスクリプト機能を組み込んだSaaSプラットフォームなどが該当する場合があります。

もし、チーム内でこのようなサンドボックス環境を運用している、あるいは利用している可能性がある場合は、バックエンドエンジニアやインフラ担当者と連携し、vm2のバージョンや設定を確認するよう促してください。セキュリティはチーム全体で取り組むべき課題です。

まとめ

vm2のCVE-2026-92940は、サンドボックス環境の根幹を揺るがす深刻な脆弱性です。ホストの機密情報がサンドボックス内の悪意のあるコードによって容易に盗まれ、悪用される危険性があります。ご自身の関わるプロジェクトでvm2を使用している場合は、速やかに最新バージョンへのアップデートを行い、セキュリティリスクを排除してください。

セキュリティに関する情報は常にキャッチアップし、安全な開発を心がけましょう。

← ブログ一覧に戻る