重大なvm2の欠陥により、攻撃者がサンドボックスを回避してNode.jsで任意のコードを実行可能に

vm2 JavaScriptサンドボックスライブラリ(バージョン≤ 3.10.0)の重大な脆弱性により、攻撃者はサンドボックス保護を回避し、完全なシステム権限で 任意のコード を実行できます。

この欠陥はPromiseコールバック関数の不適切なサニタイズを悪用し、認証やユーザー操作なしにリモートコード実行を可能にします。

脆弱性の概要

npm上で273,000のプロジェクトに導入されているvm2ライブラリは、隔離された環境で信頼できないコードを安全に実行するよう設計されています。

しかし、研究者 patriksimek により特定されたこの欠陥は、Promiseベースのサンドボックス脱出手法によって、この中核となるセキュリティ保証を損ないます。

項目
CVE ID CVE-2026-22709
アドバイザリ GHSA-99p7-6v5w-7xg8
パッケージ vm2(npm)
影響を受けるバージョン ≤ 3.10.0
修正済みバージョン 3.10.2
種類 サンドボックス脱出
CVSSスコア 9.8 / 10

攻撃者はasync関数の戻り値を利用して、サニタイズされていないPromise.prototype.thenコールバックにアクセスし、lib/setup-sandbox.jsで実装された意図されたサニタイズ層を回避できます。

この脆弱性は、Promise実装間でコールバックのサニタイズが一貫していないことに起因します。

localPromise.prototype.thenのコールバックは適切なサニタイズチェックを受ける一方、async関数から返されるglobalPromiseオブジェクトはこれらの保護を完全に回避します。

攻撃者はこの不整合を悪用し、async関数の実行をトリガーするSymbolプロパティを持つエラーオブジェクトを構築して、サニタイズされていないglobalPromise.prototype.thenメソッドを露出させます。

この回避が成功すると、攻撃者はErrorコンストラクタのFunctionプロトタイプへ直接アクセスできるようになり、任意コード実行のインスタンス化が可能になります。

これにより、child_processモジュールの呼び出し、または制限なしの直接的なシステムコマンド実行を通じて、リモートコード実行が可能になります。

重大度が極めて高いのは、システム全体が侵害されるリスクを反映しています。vm2を用いて信頼できないコードを実行するアプリケーション(プラグインシステム、テンプレートサンドボックス、セキュリティ分析プラットフォームなど)は、直ちに悪用されるリスクに直面します。

この攻撃は認証、ユーザー操作、特権昇格を必要としないため、大規模に武器化するのが容易です。

組織は直ちにvm2をバージョン3.10.2以降へ更新する必要があります。パッチによりglobalPromise.prototype.thenのコールバックが適切にサニタイズされ、悪用チェーンが遮断されます。この脆弱性を軽減する回避策はなく、安全な運用のためにはパッチ適用が必須です。

翻訳元: https://gbhackers.com/critical-vm2-flaw-arbitrary-code-in-node-js/

ソース: gbhackers.com