CVE-2023-30624 in Wasmtime情報

要約

〜によって VulDB • 2026年07月23日

WasmtimeはWebAssembly用のスタンドアロンランタイムです。バージョン6.0.2、7.0.1、および8.0.1より前のWasmtimeでは、テーブルやメモリなどのインスタンスごとの状態を管理する実装にLLVMレベルの未定義動作(Undefined Behavior: UB)が含まれていました。この未定義動作は、LLVM 16でコンパイルされた際にランタイムレベルの問題を引き起こすことが判明しており、正しさに不可欠な書き込みが最適化によって削除される原因となっていました。現在ベータ版であるRust 1.70以降を使用してWasmtimeをコンパイルした脆弱なバージョンでは、関数が誤ってコンパイルされていることが確認されています。一方、現在の安定版リリース(Rust 1.69)およびそれ以前のバージョンでWasmtimeをコンパイルした場合については現時点で問題があることは知られていませんが、理論的には潜在的な問題を呈する可能性があります。

根本的な問題は、Wasmtimeのインスタンスに関するランタイム状態には`Instance`というRustで定義された構造体が関与しており、その後に追従して`VMContext`構造体が続くことです。この`VMContext`構造体はモジュールごとに一意であるランタイム定義済みのレイアウトを持っています。この表現方法はRustの安全なコードでは記述できないため、この状態を維持するには`unsafe`コードが必要です。しかし、これを行うコードには引数として`&self`を受け取るものの、割り当てられた領域内の`VMContext`部分のデータを修正するメソッドが含まれています。つまり、`&self`から派生したポインタが変更されます。これは通常Rustでは許可されません(ただし`UnsafeCell`が存在する場合は例外です)。LLVMにコンパイルすると、これらの関数は`noalias readonly`パラメータを持ちます。これにより、ポインタを通じて書き込みを行うことは未定義動作となります。

Wasmtimeの内部表現および`VMContext`の管理は、適切な箇所で`&mut self`メソッドを使用するように更新されました。さらに、Rustにおける`unsafe`コード用の検証ツール(例:`cargo miri`)をまもなく`main`ブランチで実行し、将来のコンパイラバージョンで悪用される可能性のあるRustレベルの問題を修正する予定です。

GitHubリリースから入手可能なWasmtimeのプリコンパイル済みバイナリは最大でもLLVM 15を使用してコンパイルされているため、脆弱であることは知られていません。ただし前述した通り、更新を行うことを推奨します。

Wasmtimeバージョン6.0.2、7.0.1、および8.0.1がリリースされ、これらはLLVM 16で正しく動作するための修正パッチが含まれており、LLVM 15以前では既知の未定義動作がありません。Rust 1.69およびそれ以前(LLVM 15を使用)を使用してWasmtimeをコンパイルした場合も、現時点で問題はありません。ただし、理論的には未定義動作が悪用される可能性が残っているため、ユーザーは修正済みバージョンへのアップグレードを推奨します。ベータ版Rust(現在では1.70)またはナイトリー版Rust(現在では1.71)を使用しているユーザーは、正しく動作させるために修正済みバージョンに更新する必要があります。

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

責任者

GitHub, Inc.

予約する

2023年04月13日

モデレーション

承諾済み

エントリ

VDB-227602

EPSS

0.00450

アクティビティ

非常低い

ソース

Do you need the next level of professionalism?

Upgrade your account now!