CVE-2026-34971Wasmtime是一个WebAssembly运行时。在受影响版本中,其Cranelift编译后端在aarch64架构上存在编译错误,导致在处理特定堆访问形状时访问了错误的内存地址。该漏洞可导致用于边界检查的地址计算与实际加载的地址计算出现分歧。攻击者可利用此差异构造恶意WebAssembly模块,绕过边界检查并实现对主机内存的任意读写,从而导致沙箱逃逸。
该漏洞发生在Wasmtime的Cranelift编译后端, specifically on aarch64。问题出在处理特定模式的加载指令:load(iadd(base, ishl(index, amt))),其中amt是常量。由于在指令选择阶段对amt值的掩码操作不正确,导致Cranelift错误地匹配了降低规则,偏离了WebAssembly的语义。这种错误的编译使得用于边界检查的地址和实际加载的地址不一致。成功利用需要满足多个条件:启用64位WebAssembly线性内存(Config::wasm_memory64)、禁用Spectre缓解措施(禁用signals-based-traps会自动禁用Spectre缓解)。攻击者通过精心构造的Wasm模块,可以通过边界检查但加载预期范围之外的地址,最终实现对宿主机内存的任意读写原语,完全绕过沙箱限制。