
攻擊細節分析
攻擊細節分析
攻擊細節分析
通過查看本次攻擊交易,我們可以發現整個攻擊過程非常短。攻擊者先將FDO 和FUSDT 轉入wCRES/USDT 資金池中,然後通過資金池合約的flashLoan 函數借出wCRES 和USDT 代幣,並對資金池合約進行初始化操作。
為何存入FDO 和FUSDT 代幣卻能成功借出wCRES 和USDT ,並且初始化資金池合約呢?是因為資金池的閃電貸功能有漏洞嗎?
接下來我們對flashLoan 函數進行詳細分析:
通過分析具體代碼我們可以發現,在進行閃電貸時會先通過_transferBaseOut 和_transferQuoteOut 函數將資金轉出,然後通過DVMFlashLoanCall 函數進行具體外部邏輯調用,最後再對合約的資金進行檢查。可以發現這是正常閃電貸功能,那麼問題只能出在閃電貸時對外部邏輯的執行上。
通過分析閃電貸的外部邏輯調用,可以發現攻擊者調用了wCRES/USDT 資金池合約的init 函數,並傳入了FDO 地址和FUSDT 地址對資金池合約進行了初始化操作。
攻擊流程
攻擊流程
攻擊流程
1、攻擊者先創建FDO 和FUSDT 兩個代幣合約,然後向wCRES/USDT 資金池存入FDO 和FUSDT 代幣。
2、接下來攻擊者調用wCRES/USDT 資金池合約的flashLoan 函數進行閃電貸,借出資金池中的wCRES 與USDT 代幣。
總結
總結
總結
本次攻擊發生的主要原因在於資金池合約初始化函數沒有任何鑑權以及防止重複調用初始化的限制,導致攻擊者利用閃電貸將真幣借出,然後通過重新對合約初始化將資金池代幣對替換為攻擊者創建的假幣,從而繞過閃電貸資金歸還檢查將真幣收入囊中。
參考攻擊交易:
https://cn.etherscan.com/tx/0x395675b56370a9f5fe8b32badfa80043f5291443bd6c8273900476880fb5221e