Sui 鏈 DeFi 借貸協議 Scallop 遭駭,舊版合約漏洞致 15 萬 SUI 被盜

Neo
分享
Sui 鏈 DeFi 借貸協議 Scallop 遭駭,舊版合約漏洞致 15 萬 SUI 被盜

Sui 鏈上 DeFi 借貸協議 Scallop 於官方 X 帳號(@Scallop_io)發布安全事件通知,證實平台遭到攻擊。Scallop 表示,團隊發現一個與 sSUI spool 獎勵池相關的側合約(side contract)遭到利用,造成約 15 萬枚 SUI 損失。Scallop 強調,受影響合約已被凍結,核心合約仍然安全,僅 sSUI 獎勵池受到波及。

在後續更新中,Scallop 進一步說明:「核心合約已解凍,所有操作已恢復。此問題與核心協議無關,僅限於一個已棄用的獎勵合約。使用者存款未受影響,所有資金安全無虞,存提款功能已恢復正常。」團隊承諾將分享更多細節,並持續監控與強化協議安全。

前 NEAR 核心成員 Vadim:問題出在 17 個月前的舊版套件

針對此次事件,前 NEAR 核心開發者 Vadim(@zacodil) 在 X 上發表深度技術分析,揭露漏洞細節。Vadim 指出,攻擊者非常清楚該呼叫哪一個已棄用的套件。「不是當前運行中的程式碼,也不是 SDK 路徑,而是 2023 年 11 月的一個舊版 V2,數月來無人使用。這要嘛是深度逆向工程,要嘛就是有人早就知道該往哪裡找。這個漏洞已經潛伏了 17 個月。

廣告 - 內文未完請往下捲動

Vadim 解釋,spool 會追蹤一個隨著獎勵分配而增長的 index。每個用戶帳戶在質押時,原本應該記錄當下的 last_index,這樣賺取的點數計算公式為:質押量 × (current_index − last_index),使用者只能從加入時起賺取獎勵。

但在已棄用的 V2 套件中,當建立全新的 spool_account 時,last_index 並未被初始化,仍保持為 0。因此當 update_points 執行時,計算結果變成:點數 = 質押量 × (current_index − 0) = 質押量 × 完整歷史指數。使用者被記入自 2023 年 8 月 spool 建立以來累積的所有獎勵。

Vadim 提供具體數據:spool 指數在 20 個月間成長到 11.9 億。攻擊者質押 13.6 萬枚 sSUI,瞬間獲得 162 兆點數的記入。由於獎勵池採 1:1 兌換比例(分子與分母皆為 1),162 兆點數直接轉換為價值 16.2 萬枚 SUI 的獎勵。但獎勵池內僅有 15 萬枚 SUI,因此被全數抽乾。

4 月鏈上安全事件皆發生在周邊系統

Vadim 說明,正常使用者透過 SDK 使用新套件,新套件已修復 last_index 同步問題。舊版 V2 套件之所以仍留在鏈上,是因為 Sui 套件具有不可變性。—一旦發布,每個舊版本都將永遠可被呼叫。共享的 Spool 與 RewardsPool 物件接受來自任何版本的呼叫,攻擊者繞過 SDK,直接命中舊版程式碼路徑。

Vadim 將此歸類為「Sui 過時套件類漏洞」。他指出,正確的修復方式需要在共享物件上加入版本欄位,並在每個函式中加入 assert!(version == CURRENT_VERSION) 檢查。沒有這個機制,每一個過去發布的套件版本都將永遠是活生生的攻擊面。

Vadim 進一步點出,本月多數攻擊事件都不是發生在核心協議程式碼,而是周邊系統:

  • KelpDAO:RPC 基礎設施
  • Litecoin:MWEB 隱私層
  • Aethir:周邊轉接器的存取控制
  • Scallop:被遺忘的舊版套件

風險提示

加密貨幣投資具有高度風險,其價格可能波動劇烈,您可能損失全部本金。請謹慎評估風險。