Sui官方发了个声明,明确表示支持Cetus Protocol追回被盗资金,希望大家有线索就提供。保护社区、帮项目方解决问题,是目前他们最看重的事。之前有消息说,Cetus这个Sui生态上的流动性协议,在Inca Digital协助和Sui基金会资金支持下,悬赏了500万美元,想收集黑客的信息。
2026虚拟币交易平台推荐:
- 欧易(OKX)交易平台(>>>进入官网<<<)(下载OKX的Android安装包)
- 币安(Binance)交易平台(>>>进入官网<<<)(下载币安Android安装包)
那问题来了:Cetus到底是怎么被盗的?攻击手法是什么样子的?钱又是怎么转走的?下面就跟大家详细拆解一下吧。
背景
5 月 22 日,社区里传出消息:SUI 生态上的流动性提供商 Cetus 疑似被攻击,流动性池的深度一下子掉了一大截,很多代币对的价格都在跌,预估损失超过了 2.3 亿美元。很快,Cetus 发了个公告说:“我们协议里监测到异常事件,为了安全,智能合约已经暂时停了。团队正在查这件事,很快会再发说明。”
事情出来之后,慢雾安全团队第一时间就介入分析,还发了安全提醒。下面就把攻击手法和资金转移的情况仔细说一下。
(https://x.com/CetusProtocol/status/1925515662346404024)
相关信息
其中一笔攻击交易:
https://suiscan.xyz/mainnet/tx/DVMG3B2kocLEnVMDuQzTYRgjwuuFSfciawPvXXheB3x
攻击者地址:
0xe28b50cef1d633ea43d3296a3f6b67ff0312a5f1a99f0af753c85b8b5de8ff06
被攻击的池子地址:
0x871d8a227114f375170f149f7e9d45be822dd003eba225e83c05ac80828596bc
涉及代币:
haSUI / SUI
攻击分析
这次事件的核心,其实是攻击者精心构造了一堆参数,让数字溢出发生了,但又绕过了系统的检测,最后用极少的代币就能换走巨额流动性资产。下面一步步说清楚:
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 个代币换出那么多流动性。核心原因在于 get_delta_a 函数里的 checked_shlw 存在一个溢出检测绕过漏洞。攻击者刚好利用了这一点,让系统在计算实际需要加多少 haSUI 时,算出了严重偏差。因为溢出没被检测到,系统以为需要的 haSUI 数量很少,结果攻击者只花了极少的代币就换到了海量流动性。
系统计算添加这么多流动性需要多少 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 费,然后攻击之前先试了一次,不过失败了:
得手之后,攻击者把一部分资金比如 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 个代币的成本就拿到了价值数十亿的流动性。可以说是一次极其精密的数学攻击。慢雾安全团队建议大家,在开发智能合约时一定要严格测试所有数学函数的边界条件,避免类似问题。另外需要提醒的是,任何时候参与 DeFi 协议都存在智能合约漏洞风险,新手尤其要谨慎,不要只看收益不看风险。本文仅做技术分析,不构成任何投资建议,也不保证数据实时准确,具体行情和合约状态请以交易平台和官方公告为准。投资有风险,入市需谨慎。





















