人気のvm2 NodeJSライブラリで重大なサンドボックス脱出の欠陥が発見

Image

vm2 Node.jsサンドボックスライブラリにおける重大度クリティカルの脆弱性( CVE-2026-22709 として追跡)により、サンドボックスを脱出して基盤となるホストシステム上で任意のコードを実行できてしまいます。

オープンソースのvm2ライブラリは、安全なコンテキストを作成し、ファイルシステムにアクセスできない信頼できないJavaScriptコードをユーザーが実行できるようにします。

vm2は歴史的に、ユーザースクリプト実行をサポートするSaaSプラットフォーム、オンラインコードランナー、チャットボット、オープンソースプロジェクトなどで見られ、GitHub上で20万以上のプロジェクトで使用されてきました。しかし、サンドボックス脱出の脆弱性が繰り返し発生したため、プロジェクトは2023年に中止され、信頼できないコードの実行には安全ではないと見なされていました。

昨年10月、メンテナーのPatrik Šimekはvm2プロジェクトを復活させることを決め、当時判明していたすべての脆弱性に対処し、「Node 6までさかのぼって互換性がある」バージョン3.10.0をリリースしました。

このライブラリはnpmプラットフォームでも非常に人気が高く、過去1年間、常に毎週約100万ダウンロードに達しています。

不適切なサニタイズ

最新の脆弱性は、vm2が「Promises」を適切にサンドボックス化できていないことに起因します。Promisesは非同期処理を扱うコンポーネントで、コード実行が隔離環境のコンテキストに制限されるようにするものです。

vm2は内部のPromise実装に付与されたコールバックをサニタイズする一方で、async関数はグローバルなPromiseを返し、その.then() および.catch()のコールバックが適切にサニタイズされません。

「vm2のバージョン3.10.0では、Promise.prototype.thenおよびPromise.prototype.catchのコールバックサニタイズを回避できます」とプロジェクトのメンテナーは述べ、さらに「これにより攻撃者はサンドボックスを脱出し、任意のコードを実行できる」と付け加えています。

開発者によれば、CVE-2026-22709のサンドボックス脱出はvm2バージョン 3.10.1で部分的に対処され、その後の3.10.2アップデートで、潜在的な回避を防ぐために修正が強化されました。

開発者はまた、vm2サンドボックス内でCVE-2026-22709をトリガーして脱出し、ホストシステム上でコマンドを実行できることを示すコードも共有しました。

Image
公開されたエクスプロイトのスニペット
出典: GitHub

脆弱なvm2バージョンではCVE-2026-22709の悪用が容易であることから、ユーザーにはできるだけ早く最新リリースへアップグレードすることが推奨されます。

これまでに報告されたvm2の重大なサンドボックス脱出の欠陥には、Oxeyeの研究者によって開示されたCVE-2022-36067があります。このバグを悪用すると、隔離環境を脱出してホストシステム上でコマンドを実行できました。

2023年4月には、CVE-2023-29017として追跡される同様の欠陥が発見され、エクスプロイトが公開されました。同月後半には、研究者のSeungHyun Leeが、vm2に影響する別の重大なサンドボックス脱出であるCVE-2023-30547のエクスプロイトを公開しました。

ŠimekはBleepingComputerに対し、現時点で最新リリースであるvm2バージョン3.10.3では「開示された脆弱性はすべて適切に修正されている」と語りました。

翻訳元: https://www.bleepingcomputer.com/news/security/critical-sandbox-escape-flaw-discovered-in-popular-vm2-nodejs-library/

ソース: bleepingcomputer.com