漏洞关键信息 漏洞标题 Wasmtime segfault or unused out-of-sandbox load with operator on x86-64 漏洞编号 GHSA-vc8c-j3xm-xj73 漏洞影响版本 >= 29.0.0 漏洞修复版本 36.0.5, 40.0.3, 41.0.1 漏洞描述 在x86-64平台上,使用AVX编译的Wasmtime在编译 WebAssembly指令时,Cranelift可能会加载比必要多的8个字节。当禁用基于信号的陷阱时,这可能会导致未捕获的段错误,因为从未映射的保护页面加载数据。禁用保护页面时,可能会加载超出沙箱的数据,但除非Cranelift中有其他漏洞,否则这些数据对WebAssembly客户是不可见的。 漏洞详情 运算符在使用 从内存加载值时,当x86-64上启用AVX时,Cranelift会编译成加载128位(16字节)而不是预期的64位(8字节)的数据。当地址在正确范围内,但不是正确的8字节加载,而是错误的16字节加载时,这可能会导致超出内存最多8字节的加载。这会导致三种不同的行为,具体取决于Wasmtime的配置: 1. 如果禁用保护页面,则会加载这些额外数据。这些数据存在于寄存器的高位,但对WebAssembly客户不可见。 2. 如果启用保护页面且启用基于信号的陷阱,则操作将导致安全的WebAssembly陷阱。陷阱不正确,因为加载的数据不是WebAssembly定义的越界,但加载错误扩大了数据,导致段错误,被捕捉并处理为Wasm陷阱。 3. 如果启用保护页面且禁用基于信号的陷阱,则操作将导致未捕获的段错误,终止进程。 影响 如果禁用基于信号的陷阱且启用保护页面,则WebAssembly客户可以触发宿主进程的未捕获段错误,可能终止宿主进程。这表示一种针对WebAssembly客户的DoS攻击。 修复措施 Wasmtime 36.0.5, 40.0.3, 和 41.0.1已发布以修复此问题。用户应升级到修复后的版本。 参考资料 signals-based-traps 配置 保护页面配置