Move语言引用安全模块发现整数溢出漏洞 构造攻击或致系统崩溃

robot
摘要生成中

Move语言引用安全模块中发现整数溢出漏洞

近期,一项深入研究发现了Move语言中的一个新的整数溢出漏洞。这个漏洞存在于引用安全验证过程中,涉及到Move语言的一些核心概念和机制。

Move语言在执行字节码前会进行代码验证,分为四个步骤。这个新发现的漏洞出现在reference_safety步骤中。该步骤负责验证引用的安全性,包括检查是否存在悬空引用、可变引用的访问安全性以及全局存储引用的访问安全性等。

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

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

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

在验证过程中,系统会维护一个AbstractState结构体,包含borrow graph和locals信息,用于确保函数中引用的安全性。验证流程会执行基本块代码,生成执行后的状态,然后将执行前后的状态合并,更新块状态并传播到后续块。

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

漏洞出现在join_函数中。当函数参数长度加上局部变量长度超过256时,由于使用u8类型表示local变量,会导致整数溢出。虽然Move语言有检查locals个数的机制,但只检查了局部变量数量,没有包括参数长度。

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

这个溢出漏洞可能导致拒绝服务攻击。攻击者可以构造一个循环代码块,利用溢出改变块的状态。当再次执行基本块时,如果指令需要访问的索引在新的locals map中不存在,就会导致系统崩溃。

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

为了演示这个漏洞,研究人员提供了一个概念验证(PoC)。通过设置特定的参数和局部变量数量,可以触发整数溢出,导致系统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语言又一高危漏洞

这个漏洞揭示了即使是经过严格设计的语言也可能存在安全隐患。它强调了代码审计的重要性,以及在语言设计中需要考虑更多的边界情况。对于Move语言来说,建议在运行时增加更多的安全检查,而不仅仅依赖于验证阶段的安全机制。

随着Move语言在Web3领域的广泛应用,深入研究和发现这类潜在漏洞对于提升整个生态系统的安全性至关重要。开发者和安全研究人员需要保持警惕,持续关注和改进Move语言的安全性能。

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

MOVE6.89%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 9
  • 转发
  • 分享
评论
0/400
GateUser-aa7df71evip
· 08-19 18:48
又一项目要黄 溢出必崩盘
回复0
TokenVelocityvip
· 08-17 11:11
打工两年养活大家倾家荡产就我一人负重前行3000天创业梦醒
回复0
GateUser-0717ab66vip
· 08-16 22:28
谁溢出谁sb
回复0
论坛潜水怪vip
· 08-16 22:27
move 又搞事情啊?
回复0
TokenTaxonomistvip
· 08-16 22:23
从统计学的角度来看,移动又一次走入了进化的死胡同……说实话,我并不惊讶。
查看原文回复0
Solidity Strugglervip
· 08-16 22:20
溢出漏洞真烦人...
回复0
0x谜语人vip
· 08-16 22:10
又是溢出漏洞 没完没了了都
回复0
交易,随时随地
qrCode
扫码下载 Gate App
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)