Malicious code running in a sandbox

研究者は、NPM パッケージ リポジトリ経由で 1 か月あたり 1600 万回以上ダウンロードされる JavaScript サンドボックス ライブラリである「vm2」に重大なリモート コード実行の欠陥があることを警告しています。

vm2 の脆弱性は CVE-2022-36067 として追跡されており、攻撃者がサンドボックス環境を脱出してホスト システムでコマンドを実行できるため、CVSS システムの最大スコアである 10.0 の重大度評価を受けています。

サンドボックスは、オペレーティング システムの他の部分から隔てられた隔離された環境であることを意図しています。ただし、開発者は一般的にサンドボックスを使用して安全でない可能性のあるコードを実行またはテストするため、この制限された環境から「脱出」してホスト上でコードを実行できることは、セキュリティ上の重大な問題です。

サンドボックスからの脱出

Oxeye のセキュリティ研究者は、VM2 で発生するエラーのコール スタックをカスタマイズして、サンドボックスの外部で作成された「CallSite」オブジェクトを生成し、それらを使用して Node のグローバル オブジェクトにアクセスし、コマンドを実行する巧妙な方法を発見しました。

ライブラリの作成者は過去にこの可能性を軽減しようとしましたが、Oxeye の研究者は「prepareStackTrace」メソッドのカスタム実装を使用して、この軽減メカニズムを回避する方法を発見しました。

「レポーターの POC は、vm2 が「WeakMap」JavaScript 組み込み型に関連する特定のメソッドをラッピングできなかったため、上記のロジックをバイパスしました」と研究者はレポートで説明しています。

「これにより、攻撃者は「prepareStackTrace」の独自の実装を提供し、エラーをトリガーして、サンドボックスから逃れることができました。」

サンドボックス エスケープ プロセス
サンドボックス エスケープ プロセス
(オックスアイ)

アナリストは、「prepareStackTrace」関数を実装するカスタム オブジェクトでグローバル エラー オブジェクトをオーバーライドし、サンドボックス外で作成された「CallSite」オブジェクトに再びアクセスして、現在のプロセスでコマンドを実行することも可能であることを発見しました。

Error オブジェクトをオーバーライドしてエラーを生成する
Error オブジェクトのオーバーライドと CallSite オブジェクトへのアクセス(Oxeye)

できるだけ早く更新する

Oxeye の研究チームは 2022 年 8 月 16 日にこの重大な問題を発見し、数日後に VM2 チームに報告し、VM2 チームは調査を開始したことを確認しました。

最終的に、人気のあるライブラリの作成者は 2022 年 8 月 28 日にバージョン 3.9.11 をリリースし、サンドボックス エスケープとコード実行の問題に対処しました。

ソフトウェア開発者は、できるだけ早く最新の VM2 バージョンに更新し、プロジェクトの古いリリースを置き換えることをお勧めします。

エンド ユーザーは、VM2 に依存する仮想化ソフトウェア ツールが利用可能なセキュリティ更新プログラムを適用するまでに時間がかかる可能性があることに注意することが重要です。

Log4Shellで見たように、広く展開されているオープンソース ライブラリの重大なセキュリティ問題は、影響を受けるユーザーが、サプライ チェーンが不明瞭なために脆弱であることを認識していなくても、長期間にわたって存続する可能性があります。

サンドボックス ソリューションを使用している場合は、それが VM2 に依存しているかどうか、および最新バージョンを使用しているかどうかを確認してください。