CVE-2026-24116CVE-2026-24116是Wasmtime WebAssembly运行时中的一个安全漏洞。Wasmtime是一个用Rust编写的独立WebAssembly运行时,被广泛用于各种应用场景中嵌入执行WebAssembly代码。该漏洞影响x86-64平台上启用AVX指令集的版本。问题出在Cranelift JIT编译器编译WebAssembly的f64.copysign指令时,会读取比实际需要多8字节的数据。在正常情况下,这额外的8字节读取会被guard pages保护机制拦截并转换为陷阱(trap)。然而,当禁用signals-based-traps机制时,这种越界读取会导致未捕获的段错误(segfault),因为程序试图访问未映射的guard pages。如果同时禁用了guard pages,那么可能存在从沙箱外加载数据的风险,尽管在正常情况下Cranelift的其他安全机制会阻止这些数据被WebAssembly guest代码访问。该漏洞的CVSS评分为5.5,属于中等严重级别,需要本地访问和用户交互才能触发。攻击者需要诱骗用户执行特定的WebAssembly模块才能利用此漏洞。
该漏洞的根本原因在于Cranelift JIT编译器对f64.copysign指令的代码生成存在缺陷。f64.copysign是WebAssembly规范中定义的双精度浮点数符号复制指令,它接受两个参数:一个是待处理的值,另一个是提供符号位的值。在x86-64架构上,该指令通常通过MOVDDUP或类似指令实现,这些指令会从内存中加载64位(8字节)的数据。然而,Cranelift在某些优化过程中可能生成读取16字节的代码,但实际只使用了其中8字节。当Wasmtime启用了guard pages(作为防御深度措施)时,额外的8字节读取会落在guard pages上,触发内存访问异常,Wasmtime会捕获这个异常并正确处理。但如果禁用了signals-based-traps,异常不会被正确捕获,导致程序崩溃。更危险的是,如果同时禁用了guard pages(通过Config::memory_guard_size设置),这个越界读取可能访问到沙箱外的内存区域,可能导致敏感信息泄露。攻击者可以通过构造包含f64.copysign指令的恶意WebAssembly模块,并诱骗目标用户在启用AVX的x86-64系统上执行来触发此漏洞。