English version →
開発者ツール
CVE-2026-26956 critical CVSS 9.8

vm2-project の脆弱性 (CVE-2026-26956)

概要

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の事例。

もし自社で起きたら 業務シナリオごとの想定影響

📌 ECサイトのバックエンドでvm2を利用している場合

攻撃者がサンドボックスを脱出してバックエンドの完全な制御を取得する可能性がある。

📌 社内開発環境で利用している場合

攻撃者が社内の開発サーバで任意のコードを実行できるリスクがある。

📌 マルチテナントサービスの一部としてvm2を使用している場合

一つのテナントが他のテナントやホストシステムを攻撃する可能性がある。

推奨アクション

即座にvm2のバージョンを3.10.5にアップデートすること。

対応アクション

SOC/SREチームが順番に実行すべき具体的なステップとコマンド例

  1. 1
    影響範囲の特定 identify
    grep -r 'vm2-project' . | grep -v node_modules

    リポジトリと本番環境の依存ファイル (package-lock.json / requirements.txt / go.sum / Gemfile.lock 等) で vm2-project を grep し、稼働しているサービス・バージョンを把握する。

  2. 2
    バージョン照合 verify
    Confirm if version satisfies `<= 3.10.4`

    Step 1 で見つかったバージョンが影響範囲 <= 3.10.4 に該当するか照合。本番で稼働中ならインシデント扱い。

  3. 7
    事後検証 verify
    Confirm patched version is live in production

    パッチ適用後、ステージングで PoC または同等の悪用パターンを再現して脆弱性が閉じたことを確認。本番では Step 3 と同じログクエリでアラート再発が無いか継続監視。

影響パッケージ

npm vm2
[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"3.10.5"}]}]

参照URL

当サイトでは、アクセス解析と広告の効果測定のために Cookie を使います。株式会社Game のサイト共通の設定です。 詳しく