Move语言引用安全模块发现整数溢出漏洞 可导致拒绝服务攻击

robot
摘要生成中

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

最近,研究人员在深入分析Move语言的过程中,发现了一个新的整数溢出漏洞。这个漏洞存在于引用安全模块中,可能导致严重的拒绝服务攻击。本文将对这个漏洞的发现过程和技术细节进行详细介绍。

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

Move语言的引用安全机制

Move语言借鉴了Rust的思想,支持两种引用类型:不可变引用(&)和可变引用(&mut)。引用安全模块通过扫描函数中的基本块和字节码指令来验证所有引用操作的合法性。

验证过程主要包括以下步骤:

  1. 对每个基本块进行分析
  2. 执行基本块代码生成post state
  3. 合并pre state和post state
  4. 更新块状态并传播到后续块

其中,state包含locals和borrow graph两个关键组件,用于确保函数中引用的安全性。

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

漏洞详情

该漏洞出现在引用安全模块的join_函数中。当函数参数长度和局部变量长度之和大于256时,由于使用u8类型迭代locals,会导致整数溢出。

具体来说:

  • iter_locals()返回u8类型的迭代器
  • 当参数长度+局部变量长度>256时会溢出
  • 开发人员似乎意识到需要检查这一点,但实际代码只检查了局部变量数量

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

漏洞利用

利用这个漏洞可以构造一个循环代码块:

  1. 第一次执行时触发溢出,改变locals map
  2. 第二次执行时访问不存在的locals索引,导致panic

这会造成节点崩溃,形成拒绝服务攻击。

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

漏洞复现

研究人员提供了一个PoC来复现这个漏洞:

  1. 设置parameters和locals均为SignatureIndex(0),使num_locals为264
  2. 第一次执行后,新的locals map长度变为8
  3. 第二次执行时,copyloc(57)访问不存在的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语言又一高危漏洞

总结与建议

这个漏洞说明:

  1. 没有绝对安全的代码,静态校验可能被绕过
  2. 代码审计很重要,可以发现开发者的疏忽
  3. Move语言应该增加运行时检查,而不仅仅依赖验证阶段的安全检查

研究人员呼吁Move语言设计者加强运行时安全机制,以防止类似漏洞被利用后造成更严重的问题。

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

此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 6
  • 分享
评论
0/400
staking_grampsvip
· 16小时前
Move这漏洞太业余了吧
回复0
区块链假面骑士vip
· 16小时前
写代码的手艺太不细腻了吧
回复0
踏空资深专业户vip
· 16小时前
又出漏洞 Move也不咋地啊
回复0
GateUser-c799715cvip
· 16小时前
代码谁写的 怎么这么菜
回复0
YieldChaservip
· 16小时前
u8又出问题啊
回复0
BridgeJumpervip
· 16小时前
开发不规范 修bug两行泪
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)