WebAssembly 应用程序运行时 Wasmtime 中的严重漏洞

修正更新 Wasmtime 6.0.1、5.0.1 和 4.0.1 修复了该漏洞 (CVE-2023-26489),该漏洞被指定为严重危险级别。 该漏洞允许将数据写入隔离 WebAssembly 代码允许范围之外的内存区域,攻击者可能会利用该漏洞在隔离 WASI 环境之外执行其代码。

Wasmtime 是一个运行时,用于将具有 WASI(WebAssembly 系统接口)扩展的 WebAssembly 应用程序作为常规独立应用程序运行。 该工具包是用 Rust 语言编写的,该漏洞是由 Cranelift 代码生成器中定义线性内存寻址规则时的逻辑错误引起的,该代码生成器将独立于硬件架构的中间表示转换为 x86_64 架构的可执行机器代码。

特别是,对于 WebAssembly 应用程序,计算的是 35 位有效地址,而不是 WebAssembly 中允许的 33 位地址,这将允许读写操作的虚拟内存限制转移到 34 GB,而沙箱环境设置为距基地址 6 GB。 因此,从基地址开始的 6 到 34 GB 的虚拟内存范围可用于 WebAssembly 应用程序的读写。 该内存可以托管其他 WebAssembly 环境或 WebAssembly 运行时组件。

如果无法更新 Wasmtime 版本,阻止错误的解决方法是指定“Config::static_memory_maximum_size(0)”选项,以对所有线性内存访问启用单独的边界检查(导致显着的性能损失) 。 另一种选择是使用“Config::static_memory_guard_size(1 < 36)”设置来增加放置在有问题的虚拟内存范围中的保护页(访问时抛出异常)的数量(导致保留大量虚拟内存和限制同时运行的 WebAssembly 应用程序的数量)。

来源: opennet.ru

添加评论