
前言
知道創宇區塊鏈安全實驗室知道創宇區塊鏈安全實驗室知道創宇區塊鏈安全實驗室"Public depositFromOtherContract"權限控制問題被攻擊,損失包括7475 枚BNB,共計約216W 美元,目前已將兌通過DEX 換70W 美元的ETH 通過Celer 跨鏈到以太坊,2000 枚BNB 利用BSC-Tornado 進行混幣,餘下3000 枚BNB 在攻擊者地址。
知道創宇區塊鏈安全實驗室基礎信息
基礎信息
基礎信息
基礎信息
被攻擊合約:0x0288fba0bf19072d30490a0f3c81cd9b0634258a
tx:0xfffd3aca0f53715f4c76c4ff1417ec8e8d00928fe0dbc20c89d875a893c29d89
漏洞分析
漏洞分析
漏洞分析
漏洞分析
項目方在GymSinglePool 合約中實現過程中對於0x0288fba0bf19072d30490a0f3c81cd9b0634258a#depositFromOtherContract 函數缺少了權限控制,導致攻擊者能夠通過該函數調用內部_autoDeposit 函數實現零消耗質押:"對於應該開放給用戶的質押內部函數是_deposit 函數,該函數實現了對於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 分鐘後對邏輯合約添加了緊急賬戶處置函數:
總結
總結
總結