Node.jsのvm2のサンドボックスからの脱出の脆弱性(Sandbreak: CVE-2022-36067)

こんにちは。SIOS OSSエバンジェリスト/セキュリティ担当の面 和毅です。

10/12/2022にNode.jsのvm2サンドボックスからの脱出の脆弱性(Sandbreak: CVE-2022-36067)が公開されました。かなり緊急度の高い脆弱性です。今回は、こちらで脆弱性の情報等を纏めて取り上げていきます。



vm2

vm2 はノードの組み込みモジュールで、信頼できないコードを安全に実行するためのサンドボックスです。

今回の脆弱性(Sandbreak)について

今回の脆弱性(Sandbreak)は、Oxeyeの研究者によって発見されました。この脆弱性はvm2のプロジェクトに共有され、修正された3.9.11がリリースされています。

情報はOxeyeのブログで公開されています。


Priority

CVE番号 影響するバージョン 一次情報源 Priority CVSS Score / CVSS Vector
CVE-2022-36067 vm2 3.9.10以下のバージョン Enter "Sandbreak" - Vulnerability In vm2 Sandbox Module Enables Remote Code Execution (CVE-2022-36067)

10.0 Critical

Red Hat: 10.0 Critical

Red Hat: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H

時系列

  1. 2022/08/16: Oxeyeの研究チームが問題を発見。発見の数日後にVM2チームに連絡
  2. 2022/08/28: 3.9.11がリリースされる

概要

Node.js のエラーメカニズムを悪用してサンドボックスを回避することができます。

Node.jsを使用すると、アプリケーション開発者は、アプリケーションで発生したエラーのコールスタックをカスタマイズできます。グローバルな「Error」オブジェクトの下に「prepareStacktrace」メソッドを実装することでコールスタックのカスタマイズが実現できます。

次のスクリーンショットは、「prepareStackTrace」関数を呼び出そうとする Node.js を示しています。


const maybeOverridePrepareStackTrace = (globalThsi, error, trace) => {
   if (typeof globalThis.Error?.prepareStackTrace === 'function') {
     return globalThis.Error.prepareStackTrace(error, trace);
}

Node.jsがこの「prepareStackTrace」メソッドを呼び出し「CallSite」オブジェクトの配列でエラーの文字列表現を引数として提供します。

「CallSite」オブジェクトによって公開されるメソッドの一つに「getThis」があります。この「getThis」メソッドを呼び出すと、一部の「CallSite」オブジェクトがサンドボックスの外で作成されたオブジェクトを返す可能性があり、この動作によりサンドボックスからの脱出(エスケープ)が発生する可能性があります。


対処方法

  • vm2を下記のバージョン以上に更新してください。
    • 3.9.11以上

主なディストリビューションの対応方法

詳細は、各ディストリビューションの提供元にご確認ください


日々のメモを更新しています。

セキュリティ関係ニュースを更新しています。個別で情報出せるようになる前の簡単な情報・リンクなんかも載せていきます。

セミナー情報

今年も情報処理学会のCSS2022(有償)中でOWS2022を開催致します。

■開催期間 2022年10月24日(月) ~ 2022年10月27日(木)

■会場 熊本城ホールとオンライン(ZOOM)のハイブリッド開催

主催 一般社団法人 情報処理学会 コンピュータセキュリティ研究会(CSEC)

共催 一般社団法人 情報処理学会 セキュリティ心理学とトラスト研究会(SPT)

合同開催

OWS2022では、企画講演セッションの他に、招待講演として「タイトル:オープンソースソフトウェアをより安全にするための取組み」と題してLinux Foundationの方に講演いただきます。

他にもOSSのセキュリティに関する講演や論文発表が目白押しです。奮ってご参加ください。

参加費はこちら(OWSだけでなくCSS全てに参加することができます。

参加登録はこちら

前へ

【重要:3.0.6/1.1.1rはregressionが見つかったため撤回】OpenSSLの脆弱性情報(Low: CVE-2022-3358)と新バージョン(3.0.6, 1.1.1r)

次へ

Linux Kernelの脆弱性(Moderate: CVE-2022-41674, CVE-2022-42719, CVE-2022-42720, CVE-2022-42721, CVE-2022-42722)