Move语言整数溢出漏洞:引用安全验证存风险

Move语言又现高危漏洞:整数溢出可导致节点崩溃

近期,安全研究人员在深入分析Aptos Moveevm时发现了一个新的整数溢出漏洞。这个漏洞存在于Move语言的引用安全验证过程中,可能导致节点崩溃。

Numen Cyber独家发现move语言又一高危漏洞

Move语言在执行字节码前会进行代码验证,分为4个步骤。此漏洞出现在reference_safety步骤中。该步骤主要用于验证引用的安全性,包括检查是否存在悬空引用、可变引用访问是否安全等。

Numen Cyber独家发现move语言又一高危漏洞

验证过程会遍历每个基本块并进行分析。基本块是指除入口和出口外没有分支指令的代码序列。Move语言通过查找分支和循环指令来识别基本块。

Numen Cyber独家发现move语言又一高危漏洞

在验证引用安全性时,会维护一个AbstractState结构体,包含borrow graph和locals信息。验证过程会执行基本块代码,生成执行后的state,然后与执行前的state进行合并,更新块状态并传播到后续块。

Numen Cyber独家发现move语言又一高危漏洞

漏洞出现在join_函数中。该函数用于合并执行前后的state,更新locals和borrow graph。当参数长度和局部变量长度之和大于256时,由于使用u8类型迭代locals,会导致整数溢出。

Numen Cyber独家发现move语言又一高危漏洞

Numen Cyber独家发现move语言又一高危漏洞

Numen Cyber独家发现move语言又一高危漏洞

Numen Cyber独家发现move语言又一高危漏洞

Numen Cyber独家发现move语言又一高危漏洞

Numen Cyber独家发现move语言又一高危漏洞

Numen Cyber独家发现move语言又一高危漏洞

Numen Cyber独家发现move语言又一高危漏洞

Numen Cyber独家发现move语言又一高危漏洞

Numen Cyber独家发现move语言又一高危漏洞

利用这个溢出可以改变基本块的state。在存在循环的代码中,多次执行同一基本块时,可能访问到不存在的locals索引,从而引发panic导致节点崩溃。

研究人员提供了一个PoC代码,通过设置特定的参数和局部变量数量,触发整数溢出,最终导致panic。

Numen Cyber独家发现move语言又一高危漏洞

这个漏洞暴露出即使像Move这样重视安全的语言也可能存在漏洞。建议Move语言设计者在运行时增加更多安全检查,而不仅仅依赖验证阶段的检查。同时也说明了代码审计的重要性。

MOVE2.04%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 2
  • 转发
  • 分享
评论
0/400
Blockchain解码vip
· 08-08 08:49
引用检验太脆弱
回复0
Hash_Banditvip
· 08-06 01:22
安全问题必须重视
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)