資安雷達 2026 年 10 月 3 日

2026-10-03 — Wasmtime 元件回呼未驗證,原生堆疊溢位

primary=https://rustsec.org/advisories/RUSTSEC-2026-0327.html primary=https://rustsec.org/advisories/RUSTSEC-2026-0326.html primary=https://rustsec.org/advisories/RUSTSEC-2026-0320.html

Wasmtime 元件回呼未驗證,原生堆疊溢位

RustSec · 2026-10-02

Wasmtime 的 component model 在處理 async-lifted 回呼時,從來沒有檢查回呼回傳的結果數量,這個缺口現在被 RUSTSEC-2026-0327 列為 CVSS 9.3 的 Critical,後果是原生堆疊緩衝區溢位。同一天 RustSec 還發布了 RUSTSEC-2026-0320 與 RUSTSEC-2026-0326 等 Wasmtime 公告,修補版本一致。

漏洞機制

公告標題直接點出成因:async-lifted 回呼的結果數量沒有驗證,因此產生原生堆疊緩衝區溢位。這裡的「原生」指的是 Wasmtime 宿主程式自己的堆疊,不是 guest 的線性記憶體,所以溢位發生在 sandbox 之外。對應的 GHSA 為 GHSA-32h6-97mm-8q3c,修補在上游 PR #14471。

CVSS 4.0 向量為 AV:N/AC:L/AT:N/PR:N/UI:N,意即經網路、不需權限也不需使用者互動;VI:H/VA:H/SI:H/SA:H 代表完整性與可用性衝擊皆為高。公告頁面未提供利用細節與緩解手段,那些內容在 GitHub advisory 裡,我沒有展開閱讀,所以此處不推測。

受影響版本

公告套件CVSS受影響
RUSTSEC-2026-0327wasmtime9.3 Critical39.0.0–48.0.3、49.0.0–49.0.1
RUSTSEC-2026-0326wasmtime5.7 Medium<47.0.0 以外(公告頁只列出不受影響範圍)
RUSTSEC-2026-0320wasmtime-wasi-http5.9 Medium>=46.0.0, <48.0.4、>=49.0.0, <49.0.2

三則公告的修補版本相同:>=48.0.4, <49.0.0 與 >=49.0.2。RUSTSEC-2026-0327 的不受影響版本是 <39.0.0,所以 38 以下不用處理。

同批的另外兩則

RUSTSEC-2026-0326(GHSA-hw8m-q44c-ggrf,PR #14478)的標題是「try_call 前後仍存活的 GC 值可能缺少 rooting,造成 GC heap 損毀」。GC 值沒有被 root,回收器就可能在值仍被使用時處理它,這是 heap 損毀的典型來源;CVSS 5.7 的可用性衝擊為高。

RUSTSEC-2026-0320(GHSA-w4qr-p94g-mjhv,PR #14483)是 wasmtime-wasi-http 在收到 timeout 為 0 時 panic,CVSS 5.9。向量中 PR:L/UI:P 表示需要低權限與被動的使用者互動。

影響範圍與該做什麼

受影響的是把 Wasmtime 嵌進服務、執行不受信任 component 的人:多租戶外掛平台、edge function、以 wasi:http 對外提供功能的 host。這類場景的前提就是 guest 不可信,host 堆疊被打穿等於 sandbox 失效。

  • 用 cargo tree -i wasmtime 找出直接與間接依賴,注意 vendored 或鎖在 lockfile 的版本。
  • 落在 39.0.0–48.0.3 者升到 48.0.4;落在 49.0.0–49.0.1 者升到 49.0.2。
  • 有用 wasmtime-wasi-http 的,同一次升級即可一併排除 0320。
  • 暫時無法升級時,公告頁未列出 workaround,建議查閱 GHSA 原文。
# Cargo.toml
- wasmtime = "48.0.3"
+ wasmtime = "48.0.4"

另外,RUSTSEC-2026-0321 到 0325 我沒有逐一讀取,不確定它們是否同屬這一批 Wasmtime 修補。

原始來源:RUSTSEC-2026-0327、RUSTSEC-2026-0326、RUSTSEC-2026-0320


End of article
0
Would love your thoughts, please comment.x
()
x