創宇區塊鏈|小缺陷大損失 GYM Network 何至於此
發表於 2022-06-09 12:49 作者: 區塊鏈情報速遞pro
前言
北京時間 2022 年 6 月 8 日,知道創宇區塊鏈安全實驗室 自動數據監測工具監測到 BSC 鏈上 NFT 項目 GYM Network 因 "Public depositFromOtherContract" 權限控制問題被攻擊,損失包括 7475 枚 BNB,共計約 216W 美元,目前已將兌通過 DEX 換 70W 美元的 ETH 通過 Celer 跨鏈到以太坊,2000 枚BNB 利用 BSC-Tornado 進行混幣,余下 3000 枚 BNB 在攻擊者地址。
知道創宇區塊鏈安全實驗室 第一時間跟蹤本次事件並分析。
基礎信息
被攻擊合約 :0x0288fba0bf19072d30490a0f3c81cd9b0634258a
攻擊者地址:0xB2C035eee03b821cBe78644E5dA8B8eaA711D2e5
攻擊合約:0xcD337b920678cF35143322Ab31ab8977C3463a45、0x68b5f1635522ec0e3402b7e2446e985958777c22
tx:0xfffd3aca0f53715f4c76c4ff1417ec8e8d00928fe0dbc20c89d875a893c29d89
GymSinglePool 代理合約: 0xa8987285e100a8b557f06a7889f79e0064b359f2
漏洞分析
項目方在 GymSinglePool 合約中實現過程中對於 0x0288fba0bf19072d30490a0f3c81cd9b0634258a#depositFromOtherContract 函數缺少了權限控制,導致攻擊者能夠通過該函數調用內部 _autoDeposit 函數實現零消耗質押:
對於應該开放給用戶的質押內部函數是 _deposit 函數,該函數實現了對於token 的審批傳入,如下圖所示:
對應的 _autoDeposit 函數則實現了"特權"質押,即不需要轉入 Token 進行質押。同時該函數直接暴露給了用戶,函數對比如下:
攻擊流程
攻擊者爲了防止鏈上 MEV 和搶跑機器人,將合約進行了分步部署執行,同時部署/調用了多次以完成對 GymNetwork 合約 (0x3a0d9d7764FAE860A659eb96A500F1323b411e68) 中的 GYMNET Token 完全抽離,以其中一筆部署調用爲例:
1. 部署合約後調用 depositFromOtherContract 實"特權"質押,對應0xfd4a2266 方法:
內部調用細節如下:
2. 調用 0x30649e15 實現對上一步特權質押的 Token 回撤:
3. 利用 0x1d111d13 函數售出獲取到的的 GYM-Token:
重復多次"特權"質押--回撤--售出步驟,攻擊者最終獲取到 7475 枚 BNB :
爲了抑制搶跑,攻擊者將添加質押和回撤進行了步驟分離,兩個步驟均爲核心操作,同時刻意提高添加部分步驟的 Gas Price 爲 15/20gwei, 可見攻擊者是有意爲之。
溯源處置
本次攻擊原因是項目方實現的特權函數權限控制不當,在攻擊發現的 1 小時後項目方將 GymSinglePool 代理合約的邏輯合約進行了多次修改,爲其添加了權限控制:
並在 20 分鐘後對邏輯合約添加了緊急账戶處置函數:
而對於項目方 Deployer 地址分析,其部署的多個 GymSinglePool 合約根據追蹤僅在兩天前部署的 GymSinglePool 合約中存在漏洞,4 天前的合約則不存在此函數:
同時代理合約對應的邏輯合約被升級爲漏洞合約的事件發生在在 2 days 13 hrs ago:
攻擊者的資金准備 (From Tornado) 則在約 6 小時以前,攻擊者的身份也值得令人深思。
總結
雖然只是一處小的控制缺陷,卻導致了數百萬美元的損失。項目方的處置雖較爲及時,漏洞導致的損失卻難以挽回。該類型漏洞在審計過程中很容易被發現並將歸納到邏輯缺陷/不安全的外部調用,各項目方在开發和審計流程上切莫大意。
標題:創宇區塊鏈|小缺陷大損失 GYM Network 何至於此
地址:https://www.coinsdeep.com/article/3500.html
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。