币圈版瞒天过海?慢雾事件报告:骇客如何利用代码漏洞洗劫 Cetus 2.2 亿美元

日前震惊币圈的 Cetus 协议 2.2 亿美元被盗案,引起各界讨论。资安团队慢雾也发布了整起事件的完整报告,慢雾团队表示本次攻击展现了数学溢位漏洞的威力。攻击者透过精确计算选择特定参数,利用 checked_shlw 函数的缺陷,以 1 个代币的成本获得价值数十亿的流动性。这是一次极为精密的数学攻击,并建议开发人员在智慧合约开发中严格验证所有数学函数的边界条件。

慢雾:事件核心是溢出检查的漏洞

慢雾团队表示这次事件的核心是攻击者透过精心建构参数,使溢位发生但又能绕过侦测,最终以极小的代币金额即可换取巨额流动性资产。与先前 @neeksec 的分析一致。

(从协议漏洞到去中心化辩证:详解 Cetus 事件始末,MOVE 语言安全性动摇了吗?)

攻击者首先透过闪电贷借出 1,002 万枚 haSUI,迅速使 haSUI/SUI 的池中价格暴跌 99.9%。接着在 tick 值 300000~300200 的区间添加流动性,这个价格区间仅 1% 的区间宽度。

接着就是事件的关键漏洞,攻击者声称加入巨量流动性 (超过 10 的 27 次方),但由于 checked_shlw 函数的编码错误,合约仅向其收取 1 枚 haSUI。

计算所需流动性公式 (来源:慢雾科技)

慢雾分析攻击者之所以能够用 1 个代币换出巨额流动性。其核心原因在于 get_delta_a 函数中的 checked_shlw 存在溢出检查出现漏洞。攻击者正是利用了这一点,使得系统在计算实际需要添加多少 haSUI 时出现了严重偏差。由于溢出未被侦测,系统误判了所需 haSUI 的数量,导致攻击者仅需极少的 Token,就能兑换出大量的流动性资产。

任何小于 0xffffffffffffffff << 192 的输入值都会绕过溢出检查。然而,当这些值被左移 64 位元时,结果会超出 u256 的表示范围,此时高位元资料被截断,导致得到的结果远小于理论值。这样一来,系统在后续计算中就会低估所需的 haSUI 数量。

出现问题的代码(来源:慢雾科技)

攻击者分三次移除流动性,共获得 2,004 万枚 haSUI 与超过 576 万枚 SUI。最后攻击者归还闪电贷,最终净获利逾 2.3 亿美元。

Cetus 已修复代码

事后 Cetus 修复了代码,包含:

将 0xffffffffffffffff << 192 修正为正确的阈值 1 << 192。

将判断条件从 n > mask 修正为 n >= mask。

确保当左移 64 位元可能导致溢出时,能正确侦测并传回溢出标志。

修复后的 checked_shlw 函数 (来源:慢雾科技) 慢雾团队:开发者应严格验证所有数学函数的边界条件

慢雾表示攻击者在两天前就准备好 gas fee 了,在攻击前还有一次尝试,但失败了。目前攻击者的 Sui 地址资金已被冻结,EVM 地址也被慢雾加入黑名单进行追踪。

慢雾团队表示本次攻击展现了数学溢位漏洞的威力。攻击者透过精确计算选择特定参数,利用 checked_shlw 函数的缺陷,以 1 个代币的成本获得价值数十亿的流动性。这是一次极为精密的数学攻击,慢雾安全团队建议开发人员在智慧合约开发中严格验证所有数学函数的边界条件。

这篇文章 币圈版瞒天过海?慢雾事件报告:骇客如何利用代码漏洞洗劫 Cetus 2.2 亿美元 最早出现于 链新闻 ABMedia。

查看原文
本页面内容仅供参考,非招揽或要约,也不提供投资、税务或法律咨询。详见声明了解更多风险披露。
  • 赞赏
  • 评论
  • 分享
评论
0/400
暂无评论
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)