Move语言引用安全模块整数溢出漏洞或致节点拒绝服务

robot
摘要生成中

Move语言引用安全模块存在整数溢出漏洞

近期,安全研究人员在深入分析Move语言时发现了一个严重的整数溢出漏洞。这个漏洞存在于引用安全验证模块中,可能导致拒绝服务攻击。本文将详细介绍这个漏洞的原理及影响。

漏洞背景

Move语言在执行字节码前会进行代码验证,其中包括引用安全性检查。这个过程分为几个步骤,而此次发现的漏洞就出现在reference_safety验证阶段。

引用安全验证的主要流程是:

  1. 将代码划分为基本块
  2. 对每个基本块进行分析
  3. 合并分析前后的状态
  4. 传播结果到后续块

其中使用了AbstractState结构体来表示分析状态,包含locals和borrow graph信息。

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

漏洞细节

漏洞出现在合并分析状态的join_函数中。该函数使用u8类型迭代locals,但如果参数长度和局部变量长度之和超过256,就会发生整数溢出。

具体来说:

  • join_函数中使用self.iter_locals()迭代locals
  • iter_locals()返回u8类型迭代器
  • 如果参数长度+局部变量长度>256,迭代器会溢出

虽然Move有校验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:

  1. 设置参数和局部变量总数>256
  2. 第一次执行后,新的locals map长度会溢出变小
  3. 再次执行时,访问不存在的locals索引会导致panic

这可能引发节点拒绝服务。

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

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

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

漏洞影响

此漏洞可能导致:

  1. Move字节码验证器崩溃
  2. 依赖Move的区块链节点拒绝服务
  3. 绕过部分安全检查

修复建议

  1. 在locals边界检查中增加对参数长度的校验
  2. 使用更大的整数类型如u16来迭代locals
  3. 在运行时增加额外的安全检查

总结

这个漏洞再次说明了即使是设计严谨的语言也可能存在安全隐患。对Move语言来说,建议在验证阶段之外,运行时也增加必要的安全检查。安全研究人员将继续深入分析Move语言,以发现更多潜在问题。

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

MOVE4.16%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 6
  • 转发
  • 分享
评论
0/400
后排吃瓜哥vip
· 08-11 11:51
move又一次翻车
回复0
午夜交易者vip
· 08-10 07:32
这又是哪个菜鸟写的代码 跪了
回复0
MEV迷踪侠vip
· 08-10 07:30
又在玩整数溢出
回复0
WagmiOrRektvip
· 08-10 07:29
还好我之前清仓Move了
回复0
社区打工仔vip
· 08-10 07:27
move又要暴雷了?慌啥
回复0
老钱包已哭晕vip
· 08-10 07:26
又出漏洞?move也不香了吧
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)