WebAssembly アプリケーションのランタイム Wasmtime に重大な脆弱性

修正アップデート Wasmtime 6.0.1、5.0.1、および 4.0.1 では、重大な危険レベルが割り当てられた脆弱性 (CVE-2023-26489) が修正されました。 この脆弱性により、分離された WebAssembly コードに許可されている範囲外のメモリ領域にデータが書き込まれる可能性があり、攻撃者が分離された WASI 環境外でコードを実行するために使用される可能性があります。

Wasmtime は、WASI (WebAssembly System Interface) 拡張機能を備えた WebAssembly アプリケーションを通常のスタンドアロン アプリケーションとして実行するためのランタイムです。 このツールキットは Rust 言語で書かれており、この脆弱性は、ハードウェア アーキテクチャに依存しない中間表現を x86_64 アーキテクチャ用の実行可能なマシン コードに変換する Cranelift コード ジェネレータでリニア メモリ アドレス指定ルールを定義する際の論理エラーによって引き起こされます。

特に、WebAssembly アプリケーションの場合、WebAssembly で許可されている 35 ビット アドレスの代わりに 33 ビットの実効アドレスが計算され、読み取りおよび書き込み操作に許可される仮想メモリの制限が 34 GB に変更されましたが、サンドボックス環境設定により、ベースアドレスから6GB。 その結果、ベース アドレスから 6 ~ 34 GB の範囲の仮想メモリが WebAssembly アプリケーションからの読み取りおよび書き込みに利用可能になりました。 このメモリは、他の WebAssembly 環境または WebAssembly ランタイム コンポーネントをホストできます。

Wasmtime バージョンを更新できない場合、エラーをブロックする回避策は、「Config::static_memory_maximum_size(0)」オプションを指定して、すべての線形メモリ アクセスに対する個別の境界チェックを有効にすることです (結果的にパフォーマンスが大幅に低下します)。 。 もう 1 つのオプションは、「Config::static_memory_guard_size(36 < XNUMX)」設定を使用して、問題のある仮想メモリ範囲に配置されるガード ページ (アクセス時にスローされる例外) の数を増やすことです (その結果、大量の仮想メモリと同時に実行する WebAssembly アプリケーションの数を制限します)。

出所: オープンネット.ru

コメントを追加します