DeFi協議MIM_Spell遭黑客“偷襲” 損失超600萬美元
發表於 2024-01-31 13:46 作者: Beosin
來源:Beosin
北京時間2024年1月30日,據Beosin旗下EagleEye安全風險監控、預警與阻斷平台監測顯示,DeFi協議MIM_Spell遭黑客閃電貸攻擊,導致了超600萬美元的損失。目前攻擊者將被盜資金兌換爲ETH,並轉移到兩個攻擊者地址上,Beosin KYT將對資金進行持續監控,同時我們對本次漏洞進行了分析。
漏洞分析
該事件發生的主要原因是攻擊者利用了項目方合約使用了向上取整的算法,並且控制了參數爲1,將向上取整的誤差控制的最大,從而導致账本失衡。
合約存在兩個函數,分別是borrow和repay,一個是向合約借錢,一個是還錢給合約。
Borrow函數將指定借款數額,並且通過比例轉換計算出債務值,更新到調用者的總債務值。如下圖,這裏合約的add算法採用了向上取整。
Borrow函數將指定還款債務值,並且通過比例轉換計算出還款數額,將還款數額轉移到本合約。如下圖,這裏合約的sub算法依然採用了向上取整。
了解了借款和還款的過程,我們來看看黑客是如何利用該漏洞的。
黑客先將合約的借款數額與債務值控制爲了0與97(如何控制將在下一節介紹)。
接下來不停調用borrow和repay函數,並且借款和還款數值都爲1,最後將借款數額與債務值控制爲了0和120080183810681886665215049728,導致比例嚴重失衡。
根據上述代碼規則(elastic=0,base=97),當攻擊者調用一次borrow並傳入1時,兩個账本將變爲elastic=1、base=98(elastic爲0時,將按數值同步增加),再次調用一次borrow並傳入1時,將變成elastic=2、base=196(elastic不爲0時,將按比例同步增加)。
接下來攻擊者調用repay函數傳入1,將調用sub函數,此時計算出來的elastic應該等於1*1/196=>0,但是算法向上取整,導致計算出來elastic=1,結果將變成elastic=1、base=195。可以看到,此時elastic不變,base卻翻倍。
攻擊者通過多次上述方式,將elastic=0、base=120080183810681886665215049728。最終通過一筆borrow將合約500多萬MIM借貸出來。
攻擊流程
明白了函數問題點,我們來看看攻擊者是如何實施攻擊的(其中一筆交易爲例)。
1.攻擊者首先借貸了30萬枚MIM。
2.隨後,攻擊者在回調函數中查詢借款數額與債務值,可以看到,此時爲24萬和23萬。
3.接下來攻擊者調用repayForAll函數,歸還了24萬MIM代幣,將elastic控制得極小。
4.接下來,攻擊者通過repay函數歸還了其他用戶的負債,最終將借款數額與債務值控制爲了0與97。
5.攻擊者新創建合約,並通過上訴borrow與repay的方式,將借款數額與債務值控制爲了0和120080183810681886665215049728。
6.最終通過一筆borrow將500萬MIM借貸出來,並歸還閃電貸。
資金追蹤
截止發稿,被盜的超600萬美元的資金,全部被攻擊者兌換爲了ETH,並且一直分散存在黑客地址未移動,Beosin KYT反洗錢平台將對資金進行持續監控。
標題:DeFi協議MIM_Spell遭黑客“偷襲” 損失超600萬美元
地址:https://www.coinsdeep.com/article/90624.html
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。