背景介紹
近期,我們偵測到Mode Chain 上針對Ionic Money的一系列攻擊:
https://explorer.mode.network/tx/0x37e53b15cb7f298bd8c45fcbbd914ba90feb3946f5511fc55bc986b7472956df
Ionic Money 是一個compound fork 的DeFi 項目,在Base 、 Optimism 、 Bob 、 Fraxtal 、Lisk 、 Mode 上均提供服務。本次是在Mode Chain 上遭受攻擊者攻擊,本次攻擊共損失約8.5 MUSD 。
攻擊及事件分析
首先,攻擊者透過mint 使用60 LBTC 兌換了undelying assets , 300 ionLBTC 。
但是,當我們看攻擊者60 LBTC 來源時發現這60 LBTC 是攻擊者自己mint 的,攻擊者在發動攻擊前,透過mint 獲得了250 LBTC 。
隨後,我們查看了LBTC 的合約,發現合約中的Bascule 為:
0x0000000000000000000000000000000000000000 。
在LBTC的實作中mint 需要通過Bascule 的驗證,
其中, _confirmDeposit 的實作如下:
LBTC 官方文件中對Bascule 的介紹如下,其主要功能為一個on-chain 的合約和off-chain 的系統,防止攻擊者進行攻擊。
因為,此LBTC 的Bascule 沒有對應的合約,所以攻擊者可以任意mint 。隨後,攻擊者透過mint 的LBTC 抵押到IonicMoney 中,提取了所有池子的資金完成攻擊。所以,造成這次攻擊的根本原因是IonicMoney 在創建借貸池時沒有驗證LBTC 是否是官方創建的合約,導致借貸池的unlying assets 為fake token ,攻擊者隨意mint 後通過borrow 掏空所有資金。
總結
本次漏洞成因主要是因為IonicMoney 專案方在創建借貸池時沒有驗證資產對應的合約是否是官方部署的,導致借貸池的undelying asset 為fake token 。建議專案方在設計經濟模型、價格電腦制和程式碼運作邏輯時要多方驗證,合約上線前審計時盡量選擇多個審計公司交叉審計,最後在上線前部署時檢查對應的token 是否是官方部署的。