
人気のある Node.js サンドボックス・ライブラリ vm2 に、サンドボックスから抜け出し、ホスト・システム上で任意のコードを実行できる重大な脆弱性が存在します。
このセキュリティ問題は CVE-2026-26956 として追跡されており、vm2 バージョン 3.10.4 への影響が確認されていますが、それ以前のリリースにも脆弱性が存在する可能性があります。Proof-of-Concept (PoC) の悪用コードが公開されています。
セキュリティ勧告では、この問題はWebAssembly例外処理とJSTagサポートを有効にしているNode.js 25(Node.js 25.6.1で確認済み)の環境のみに影響するとしている。
vm2 はオープンソースの Node.js ライブラリで、信頼されていない JavaScript コードを制限されたサンドボックス環境で実行するために使用されます。オンライン・コーディング・プラットフォーム、自動化ツール、ユーザー提供のスクリプトを実行する SaaS アプリなどで一般的に採用されています。
このライブラリは、サンドボックス化されたコードをホストシステムから隔離し、プロセスやファイルシステムのような機密性の高いNode.js APIへのアクセスをブロックしようとします。
vm2 は広く使用されており、Node.js のデフォルトのコマンドラインパッケージマネージャであるnpm(Node Package Manager)では、毎週 130 万以上のダウンロードが行われています。
CVE-2026-26956は、サンドボックス環境とホスト間で交差する例外のライブラリの誤った処理に起因する。
勧告では、vm2は通常、ホストベースのエラーから保護するJavaScriptレベルの保護と、クロスコンテキストオブジェクトをラップするブリッジプロキシに依存しており、どちらも完全にJavaScript内で実行されると説明しています。
しかし、WebAssemblyの例外処理は、GoogleのV8エンジン内のより低いレベルでJavaScriptエラーをインターセプトすることができ、vm2のJavaScriptベースのセキュリティ防御をバイパスする。
シンボルから文字列への変換を使用して特別に細工されたTypeErrorをトリガーすることで、攻撃者はvm2によってサニタイズされることなく、ホスト側のエラーオブジェクトをサンドボックスにリークさせることができます。
リークされたオブジェクトはホスト環境に由来するため、攻撃者はそのコンストラクタ・チェーンを悪用してプロセス・オブジェクトのような Node.js 内部へのアクセスを取り戻すことができ、最終的にはホスト・システム上で任意のコマンドを実行できるようになります。
メンテナンス担当者のセキュリティ勧告には、ホスト・マシン上でのリモート・コード実行を実証するPoCエクスプロイトも含まれています。
vm2のユーザーは、CVE-2026-26956の悪用リスクを軽減するため、できるだけ早くバージョン3.10.5以降(最新は3.11.2)にアップグレードすることが推奨される。
今年の初め、vm2 は、CVE-2026-22709 として追跡されている、基盤となるホストシステム上で任意のコード実行につながる可能性のある、別の重大なサンドボックスエスケープの欠陥の影響を受けました。
同じライブラリに影響を与える以前のサンドボックス脱出の欠陥には、CVE-2023-30547、CVE-2023-29017、CVE-2022-36067があり、JavaScriptのサンドボックス環境で信頼できないコードを安全に分離することの難しさを反映している。
.article-callout { background-color:#width: 95%; max-width: 800px; margin: 15px auto; border-radius: 8px; border:1px solid #d6ddee; display: flex; align-items: stretch; overflow: hidden; } .article-media { flex: 1; max-width: 220px; display: flex; } .article-media a { display: flex; width: 100%; height: 100%; } .article-media img { width: 100%; height: 100%; border-radius: 8px 0 0 8px; display: block; } .article-callout .article-media img { margin-top: 0 !important; height: 100% !important; } .article-body { flex: 2; padding:display: flex; flex-direction: column; justify-content: center; } .article-body h2 { font-size: 17px !important; font-weight: 700; color:#line-height: 1.4; font-family:margin: 0 0 14px 0; } .article-body p { font-weight: bold; font-size: 14px; margin: 0 0 clamp(6px, 2vw, 14px) 0; } .article-link { background-color:#border:color: black; text-align: center; text-decoration: none; border-radius: 8px; display: inline-block; font-size: 16px; font-weight: bold; padding:10px 20px; width: fit-content; } @media (max-width: 600px) { .article-callout { flex-direction: column; align-items: center; } .article-media { max-width: 100%; } .article-media img { border-radius: 8px 8px 0 0; } .article-body { padding:.article-body { padding: 15px; width: 100%; } .article-link { width: 100%; margin: 0 auto; box-sizing: border-box; } } .
検証のギャップ:自動ペンテストは1つの質問に答える。必要なのは6つ。
自動ペンテストツールは本当の価値を提供しますが、「攻撃者はネットワークを通って移動できるか」という1つの質問に答えるために作られました。それは、攻撃者がネットワークを通過できるかどうかという1つの質問に答えるために作られたものであり、脅威をブロックできるかどうか、検知ルールが有効かどうか、クラウド設定が有効かどうかをテストするために作られたものではありません。
このガイドでは、実際に検証する必要がある6つのサーフェスについて説明します。




Comments