Euler Finance遭閃電貸攻擊 損失1.97億美金 漏洞分析附PoC
發表於 2023-03-14 08:02 作者: Numen Cyber
背景
根據Numen鏈上監控顯示,Mar-13-2023 08:56:35 AM +UTC,Euler Finance 項目因爲Etoken中的donateToReserves函數缺少流動性檢查而遭到閃電貸攻擊。黑客通過不同幣種多次調用完成獲利,本次攻擊共計損失1.97億美元,金額巨大,涉及6種代幣。當前,資金還存留在黑客的账戶中。
黑客地址:https://etherscan.io/address/0xb66cd966670d962c227b3eaba30a872dbfb995db
黑客合約:https://etherscan.io/address/0x036cec1a199234fc02f72d29e596a09440825f1c
攻擊交易(其中一筆): https://etherscan.io/tx/0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d
詳細分析
1.黑客先從Aave閃電貸借了3000W個Dai後部署了兩個合約,一個是借貸合約,一個是清算合約。
2.調用deposit函數將借來的Dai其中的20 M個質押到 Euler Protocol合約中獲取了19.5M個eDAI。
3.Euler Protocol可以調用mint函數借出10倍存款,此時黑客從中借出了195.6M個eDAI 和200M個dDAI。
4.調用repay函數,用閃電貸剩余的10M個DAI償還債務並且銷毀了10M個dDAI,然後繼續調用min函數借出195.6M個eDAI 和200M個dDAI。
5.調用 donateToReserves函數捐贈10倍的償還資金,發送了100M的eDAI,並調用 liquidate函數去清算,得到310M的dDAI和250M的eDAI。
6.調用withdraw函數獲取了38.9M的Dai並且去歸還了借的閃電貸30M。從中獲利8.87M個Dai。
漏洞成因
先看一下donateToReserves函數,用戶能夠被清算是在這一步發生的。
與下圖的mint函數對比我們發現,donateToReserves函數少了一個關鍵步驟checkLiquidity。
然後跟進看 checkLiquidity的實現。我們發現了callInternalModule函數,它會調用RiskManager對用戶進行檢查保證Etoken>Dtoken。
在每次操作的時候需要對用戶的流動性進行檢查,調用checkLiquidity完成,而donateToReserves這個函數沒有執行此操作,導致用戶可以通過該協議的某些函數先使自己處於被清算的狀態,然後在完成清算。
攻擊復現
我們成功復現了此次攻擊,詳細PoC可查看鏈接:https://github.com/numencyber/SmartContractHack_PoC/tree/main/EulerfinanceHack
總結
Numen實驗室提醒項目方,合約在上线前要做好安全審計,保證合約安全性,對於借貸類項目需要特別關注資金償還,流動性檢測,債務清算等問題。Numen實驗室專注於爲WEB3保駕護航。
原文鏈接: Euler Finance遭閃電貸攻擊,損失1.97億美金!漏洞分析附PoC
標題:Euler Finance遭閃電貸攻擊 損失1.97億美金 漏洞分析附PoC
地址:https://www.coinsdeep.com/article/11360.html
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。