Move语言引用安全验证存整数溢出漏洞 可能导致拒绝服务

robot
摘要生成中

Move语言引用安全检查中的整数溢出漏洞分析

近期,一个Move语言引用安全验证过程中的新整数溢出漏洞被发现。这个漏洞出现在验证代码单元的reference_safety步骤中,涉及到Move语言中的基本块和引用安全机制。

Move语言在执行字节码前会进行代码验证,分为四个步骤。引用安全验证是其中一个重要环节,用于检查是否存在悬空引用、对可变引用的访问是否安全等。验证过程会遍历每个基本块的字节码指令。

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

基本块是指除入口和出口外没有分支指令的代码序列。Move语言通过检查分支和循环指令来识别基本块。引用安全验证会扫描每个基本块中的指令,判断引用操作的合法性。

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

验证过程使用AbstractState结构体来表示状态,包含locals和borrow graph两个关键组件。验证会比较执行前后的状态,合并结果并传播到后续块。

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

漏洞出现在join_函数中。当参数长度和局部变量长度之和超过256时,由于使用u8类型迭代locals,会发生整数溢出。这可能导致新的locals map与之前不同,进而在再次执行时访问不存在的索引,引发拒绝服务。

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

PoC代码通过设置特定的参数和局部变量数量,触发整数溢出,导致新的locals map长度缩短。再次执行时访问不存在的offset,最终引发panic。

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语言又一高危漏洞

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

这个漏洞说明即使是静态类型语言也可能存在安全问题。建议Move语言设计者在运行时增加更多安全检查,而不仅仅依赖验证阶段的检查。同时也反映出代码审计的重要性。

MOVE2.61%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 5
  • 分享
评论
0/400
Web3探险家_Linvip
· 08-01 00:31
溢出问题需要立即审计
查看原文回复0
SignatureDeniedvip
· 07-30 09:30
代码质量需继续提高
回复0
WagmiOrRektvip
· 07-29 07:39
代码审计很关键
回复0
liquidation_watchervip
· 07-29 07:38
审计必须跟上
回复0
WagmiWarriorvip
· 07-29 07:16
Move真危险啊
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)