慢雾:Cetus被盗2.3亿美元,解析攻击手法及资金转移情况
作者:Victory & Lisa
背景
5 月 22 日,据社区消息,SUI 生态上的流动性提供商 Cetus 疑似遭攻击,流动性池深度大幅下降,Cetus 上多个代币交易对出现下跌,预计损失金额超过 2.3 亿美元。随后,Cetus 发布公告称:“我们协议中检测到了一起事件,安全起见,智能合约已暂时暂停。目前,团队正在对该事件展开调查。我们很快会发布进一步的调查声明。”
事件发生后,慢雾安全团队第一时间介入分析,并发布安全提醒。以下是对攻击手法及资金转移情况的详细解析。
(https://x.com/CetusProtocol/status/1925515662346404024)
相关信息
其中一笔攻击交易:
https://suiscan.xyz/mainnet/tx/DVMG3B2kocLEnVMDuQzTYRgjwuuFSfciawPvXXheB3x
攻击者地址:
0xe28b50cef1d633ea43d3296a3f6b67ff0312a5f1a99f0af753c85b8b5de8ff06
被攻击的池子地址:
0x871d8a227114f375170f149f7e9d45be822dd003eba225e83c05ac80828596bc
涉及代币:
攻击分析
此次事件的核心是攻击者通过精心构造参数,使溢出发生但又能绕过检测,最终用极小的 Token 金额即可换取巨额流动性资产,以下为具体步骤解析:
1.攻击者首先通过闪电贷借出了10,024,321.28 个 haSUI,导致池子价格从18,956,530,795,606,879,104暴跌至18,425,720,184762886,价格下跌幅度达到99.90%。
2.攻击者精心选择了一个极窄的价格区间开立流动性头寸:
- Tick 下限:300000(价格:60,257,519,765,924,248,467,716,150)
- Tick 上限:300200 (价格:60,863,087,478,126,617,965,993,239)
- 价格区间宽度:仅1.00496621%
3.接着就是此次攻击的核心,攻击者声明要添加10,365,647,984,364,446,732,462,244,378,333,008单位的巨大流动性,但由于存在漏洞,系统只收取了1 个代币 A。
我们来分析一下攻击者为什么能够用1 个 Token 兑换出巨额流动性。其核心原因在于get_delta_a函数中的checked_shlw存在溢出检测绕过漏洞。攻击者正是利用了这一点,使得系统在计算实际需要添加多少haSUI 时出现了严重偏差。由于溢出未被检测,系统误判了所需 haSUI 的数量,导致攻击者仅需极少的 Token,就能兑换出大量的流动性资产,从而实现了攻击。
当系统计算添加如此巨大流动性需要多少haSUI 时:
这里的关键在于checked_shlw函数的实现存在严重缺陷。实际上,任何小于0xffffffffffffffff << 192的输入值都会绕过溢出检测。然而,当这些值被左移64 位时,结果会超出u256的表示范围,此时高位数据被截断,导致得到的结果远小于理论值。这样一来,系统在后续计算中就会低估所需的haSUI 数量。
- 错误掩码:0xffffffffffffffff << 192= 非常大的数值(约2^256-2^192)
- 几乎所有输入都小于这个掩码,绕过溢出检测
- 真正的问题:当n >= 2^192时,n << 64会超出u256 范围并被截断
攻击者构造的中间值liquidity * sqrt_price_diff =6277101735386680763835789423207666908085499738337898853712:
- 小于错误掩码,绕过溢出检测
- 但在左移64 位后会超出 u256 最大值,从而导致超出的部分被截断
- 导致最终计算结果约小于1,但由于是向上取整,quotient算出来就等于1
4.最后攻击者移除流动性,获得巨额代币收益:
- 第一次移除:获得10,024,321.28 个 haSUI
- 第二次移除:获得1个haSUI
- 第三次移除:获得10,024,321.28 个 haSUI
5.攻击者归还闪电贷,净获利约10,024,321.28个haSUI 和5,765,124.79 个SUI,攻击完成。
项目方修复情况
攻击发生后,Cetus 发布了修复补丁。具体修复代码可参考:https://github.com/CetusProtocol/integer-mate/pull/7/files#diff-c04eb6ebebbabb80342cd953bc63925e1c1cdc7ae1fb572f4aad240288a69409。
修复后的checked_shlw函数如下:
修复说明:
- 将错误的掩码0xffffffffffffffff << 192修正为正确的阈值1 << 192
- 将判断条件从n > mask修正为n >= mask
- 确保当左移64 位可能导致溢出时,能正确检测并返回溢出标志
MistTrack 分析
据分析,攻击者0xe28b50cef1d633ea43d3296a3f6b67ff0312a5f1a99f0af753c85b8b5de8ff06 获利约 2.3 亿美元,包括 SUI、vSUI、USDC 等多种资产。
我们发现攻击者在两天前就准备好了Gas Fee,然后在攻击之前进行了一次尝试,但失败了:
获利后,攻击者将部分资金如
USDC、SOL、suiETH 通过跨链桥如 Sui Bridge、Circle、Wormhole、Mayan 跨链到 EVM 地址 0x89012a55cd6b88e407c9d4ae9b3425f55924919b:
其中,5.2341 WBNB 跨链到了 BSC 地址 0x89012a55cd6b88e407c9d4ae9b3425f55924919b:
接着,攻击者将价值
1,000 万美元的资产存入 Suilend:
攻击者还将24,022,896 SUI 转入新地址 0xcd8962dad278d8b50fa0f9eb0186bfa4cbdecc6d59377214c88d0286a0ac9562,目前暂未转出:
幸运的是,据Cetus 称,在 SUI 基金会及其他生态系统成员合作下,目前已成功冻结了在 SUI 上的 1.62 亿美元的被盗资金。
(https://x.com/CetusProtocol/status/1925567348586815622)
接下来,我们使用链上反洗钱与追踪工具MistTrack 分析 EVM 上接收跨链资金的地址 0x89012a55cd6b88e407c9d4ae9b3425f55924919b。
该地址在BSC 上收到 5.2319 BNB,暂未转出:
该地址在Ethereum 上收到 3,000 个 USDT、4,088 万个 USDC、1,771 个 SOL 和 8,130.4 个 ETH。
其中,USDT、USDC 和 SOL 通过 CoW Swap、ParaSwap 等兑换为 ETH:
接着,该地址将20,000 ETH 转入地址 0x0251536bfcf144b88e1afa8fe60184ffdb4caf16,暂未转出:
目前该地址在Ethereum 上的余额为 3,244 ETH:
MistTrack 已将以上相关地址加入恶意地址库,同时,我们将对持续对地址余额进行监控。
总结
本次攻击展示了数学溢出漏洞的威力。攻击者通过精确计算选择特定参数,利用checked_shlw函数的缺陷,以1 个代币的成本获得价值数十亿的流动性。这是一次极其精密的数学攻击,慢雾安全团队建议开发人员在智能合约开发中严格验证所有数学函数的边界条件。
Bitcoin Rally Not Over Yet? Short-Term Holder MVRV Suggests Further Upside
As Bitcoin (BTC) consolidates just below the $120,000 mark, concerns are mounting over whether the t...
Ripple CEO Hails GENIUS Act as Historic Win for U.S. Crypto Regulation
The post Ripple CEO Hails GENIUS Act as Historic Win for U.S. Crypto Regulation appeared first on Co...
Crypto Market Hits $4T ATH – Why Upside Potential Outweighs Downside Risk
Your daily access to the backroom....