Move语言引用安全机制发现整数溢出漏洞 影响AptosMoveEVM

robot
摘要生成中

Move语言引用安全机制中发现新的整数溢出漏洞

近期,安全研究人员在深入分析Aptos MoveEVM时发现了一个新的整数溢出漏洞。这个漏洞存在于Move语言的引用安全验证过程中,具体位于reference_safety步骤。

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

Move语言在执行字节码前会进行代码单元验证,分为4个步骤。引用安全验证是其中的一个重要环节,主要用于确保没有悬空引用、对可变引用的访问是安全的、对全局存储引用的访问是安全的等。

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

引用安全验证的核心是分析每个函数中的基本块。基本块是指除入口和出口外没有分支指令的代码序列。Move通过遍历字节码、查找所有分支指令和循环指令来确定基本块。

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

验证过程使用AbstractState结构体来表示状态,包含borrow graph和locals两部分。验证时会执行基本块代码生成post state,然后与pre state合并更新块状态,并传播到后续块。这个过程类似V8 turbofan中的Sea of Nodes思想。

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

漏洞出现在join_函数中。当函数参数长度与局部变量长度之和大于256时,由于使用u8类型迭代local,会导致整数溢出。虽然Move有校验locals个数的过程,但只校验了locals而未包括参数length。

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 map中不存在,就会导致DoS。

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

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

MOVE5.44%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 5
  • 分享
评论
0/400
无聊看戏的vip
· 07-20 18:00
这bug离谱死了,怎么还这么低级
回复0
WalletInspectorvip
· 07-20 17:59
呵 用move不如用rust
回复0
Meme币操盘手vip
· 07-20 17:58
哈哈又一个l1被干掉了... 经典的整数溢出阿尔法泄露
查看原文回复0
LidoStakeAddictvip
· 07-20 17:56
Move又出问题了 啧啧
回复0
Buy_High_SellLowvip
· 07-20 17:53
又摆烂了 毁灭吧 一切重来
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)