Critical vm2 Flaw Lets Attackers Bypass Sandbox and Execute Arbitrary Code in Node.js
2026/01/27 gbhackers — vm2 JavaScript サンドボックス・ライブラリのバージョン 3.10.0 以下に、深刻な脆弱性 CVE-2026-22709 が存在することが判明した。この脆弱性を悪用する攻撃者は、サンドボックス保護を回避し、認証/ユーザー操作を一切必要とせず、完全なシステム権限で任意のコードを実行し得る。この欠陥は Promise コールバック関数の不適切なサニタイズ処理に起因するものだ。

脆弱性の概要
vm2 ライブラリは npm 上で約 273,000 プロジェクトに導入されており、信頼できないコードを隔離環境内で安全に実行する目的で設計されている。しかし、研究者 patriksimek により特定されたこの脆弱性は、Promise ベースのサンドボックス・エスケープ手法を通じて、この中核的なセキュリティ保証を破壊する。
| Property | Value |
|---|---|
| CVE ID | CVE-2026-22709 |
| Advisory | GHSA-99p7-6v5w-7xg8 |
| Package | vm2 (npm) |
| Affected Versions | ≤ 3.10.0 |
| Patched Version | 3.10.2 |
| Type | Sandbox Escape |
| CVSS Score | 9.8 / 10 |
攻撃者は async 関数の戻り値を悪用することで、”lib/setup-sandbox.js” に実装されるサニタイズ・レイヤーを回避し、サニタイズされていない “Promise.prototype.then” コールバックへのアクセスを可能にする。
この脆弱性の根本原因は、Promise 実装間におけるコールバック・サニタイズ処理の不整合にある。 “localPromise.prototype.then” のコールバックには適切なサニタイズ検証が適用されているが、async 関数から返却される “globalPromise” オブジェクトでは、これらの保護が完全にバイパスされる。
それを悪用する攻撃者は、Symbol プロパティを含むエラー・オブジェクトを構築することで async 関数の実行を誘発し、未検証の “globalPromise.prototype.then” メソッドを露出させる。 このバイパスに成功した攻撃者は、Error コンストラクタの Function プロトタイプへの直接アクセス可能となり、任意コードを実行できるようになる。
その結果、child_process モジュールの呼び出しや、制限のないシステム・コマンド実行を通じて、完全なリモート・コード実行が可能となる。 この脆弱性の深刻度が High と評価される理由は、完全なシステム侵害に直結するためである。
vm2 を用いて信頼できないコードを実行するアプリケーションである、プラグイン・システム/テンプレート・サンドボックス/セキュリティ分析プラットフォームは、即時の悪用リスクに直面している。この攻撃は、認証/ユーザー操作/権限昇格を一切必要とせず、大規模な武器化が容易である。
ユーザー組織にとって必要なことは、vm2 のバージョン 3.10.2 以降へと、速やかにアップデートすることだ。この修正により “globalPromise.prototype.then” のコールバックが適切にサニタイズされ、攻撃チェーンは遮断される。回避策は存在せず、安全な運用を確保するためには、パッチ適用が必須となる。
JavaScript の隔離実行ライブラリとして広く利用されている vm2 に、サンドボックスが突破され、ホストシステム上での任意のコード実行に至る、きわめて深刻な脆弱性 CVE-2026-22709 が発見されました。この脆弱性を悪用する攻撃者は、認証やユーザーの操作を一切必要とせず、ネットワーク経由でリモートから攻撃が可能なため、CVSS スコアは 9.8 (Critical) と評価されています。
この脆弱性は、npm 上の膨大なプロジェクトに影響を及ぼす可能性があり、特にユーザー投稿のスクリプトやプラグインをサンドボックス内で実行している、テンプレートエンジン/セキュリティ分析ツールなどのプラットフォームにとって致命的な脅威となり得ます。ご利用のチームは、ご注意ください。よろしければ、JavaScript での検索結果も、ご参照ください。
You must be logged in to post a comment.