IPBUF安全漏洞报告
English
CVE-2025-64713 CVSS 5.1 中危

CVE-2025-64713 WAMR快速解释器越界数组访问漏洞

披露日期: 2025-11-25

漏洞信息

漏洞编号
CVE-2025-64713
漏洞类型
越界访问/缓冲区溢出
CVSS评分
5.1 中危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
WebAssembly Micro Runtime (WAMR)

相关标签

越界访问WebAssemblyWAMR字节码漏洞快速解释器CVE-2025-64713数组越界

漏洞概述

WebAssembly Micro Runtime(WAMR)是一个轻量级的独立WebAssembly运行时。在2.4.4版本之前,WAMR的快速解释器模式在加载WASM字节码时存在数组越界访问问题。当frame_ref_bottom和frame_offset_bottom数组达到容量上限时,遇到GET_GLOBAL(I32)操作码会导致frame_ref_bottom被扩展而frame_offset_bottom可能未被扩展。如果随后立即遇到触发preserve_local_for_block的if操作码,函数会使用stack_cell_num作为上限遍历数组,由于frame_offset_bottom未被扩展以匹配增加的stack_cell_num,从而导致对frame_offset_bottom的越界访问。该漏洞可被恶意构造的WASM字节码触发,可能造成程序崩溃或潜在的代码执行风险。攻击复杂度为高,需要特定条件才能利用。

技术细节

漏洞根源在于WAMR快速解释器模式中数组扩展机制的不一致。在WASM字节码加载过程中,当栈帧数组frame_ref_bottom和frame_offset_bottom达到容量上限时,系统会尝试扩展这些数组。然而,在处理GET_GLOBAL(I32)操作码时,仅frame_ref_bottom被扩展,而frame_offset_bottom可能未被同步扩展。随后当处理if操作码时,preserve_local_for_block函数会使用stack_cell_num作为遍历数组的上限。由于frame_offset_bottom的长度未匹配增加后的stack_cell_num,导致对该数组的越界访问。攻击者需要构造特定的WASM字节码序列:首先让栈帧数组达到容量临界状态,然后插入GET_GLOBAL(I32)操作码触发不均匀扩展,紧接着使用if操作码触发越界访问条件。此漏洞影响快速解释器模式的字节码加载流程,不影响其他执行模式。

攻击链分析

STEP 1
步骤1
攻击者创建恶意WASM字节码文件,其中包含精心构造的操作码序列
STEP 2
步骤2
WAMR快速解释器加载字节码,frame_ref_bottom和frame_offset_bottom数组达到容量临界状态
STEP 3
步骤3
字节码执行GET_GLOBAL(I32)操作码,触发frame_ref_bottom扩展但frame_offset_bottom未扩展
STEP 4
步骤4
紧接着执行if操作码,触发preserve_local_for_block函数
STEP 5
步骤5
函数使用stack_cell_num作为上限遍历数组,导致frame_offset_bottom越界访问
STEP 6
步骤6
越界访问可能导致程序崩溃、信息泄露或在特定条件下的代码执行

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2025-64713: WAMR Out-of-Bounds Array Access // This PoC generates a malicious WASM bytecode that triggers the vulnerability // Compile with: wat2wasm poc.wat -o poc.wasm (module (func $trigger_oob (result i32) ;; Fill local slots to capacity (simulate condition) (local i32) (local i32) (local i32) (local i32) (local i32) (local i32) (local i32) (local i32) (local i32) (local i32) (local i32) (local i32) ;; Get global to trigger uneven array expansion (global.get 0) ;; Use if block to trigger preserve_local_for_block ;; This will cause OOB access on frame_offset_bottom (if (result i32) (then (local.get 0)) (else (i32.const 0)) ) ) (global i32 (i32.const 0)) )

影响范围

WAMR < 2.4.4

防御指南

临时缓解措施
立即升级WAMR至2.4.4版本。临时缓解措施包括:限制来自不可信源的WASM字节码执行,对WASM模块进行安全审计,启用运行时安全监控,以及使用沙箱环境隔离WASM执行。对于无法立即升级的场景,可考虑禁用快速解释器模式并使用其他执行模式替代。

参考链接

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