Wasmtime 两个严重漏洞可导致恶意 WebAssembly 模块逃逸沙箱
Swati Khandelwal 2026-10-27 17:23 北京

速修复
聚焦源代码安全,网罗国内外最新资讯!
Wasmtime 项目的维护者表示,Wasmtime中存在两个严重漏洞(CVE-2026-115889和CVE-2026-115893,CVSS评分均为9.9),可导致恶意的 WebAssembly 模块逃逸旨在限制它的沙箱。Wasmtime 是一种可以内置到其它软件中的 WebAssembly 运行时。
攻击者首先需要一个存在漏洞的 Wasmtime 构建版本来编译所控制模块才能实施利用,并且其中一个漏洞仅影响 ARM64 系统。修复版本已于10月19日和20日发布,维护者尚未报告任何攻击利用。
Wasmtime 在网页浏览器之外运行 WebAssembly 代码。这两个漏洞都存在于 Cranelift 中,后者是它默认用来将 WebAssembly 转换为机器码的编译器。这两个漏洞影响的产品版本如下:
CVE-2026-115889 影响所有处理器架构上的 Wasmtime。
CVE-2026-115893 仅影响 ARM64(也称为 aarch64)。
该沙箱的目的是将模块限制在设定的边界内。模块只能使用自己的内存和提供给它的宿主函数,并且其代码只能跳转到经过检查的位置。
由于这两个漏洞都需要攻击者控制的模块,所以对于编译其他人编写的模块的服务来说风险最高。例如,Fastly 表示其 Compute 平台使用 Wasmtime 运行客户代码。公告没有点名任何受影响的服务,也没有具体说明攻击者在逃逸沙箱后可以访问的内容。截至10月26日,这两个漏洞均未出现在美国网络安全和基础设施安全局 (CISA) 维护的已知被利用漏洞目录中。

受影响版本

这两个漏洞在不同时间修复,因此版本是否受影响取决于发布分支,以及处理器架构。

Wasmtime 支持版本号是12的长期支持 (LTS) 版本,支持期限为两年。其它版本提供两个月的支持。受支持版本保证提供安全修复。目前仅仍支持 36、48、49 和 50 发布分支。其它所有分支,包括于 2026 年 8 月 20 日结束支持的 24.x LTS 分支,均未获得修复方案。在四月份更新到 36.0.7、42.0.2 或 43.0.1 以便修复之前 ARM64 上 Cranelift 沙箱逃逸漏洞的 ARM64 主机,仍然受 CVE-2026-115893 影响。

行动措施

用户应更新到分支对应的修复版本:36.0.19、48.0.7 或 49.0.4。10 月 20 日发布的 Wasmtime 50.0.0 修复了这两个漏洞。处于不受支持分支的主机需要迁移到这些版本之一。
Wasmtime 可以作为库构建到其它程序中,因此更新命令行工具并不能修复它们。每个包含 Wasmtime 的程序都需要使用修复后的版本重新构建。这两份公告均未列出应变措施。在主机更新之前,任何外部人员可以提供的模块均可视作风险来源。这两个漏洞均列在 RustSec(cargo-audit 工具用来检查 Cargo.lock 文件的数据库)中,编号为 RUSTSEC-2026-0380 和 RUSTSEC-2026-0379。
截至 10 月 26 日,GitHub 的公告数据库中有 CVE-2026-115889 的已审核条目,但没有 CVE-2026-115893 的条目。GitHub 表示只有已审核的条目才会触发 Dependabot 警报,因此 Dependabot 用户不应期望收到关于 ARM64 漏洞的警报。Spin 是一个用于构建无服务器 WebAssembly 应用程序的开源工具,在 Wasmtime 上运行,已于 10 月 21 日在 4.2.4 版本中迁移到 Wasmtime 50.0.0。

漏洞如何运作

CVE-2026-115889 源于 Cranelift 存储用于跟踪函数内部值的数字的方式。在版本 43 之前,它将这些数字打包到 24 位字段中,并且在发布构建中,对于字段来说过大的数字会发生溢出且没有任何错误提示。
随后 Cranelift 可能会引用错误的值,产生不正确的机器码。公告提到,一个非常大的 WebAssembly 函数,或者一个被精心构造以使用许多值的函数,可以利用这一点来强制产生类型混淆并逃逸沙箱。Wasmtime 的主要开发线已经消除了这个问题。2 月 18 日合并的一项更改将字段拓宽到 32 位,并于 3 月 20 日在 Wasmtime 43.0.0 中发布。其描述将其呈现为一种编译更大函数的方法,并未提及安全性。36.x LTS 分支在 10 月 19 日获得了相同的更改。公告未说明何时认识到其安全影响。
CVE-2026-115893 涉及 br_table,这是一条 WebAssembly 指令,根据索引跳转到代码中的多个位置之一。表外的索引会指向默认目标。在 ARM64 上,Cranelift 使用一个只能达到约 1 MiB 的分支将这些超出范围的索引发送到默认目标。一个拥有超过约 256000 个目标的 br_table 会使得跳转表太大,超出了该范围,因此该分支会静默指向错误的位置。
公告称,ARM64 上任何使用默认设置的 Wasmtime 引擎“都可以被用户控制的 Wasm 模块强制跳转到任意代码”。自 Wasmtime 在 2020 年首次支持 ARM64 以来,该漏洞就一直存在。修复程序将超出范围的索引通过跳转表本身发送,因此不需要长分支。修复后的版本也拒绝编译具有超过 65520 个目标的 br_table。
代码卫士试用地址:https://sast.qianxin.com/
开源卫士试用地址:https://oss.qianxin.com/
原文链接
https://thehackernews.com/2026/10/two-critical-wasmtime-flaws-could-let.html
题图:Pixabay License
本文由奇安信编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。


奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的产品线。

觉得不错,就点个 “在看” 或 "赞”
本文转载自微信公众号「代码卫士」,查看原文。版权归原作者所有,如有侵权请联系删除。