概要
vm2-project に 脆弱性 (CVE-2026-26956) が存在。悪用されるとシステム全体を乗っ取られる可能性があります。catch 経由で攻撃可能。
原文の説明
取得元が公開している説明をそのまま載せています (多くは英語)。
Summary
Full sandbox escape with arbitrary code execution. Attacker code inside VM.run() obtains host process object and runs host commands with zero host cooperation.
Details
Confirmed on: vm2 3.10.4, Node.js v25.6.1 (x64 Linux)
Trigger: Attacker-controlled code passed to VM.run()
Requires: Node.js version with WebAssembly exception handling + JSTag support (tested on v25.6.1)
vm2's sandbox security relies on two JavaScript-level mechanisms: (1) a code transformer that injects handleException() into JS catch clauses to wrap host-realm errors, and (2) bridge Proxies that wrap cross-context objects. Both operate entirely within JavaScript.
WebAssembly's try_table instruction with a JSTag catch handler catches JavaScript exceptions at V8's C++ level — below JavaScript entirely. When an imported JS function throws a TypeError produced by Symbol-to-string coercion during stack formatting (e.name = Symbol(); e.stack), the WASM try_table catches it as an opaque externref and returns it as a normal function return value. This WASM exception-handling-to-return-value path is not sanitized by vm2 — the host-realm TypeError reaches attacker code unsanitized. Its constructor chain (hostError.constructor.constructor) resolves to a Function that returns the host process object, allowing for reflection outside of the vm2 context, leading to code execution.
PoC
const { VM } = require("vm2");
console.log("vm2:", require("vm2/package.json")…
出典: NIST National Vulnerability Database NVD GitHub Advisory
AI要約
外部の AI が作成した要約です。誤りを含むことがあります。重要な判断の前に、下の原文と参照URLを確認してください。
Node.jsで利用されるオープンソースサンドボックスであるvm2に深刻なセキュリティ問題が見つかりました。この問題を利用することで、攻撃者はサンドボックスを脱出し、システム上で任意のコードを実行することが可能です。これにより、システムの制御を奪われる可能性があります。同様の問題は過去にも発生しており、特にシステムの防護メカニズムが意図せず無効化される事例(CWE-693)が関連します。この問題は、バージョン3.10.5で修正されていますので、企業や団体は即時のソフトウェアアップデートを推奨します。
この脆弱性は、vm2のバージョン3.10.4において、VM.run()内で実行される攻撃者コードがホストプロセスオブジェクトを取得し、ホスト側のコマンドを実行できる問題です。影響を受けるバージョンは3.10.4以前で、3.10.5で修正されています。PoCではWASMのtry_table命令を使用してJavaScriptの例外をC++レベルでキャッチし、ホストエラーオブジェクトを通じてコード実行を達成します。暫定回避策は提供されておらず、即座にバージョンを更新することが推奨されます。
vm2-project に 脆弱性 (CWE-693) があります。攻撃者は catch を経由して脆弱な処理に到達し、認証なしで悪用できます。
vm2-project のうち 影響範囲: <= 3.10.4。攻撃箇所: catch / try_table / JSTag / externref。
重要度: 最重要 (CVSS 9.8/10)。悪用されるとシステム全体を乗っ取られる可能性があります
ベンダー公式アドバイザリの修正版に更新してください。(修正前: <= 3.10.4 該当バージョンが本番稼働中なら直ちに更新計画を立案)
修正版が未提供時は、影響機能の無効化・WAFルール・ネットワークACLでの遮断を検討。
Webサーバ・プロキシ・WAFログで該当CVEのIOCに合致する不審リクエストを検索。SBOM/依存ファイルで影響バージョンを横断確認。
類似する過去の事例 過去のCVE/インシデントから類似事例を抽出
Node.jsのsandbox escapeに関連するCVE。
TypeScriptコンパイラによるsandbox escapeの事例。
もし自社で起きたら 業務シナリオごとの想定影響
攻撃者がサンドボックスを脱出してバックエンドの完全な制御を取得する可能性がある。
攻撃者が社内の開発サーバで任意のコードを実行できるリスクがある。
一つのテナントが他のテナントやホストシステムを攻撃する可能性がある。
即座にvm2のバージョンを3.10.5にアップデートすること。
対応アクション
SOC/SREチームが順番に実行すべき具体的なステップとコマンド例
-
1影響範囲の特定 identify
grep -r 'vm2-project' . | grep -v node_modulesリポジトリと本番環境の依存ファイル (package-lock.json / requirements.txt / go.sum / Gemfile.lock 等) で
vm2-projectを grep し、稼働しているサービス・バージョンを把握する。 -
2バージョン照合 verify
Confirm if version satisfies `<= 3.10.4`Step 1 で見つかったバージョンが影響範囲
<= 3.10.4に該当するか照合。本番で稼働中ならインシデント扱い。 -
7事後検証 verify
Confirm patched version is live in productionパッチ適用後、ステージングで PoC または同等の悪用パターンを再現して脆弱性が閉じたことを確認。本番では Step 3 と同じログクエリでアラート再発が無いか継続監視。
影響パッケージ
参照URL
- advisory nvd.nist.gov
- package github.com
- web github.com
- web github.com
- web github.com
- web access.redhat.com
- web bugzilla.redhat.com
- web security.access.redhat.com