# Move语言又现高危漏洞:整数溢出可导致节点崩溃近期,安全研究人员在深入分析Aptos Moveevm时发现了一个新的整数溢出漏洞。这个漏洞存在于Move语言的引用安全验证过程中,可能导致节点崩溃。Move语言在执行字节码前会进行代码验证,分为4个步骤。此漏洞出现在reference_safety步骤中。该步骤主要用于验证引用的安全性,包括检查是否存在悬空引用、可变引用访问是否安全等。验证过程会遍历每个基本块并进行分析。基本块是指除入口和出口外没有分支指令的代码序列。Move语言通过查找分支和循环指令来识别基本块。在验证引用安全性时,会维护一个AbstractState结构体,包含borrow graph和locals信息。验证过程会执行基本块代码,生成执行后的state,然后与执行前的state进行合并,更新块状态并传播到后续块。漏洞出现在join_函数中。该函数用于合并执行前后的state,更新locals和borrow graph。当参数长度和局部变量长度之和大于256时,由于使用u8类型迭代locals,会导致整数溢出。利用这个溢出可以改变基本块的state。在存在循环的代码中,多次执行同一基本块时,可能访问到不存在的locals索引,从而引发panic导致节点崩溃。研究人员提供了一个PoC代码,通过设置特定的参数和局部变量数量,触发整数溢出,最终导致panic。这个漏洞暴露出即使像Move这样重视安全的语言也可能存在漏洞。建议Move语言设计者在运行时增加更多安全检查,而不仅仅依赖验证阶段的检查。同时也说明了代码审计的重要性。
Move语言整数溢出漏洞:引用安全验证存风险
Move语言又现高危漏洞:整数溢出可导致节点崩溃
近期,安全研究人员在深入分析Aptos Moveevm时发现了一个新的整数溢出漏洞。这个漏洞存在于Move语言的引用安全验证过程中,可能导致节点崩溃。
Move语言在执行字节码前会进行代码验证,分为4个步骤。此漏洞出现在reference_safety步骤中。该步骤主要用于验证引用的安全性,包括检查是否存在悬空引用、可变引用访问是否安全等。
验证过程会遍历每个基本块并进行分析。基本块是指除入口和出口外没有分支指令的代码序列。Move语言通过查找分支和循环指令来识别基本块。
在验证引用安全性时,会维护一个AbstractState结构体,包含borrow graph和locals信息。验证过程会执行基本块代码,生成执行后的state,然后与执行前的state进行合并,更新块状态并传播到后续块。
漏洞出现在join_函数中。该函数用于合并执行前后的state,更新locals和borrow graph。当参数长度和局部变量长度之和大于256时,由于使用u8类型迭代locals,会导致整数溢出。
利用这个溢出可以改变基本块的state。在存在循环的代码中,多次执行同一基本块时,可能访问到不存在的locals索引,从而引发panic导致节点崩溃。
研究人员提供了一个PoC代码,通过设置特定的参数和局部变量数量,触发整数溢出,最终导致panic。
这个漏洞暴露出即使像Move这样重视安全的语言也可能存在漏洞。建议Move语言设计者在运行时增加更多安全检查,而不仅仅依赖验证阶段的检查。同时也说明了代码审计的重要性。