DeFi協議MIM_Spell遭黑客“偷襲” 損失超600萬美元
來源: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反洗錢平臺將對資金進行持續監控。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
歐盟打響穩定幣战爭:21家發行商爭奪,Circle搶先登陸,Tether扶持“代理人”
作者:Weilin,PANews 歐盟《加密資產市場監管法案》(MiCA)對穩定幣發行方的監管規則...
Fractal Bitcoin分形比特幣深度研究報告:原生擴展的比特幣高速公路,重新定義比特幣的可能性
比特幣網絡擴展問題一直是區塊鏈領域的核心話題。從最初的隔離見證(SegWit)到閃電網絡(Ligh...
Stacks完成Nakamoto升級,BTC DeFi會是下一個關注點嗎?
當比特幣突破 9 萬美金,加密市場各個生態都开始了自己的狂歡。 AI 敘事持續火熱,Meme 持續...
Beosin
文章數量
65粉絲數
0