sui官方近日发表声明,全力支持cetus protocol在追回被盗资金方面所做的努力,并呼吁掌握相关线索的用户积极提供信息。官方强调,当前的首要任务仍是保护社区利益,并推动被盗事件的妥善解决。此前消息显示,sui生态流动性平台cetus在inca digital的支持及sui基金会的资金赞助下,已悬赏500万美元以征集黑客攻击的相关线索。
Cetus究竟是如何遭遇攻击的?攻击手法有何特点?资金又是如何被转移的?本文将为您深入解析。
事件背景
5月22日,据社区消息,SUI生态上的主要流动性提供商Cetus疑似遭受攻击,导致其流动性池深度急剧下降,平台上多个代币交易对价格暴跌,预计损失金额超过2.3亿美元。随后,Cetus官方发布公告称:“我们在协议中检测到了一起异常事件,出于安全考虑,智能合约已暂时暂停。目前团队正在对此事展开调查,后续将发布进一步的调查声明。”
事件发生后,慢雾安全团队第一时间介入分析,并发布了安全提醒。以下是对此次攻击手法及资金流向的详细解析。

(https://x.com/CetusProtocol/status/1925515662346404024)
关键信息
其中一笔关键攻击交易哈希:
https://suiscan.xyz/mainnet/tx/DVMG3B2kocLEnVMDuQzTYRgjwuuFSfciawPvXXheB3x
攻击者地址:
0xe28b50cef1d633ea43d3296a3f6b67ff0312a5f1a99f0af753c85b8b5de8ff06
被攻击的流动性池地址:
0x871d8a227114f375170f149f7e9d45be822dd003eba225e83c05ac80828596bc
涉及代币:
haSUI / SUI
攻击手法深度解析
此次事件的核心在于攻击者通过精心构造参数,触发了溢出漏洞但成功绕过了系统的检测机制。最终,攻击者仅用极少量的Token,便换取了巨额的流动性资产。具体步骤解析如下:

1. 闪电贷制造价格暴跌
攻击者首先通过闪电贷借出10,024,321.28个haSUI,导致池子价格从18,956,530,795,606,879,104暴跌至18,425,720,184,762,886,价格下跌幅度高达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等DEX兑换为ETH:


随后,该地址将20,000 ETH转入地址0x0251536bfcf144b88e1afa8fe60184ffdb4caf16,目前暂未转出:

目前,该地址在Ethereum上的余额为3,244 ETH:

MistTrack已将上述相关地址加入恶意地址库,并将持续监控这些地址的余额变动。
总结
本次攻击充分展示了数学溢出漏洞的巨大危害。攻击者通过精确计算选择特定参数,利用checked_shlw函数的缺陷,仅以1个代币的成本便获得了价值数十亿的流动性。这是一次极其精密的数学攻击。慢雾安全团队建议,开发人员在智能合约开发中,务必严格验证所有数学函数的边界条件,以防类似漏洞被利用。

















