CVE-2026-35195Wasmtime是一个WebAssembly运行时环境。在24.0.7、36.0.7、42.0.2和43.0.1版本之前,Wasmtime在处理组件间字符串转码时存在缺陷。主机在尝试通过指针写入数据之前,未验证访客组件realloc函数的返回值。这允许恶意访客组件诱使主机在距离线性内存基地址4GiB范围内的任意位置写入任意转码后的字符串字节。默认配置下,这会导致主机访问未映射内存并使进程崩溃(拒绝服务);而在特定配置下,可能导致主机数据结构或其他访客内存的损坏。
该漏洞的根源在于Wasmtime处理组件模型(Component Model)中字符串转码逻辑时的验证缺失。当主机需要将转码后的字符串数据写入访客内存时,它会依赖访客组件提供的`canonical_abi_realloc`函数来分配或重新分配内存缓冲区。在受影响的版本中,主机代码直接使用了该函数返回的指针,而未检查该指针是否指向访客线性内存的有效范围。
攻击者可以构建一个恶意的WebAssembly组件,重写`realloc`函数,使其返回一个经过计算的、超出线性内存边界的任意地址(例如基地址加上接近4GiB的偏移量)。当主机调用需要字符串转码的导出函数时,它会尝试将数据写入该恶意指针指向的地址。由于Wasmtime默认为每个访客预留4GiB的虚拟地址空间,这种写入通常会触及未映射的内存区域,导致 segmentation fault 和进程崩溃。然而,如果管理员修改了配置,减少了预留内存或移除了保护页,这种任意写入能力可能会覆盖有效的主机内存或其他实例的数据,从而导致更严重的数据破坏或潜在的代码执行风险。