WebAssembly 應用程式運行時 Wasmtime 中的嚴重漏洞

修正更新 Wasmtime 6.0.1、5.0.1 和 4.0.1 修正了該漏洞 (CVE-2023-26489),該漏洞被指定為嚴重危險等級。 此漏洞允許將資料寫入隔離 WebAssembly 程式碼允許範圍之外的記憶體區域,攻擊者可能會利用漏洞在隔離 WASI 環境之外執行其程式碼。

Wasmtime 是一個運行時,用於將具有 WASI(WebAssembly 系統介面)擴充功能的 WebAssembly 應用程式作為常規獨立應用程式執行。 該工具包是用Rust 語言編寫的,該漏洞是由Cranelift 程式碼產生器中定義線性記憶體尋址規則時的邏輯錯誤引起的,該生成器將獨立於硬體架構的中間表示轉換為x86_64 架構的可執行機器代碼。

特別是,對於 WebAssembly 應用程序,計算的是 35 位元有效位址,而不是 WebAssembly 中允許的 33 位元位址,這將允許讀寫操作的虛擬記憶體限制轉移到 34 GB,而沙箱環境設定為距基底位址6 GB。 因此,從基底位址開始的 6 到 34 GB 的虛擬記憶體範圍可用於 WebAssembly 應用程式的讀寫。 此記憶體可以託管其他 WebAssembly 環境或 WebAssembly 執行時間元件。

如果無法更新 Wasmtime 版本,阻止錯誤的解決方法是指定「Config::static_memory_maximum_size(0)」選項,以對所有線性記憶體存取啟用單獨的邊界檢查(導致顯著的效能損失) 。 另一個選擇是使用「Config::static_memory_guard_size(1 < 36)」設定來增加放置在有問題的虛擬記憶體範圍中的保護頁(存取時拋出例外)的數量(導致保留大量虛擬記憶體和限制同時運行的WebAssembly 應用程式的數量)。

來源: opennet.ru

添加評論