Node.jsサンドボックスライブラリ「vm2」に深刻な脆弱性
人気のNode.jsサンドボックスライブラリ「vm2」に、サンドボックスをエスケープして基盤となるホストシステム上で任意のコードを実行できる重大な脆弱性「CVE-2026-22709」が発見されました。この脆弱性は、すでに悪用が容易であることが確認されており、ユーザーには速やかなアップデートが強く推奨されています。
vm2ライブラリは、信頼できないJavaScriptコードがファイルシステムにアクセスできないように、セキュアなコンテキストを作成することを目的としています。SaaSプラットフォームでのユーザーによるスクリプト実行、オンラインコードランナー、チャットボット、オープンソースプロジェクトなどで広く利用されており、GitHub上では20万以上のプロジェクトで採用されています。npmプラットフォームでも非常に人気が高く、過去1年間で毎週約100万ダウンロードに達しています。
脆弱性の詳細:不適切なサニタイズが原因
今回の脆弱性は、vm2が「Promises」(非同期操作を処理し、コード実行が分離された環境のコンテキストに制限されることを保証するコンポーネント)を適切にサンドボックス化できていないことに起因します。vm2は独自のPromise実装にアタッチされたコールバックをサニタイズしますが、非同期関数が返すグローバルなPromiseの.then()および.catch()コールバックは適切にサニタイズされていません。
これにより、攻撃者はコールバックのサニタイズをバイパスし、サンドボックスをエスケープして任意のコードを実行することが可能になります。開発者によると、このCVE-2026-22709は、脆弱なvm2バージョンでトリガーし、サンドボックスをエスケープしてホストシステム上でコマンドを実行するためのデモンストレーションコードが公開されているほど、悪用が容易であるとのことです。
ライブラリの背景と過去の課題
vm2プロジェクトは、過去にも度重なるサンドボックスエスケープの脆弱性のため、2023年に一度は開発が中止され、信頼できないコードの実行には不安全であると見なされていました。しかし、昨年10月にメンテナーのPatrik Šimek氏がプロジェクトを再開し、当時の既知の脆弱性をすべて修正したバージョン3.10.0をリリースしていました。
これまでに報告されたvm2の深刻なサンドボックスエスケープ脆弱性には、以下のものがあります。
- CVE-2022-36067
- CVE-2023-29017
- CVE-2023-30547
対策と推奨事項
CVE-2026-22709のサンドボックスエスケープは、vm2バージョン3.10.1で部分的に修正され、その後の3.10.2アップデートで潜在的なバイパスを防ぐために修正が強化されました。メンテナーのŠimek氏は、最新リリースであるバージョン3.10.3では、これまでに公開されたすべての脆弱性が適切に修正されていると述べています。
この脆弱性は悪用が非常に容易であるため、vm2を使用している開発者は、可能な限り速やかに最新バージョンである3.10.3へアップグレードすることを強く推奨します。
