Sui 链上 DeFi 借贷协议 Scallop 遭攻击:旧版合约漏洞致 15 万 SUI 被盗
近日,Sui 链上的 DeFi 借贷协议 Scallop 经历了一场备受关注的安全风波。项目团队在官方渠道发布紧急安全通知,确认平台遭到攻击,一个与 sSUI spool 奖励池相关的侧合约被利用,导致约 15 万枚 SUI 被盗。所幸的是,核心合约并未受到波及,受影响的侧合约已被迅速冻结。Scallop 在随后的更新中表示,核心合约已解冻,所有操作恢复正常,用户的存款分文未损,存提款功能也已全面恢复。团队承诺后续会分享更多技术细节,并持续加强协议安全监控。
事件迅速发酵,社区关注焦点转向技术层面
此次攻击事件虽然单笔金额不算特别巨大,但因其发生在 新兴公链 Sui 生态的核心借贷项目上,立即引发了广泛讨论。DeFi 安全研究员、前 NEAR 核心开发者 Vadim 第一时间对攻击过程进行了深度拆解,揭示了漏洞的真正根源。
前 NEAR 核心成员 Vadim:问题出在 17 个月前的旧版套件
Vadim 在技术分析中直接点明了漏洞的核心:问题并不在当前运行的代码,也不是什么 SDK 路径,而是 2023 年 11 月一个早已被弃用的 旧版 V2 套件。这个版本的代码已经闲置了数月之久,却依然能被人精准命中。Vadim 直言,这要么是深度逆向工程的结果,要么就是有人早就知道该冲哪个方向使劲。这个漏洞,已经在链上潜伏了整整 17 个月。
spool 机制缺陷:未初始化的 last_index 字段
具体是怎么回事?spool 机制会追踪一个随着奖励分配而不断增长的 index 指数。正常情况下,每个用户在做质押时,系统会记录下当前的 last_index,后续计算收益的公式是:质押量 × (current_index − last_index)。这样用户只能从加入之后开始赚取奖励,逻辑非常清晰。
但问题就出在,那个被弃用的 V2 套件里,当系统创建一个全新的 spool_account 时,last_index 字段压根没有被初始化,默认值为 0。于是当 update_points 函数被执行时,计算结果瞬间变成了:点数 = 质押量 × (current_index − 0),也就是质押量乘以完整的、自 spool 建立以来的历史指数。换言之,新创建的账户一次性记入了自 2023 年 8 月 spool 诞生以来累积的全部奖励。
攻击数据解析:13.6 万 sSUI 质押换来 162 兆点数
Vadim 给出了具体数据:spool 指数在 20 个月间增长到了惊人的 11.9 亿。攻击者质押了 13.6 万枚 sSUI,瞬间获得了 162 兆点数的记入。更致命的是,奖励池采用 1:1 的兑换比例(分子分母都是 1),这 162 兆点数直接对应价值 16.2 万枚 SUI 的奖励。池子里只有 15 万枚 SUI,结果自然是瞬间被抽干。
4 月链上安全事件皆发生在周边系统
Vadim 进一步解释,正常用户通过 SDK 使用的是新的套件版本,那里已经修复了 last_index 的同步问题。但麻烦就麻烦在,Sui 上的套件具有不可变性——一旦发布,每一个历史版本都将永远可以被调用。共享的 Spool 与 RewardsPool 物件接受来自任何版本的呼叫,攻击者只需要绕过 SDK,直接对着旧版代码路径下手就行了。
过时套件类漏洞:Sui 生态特有的安全盲区
他把这类问题归类为“Sui 过时套件类漏洞”。正确的修复方式,需要在共享物件上加入版本字段,并在每个函数里加上 assert!(version == CURRENT_VERSION) 这样的版本检查。没有这道防线,每一个过去发布的套件版本,都会是活生生的攻击面。
行业反思:旧代码为何成为薄弱环节?
Vadim 还点出了一个更值得行业反思的现象:四月份发生的多数攻击事件,都不是出在核心协议代码上,而是发生在周边系统。换句话说,那些被大家认为“不重要”、“没人在用”的旧代码,反而成了最容易被突破的薄弱环节。这件事对任何在 Sui 上构建的项目方来说,都是一个足够深刻的提醒。
Scallop 后续措施与生态启示
截至目前,Scallop 团队已恢复所有核心功能,并承诺对受影响用户进行补偿。同时,团队计划定期审计所有历史版本的合约套件,并引入版本号验证机制。对于 Sui 生态内的其他项目方而言,此次事件提供了三个关键教训:
- 重视历史版本合约的安全性:Sui 的不可变合约特性意味着每一行旧代码都是潜在的攻击面,必须通过版本检查或迁移来彻底禁用。
- 加强周边系统监控:核心协议往往经过严格审计,但侧合约、奖励池、辅助套件等“非核心”模块常被忽视,攻击者正精准瞄准这些盲区。
- 建立快速响应机制:Scallop 在数小时内冻结受影响合约并恢复服务,证明了应急预案的重要性,但预防永远比补救更高效。
Sui 公链安全生态的长期挑战
随着 Move 语言和 Sui 公链的生态不断扩张,类似过时套件漏洞的案例可能还会出现。Vadim 的分析给开发者敲响了警钟:代码的“废弃”不等于“安全”,只有主动切断遗留代码的调用路径,才能真正从源头降低风险。对于用户而言,了解项目方是否对历史版本合约进行过彻底检查与迁移,将成为评估 DeFi 协议安全性的新维度。
此次 Scallop 事件虽然造成了一定损失,但也为整个 Web3 行业提供了宝贵的实战案例。从技术细节到运营响应,从漏洞成因到修复方案,每一个环节都在推动 DeFi 安全标准迈向更高的成熟度。预计未来会有更多 Sui 生态项目跟进,将版本检查机制纳入合约开发的最佳实践之中。
