兩個關鍵 Wasmtime 漏洞可能讓惡意 WebAssembly 模組逃逸沙箱
Two Critical Wasmtime Flaws Could Let Malicious WebAssembly Modules Escape Sandboxes
兩個關鍵 Wasmtime 漏洞可能讓惡意 WebAssembly 模組逃逸沙箱,影響多個版本。
瞭解 Wasmtime 沙箱逃逸漏洞的影響範圍與修補路徑,幫助評估是否需升級,並及時更新受影響版本。
兩個關鍵缺陷存在於 Wasmtime,這是一個可嵌入其他軟體的 WebAssembly 執行環境,可能允許惡意 WebAssembly 模組突破預設的沙盒,專案維護者表示。
攻擊者首先需要一個易受攻擊的 Wasmtime 版本來編譯他們控制的模組,其中一個缺陷僅影響 ARM64 系統。已於 10 月 19 日和 20 日釋出修正版本,維護者尚未報告任何攻擊。
Wasmtime 在網頁瀏覽器之外執行 WebAssembly 程式碼。兩個漏洞均出現在 Cranelift——它預設用來將 WebAssembly 轉譯為機器碼的編譯器。Bytecode Alliance 的 Wasmtime 維護者在 10 月 19 日釋出的安全通告中,將每個缺陷的 CVSS 分數評為 10 分之 9.9。
- CVE-2026-115889 影響所有處理器架構的 Wasmtime。
- CVE-2026-115893 僅影響 ARM64(亦稱 aarch64)。
沙盒的目的是將模組限制在設定的範圍內。模組只能使用自己的記憶體和被授予的主機函式,其程式碼亦只能跳轉到已檢查的位置。
因為兩個缺陷都需要攻擊者控制的模組,風險最高於編譯他人編寫模組的服務。例如 Fastly, 表示其 Compute 平臺使用 Wasmtime 執行客戶端程式碼。安全通告並未列出受影響的服務或說明攻擊者在突破沙盒後可存取什麼。
截至 10 月 26 日,兩個缺陷均未列入美國網路安全與基礎建設安全域性(CISA)維護的 Known Exploited Vulnerabilities 目錄。
受影響的版本
兩個缺陷於不同時間修正,因此您的版本是否受影響取決於您的發行版本與(其中一個缺陷)處理器架構。
| Wasmtime 版本 | CVE-2026-115889(任何架構) | CVE-2026-115893(僅 ARM64) | 應對措施 |
|---|---|---|---|
| 36.0.19 之前(包含 24.x) | 受影響 | 受影響 | 升級至 36.0.19,或切換至 48.0.7、49.0.4 或 50.0.0 |
| 36.0.19 | 已修正 | 已修正 | 這些缺陷不需要任何操作 |
| 37.0.0 至 42.x | 受影響 | 受影響 | 切換至 48.0.7、49.0.4 或 50.0.0 |
| 43.0.0 至 47.x | 未受影響 | 受影響 | 移動到 48.0.7、49.0.4 或 50.0.0 |
| 48.0.0 至 48.0.6 | 未受影響 | 受影響 | 更新至 48.0.7 |
| 48.0.7 | 未受影響 | 已修復 | 不需要任何操作 |
| 49.0.0 至 49.0.3 | 未受影響 | 受影響 | 更新至 49.0.4 |
| 49.0.4,以及 50.0.0 或更高 | 未受影響 | 已修復 | 不需要任何操作 |
Wasmtime 支援長期支援 (LTS) 版本,這些版本以 12 為倍數編號,提供兩年支援。其他版本則兩個月。安全修復對支援的版本保證。
只有 36、48、49、50 版本線仍受支援。其他所有版本線,包括在 2026 年 8 月 20 日結束支援的 24.x LTS 版本線,都未獲修復。
ARM64 主機在四月更新至 36.0.7、42.0.2 或 43.0.1 以修復先前的 Cranelift 沙箱逃逸問題(ARM64),仍受 CVE-2026-115893 影響。
該怎麼做
更新至您所使用版本線的已修復版本:36.0.19、48.0.7 或 49.0.4。Wasmtime 50.0.0,於 October 20 發布,已修復兩個缺陷。未受支援版本線的主機需要遷移至其中一個版本。
Wasmtime 可被編譯成其他程式的函式庫,因此更新命令列工具並不能修復它們。每個包含 Wasmtime 的程式都需要以已修復的版本重新編譯。
兩份安全公告均未列出任何解法。除非主機更新,風險來自任何外部可提供的模組。
兩個漏洞都列在 RustSec 資料庫中,該資料庫是 cargo-audit 工具用來檢查 Cargo.lock 檔案的來源,編號為 RUSTSEC-2026-0380 與 RUSTSEC-2026-0379。
截至 10 月 26 日,GitHub 的安全公告資料庫已經審核過 CVE-2026-115889 的條目,但沒有對 CVE-2026-115893 進行審核。GitHub 表示 只有審核過的條目才會觸發 Dependabot 警示,因此 Dependabot 使用者不應期望 ARM64 漏洞會收到警示。
Spin,這個開源工具用於構建在 Wasmtime 上執行的無伺服器 WebAssembly 應用,已於 10 月 21 日在 4.2.4 版中升級至 Wasmtime 50.0.0。
兩個漏洞的工作原理
CVE-2026-115889 的根源在於 Cranelift 如何儲存其在函式內跟蹤值所使用的數字。在 43 版之前,它將這些數字打包進 24 位欄位,且在正式版建置中,若數字超過欄位大小會無任何錯誤地溢位。
Cranelift 可能會引用錯誤的值,產生不正確的機器碼。根據公告,一個極大或被設計為使用大量值的 WebAssembly 函式,可利用此漏洞強制型別混淆並脫離沙盒。
Wasmtime 的主開發分支已經移除此問題。於 2 月 18 日合併的變更將欄位擴大至 32 位,並於 3 月 20 日隨 Wasmtime 43.0.0 釋出。其說明將此變更描述為編譯更大函式的方式,並未提及安全性。
36.x LTS 分支於 10 月 19 日同樣採用此變更。公告並未說明何時確認此安全影響。
CVE-2026-115893 涉及 br_table,這是一個根據索引跳轉至程式碼中多個位置之一的 WebAssembly 指令。索引超出表格時會跳轉至預設目標。在 ARM64 上,Cranelift 將這些超出範圍的索引送至預設目標,使用只能到達約 1 MiB 的分支。
一個 br_table 擁有超過約 256,000 個目標時,跳轉表會超出該分支可達範圍,導致分支靜默地指向錯誤位置。
公告指出,任何在 ARM64 上使用預設設定的 Wasmtime 引擎「可被使用者控制的 Wasm 模組強制跳轉至任意程式碼」。此缺陷自 Wasmtime 於 2020 年首次支援 ARM64 起即存在。
修正方案將超出範圍的索引直接送入跳轉表本身,因而不需要長距離分支。已修正的版本亦拒絕編譯包含超過 65,520 個目標的 br_table。
覺得這篇文章有趣嗎?請追蹤我們的 Google News、Twitter 與 LinkedIn,閱讀更多我們發布的獨家內容。
