2023年5月6日,據Beosin-Eagle Eye態勢感知平台消息,算法穩定幣DEI項目合約遭受黑客攻擊,黑客獲利約630萬美元。Beosin安全團隊第一時間對事件進行了分析,結果如下。
事件相關信息
攻擊交易
https://bscscan.com/tx/0xde2c8718a9efd8db0eaf9d8141089a22a89bca7d1415d04c05ba107dc1a190c3
https://arbiscan.io/tx/0xb1141785b7b94eb37c39c37f0272744c6e79ca1517529fec3f4af59d4c3c37ef
攻擊者地址
Bsc:0x08e80ecb146dc0b835cf3d6c48da97556998f599
Arbitrum:0x189cf534de3097c08b6beaf6eb2b9179dab122d1
被攻擊合約
0xde1e704dae0b4051e80dabb26ab6ad6c12262da0
兩條鏈上漏洞原理以及攻擊手法相同,這裏以Bsc鏈上交易爲例進行分析:
1.攻擊者調用攻擊合約的0xf321f780函數發起攻擊。
2.攻擊合約首先調用DEI合約的approve函數給pair授權一個很大的值,隨後調用DEI合約的burnFrom函數,傳入pair地址。
3.隨後,攻擊合約直接調用DEI合約的transferFrom函數將pair的DEI代幣全部轉移給攻擊合約,只剩下一個單位的DEI代幣。
4.之後,攻擊合約調用pair的sync函數,更新儲備量,此時pair中只有1個單位的DEI和超130萬枚USDT。
5.最後,攻擊合約使用所有的DEI將USDC全部兌換出來。
我們從上述的攻擊過程不難發現,本次事件的主要問題在於第2步與第3步,攻擊者調用了approve和burnFrom函數之後,爲什么就能直接調用transFrom函數將“其他人”的代幣轉移走?
我們看一下approve與burnFrom函數的代碼,approve函數爲正常授權函數,並沒有什么問題,關鍵在於burnFrom函數(如下圖),burnFrom函數正常邏輯是獲取被銷毀地址給調用者地址授權數量,之後將授權數量減去銷毀數量的新值用於更新授權數量。可以看到,309行的代碼函數獲取用戶授權值,而开發者將被銷毀地址與調用者地址寫反,導致獲取的授權值是黑客可以任意設置的,在這之前,黑客調用approve函數授權了一個巨大的數,所以這裏獲取的值是一個巨大的值,在310行代碼,將授權值進行更新,這裏傳遞的值就是一個異常大的值,導致burnFrom函數調用結束後,pair地址給黑客地址授權了一個巨大的值,而黑客也能任意控制pair的代幣。
截止發文時,被盜資金還未被攻擊者轉出。
針對本次事件,Beosin安全團隊建議:
1.合約开發時,涉及權限相關的函數一定要仔細思考其運行邏輯,並做好每一步的測試,防止因爲粗心大意導致不可挽回的後果。
2. 項目上线前,建議選擇專業的安全審計公司進行全面的安全審計,規避安全風險。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
標題:黑客獲利約630萬美元 算法穩定幣$DEI被攻擊事件分析
地址:https://www.torrentbusiness.com/article/35220.html
標籤:安全漏洞