CVE-2025-64713WebAssembly 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操作码触发越界访问条件。此漏洞影响快速解释器模式的字节码加载流程,不影响其他执行模式。