vm2 JavaScript サンドボックスの脆弱性 CVE-2026-22709 が FIX:サニタイズ不備による RCE の恐れ

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 ベースのサンドボックス・エスケープ手法を通じて、この中核的なセキュリティ保証を破壊する。 

PropertyValue
CVE IDCVE-2026-22709
AdvisoryGHSA-99p7-6v5w-7xg8
Packagevm2 (npm)
Affected Versions≤ 3.10.0
Patched Version3.10.2
TypeSandbox Escape
CVSS Score9.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” のコールバックが適切にサニタイズされ、攻撃チェーンは遮断される。回避策は存在せず、安全な運用を確保するためには、パッチ適用が必須となる。