SharkTeam:MIM_SPELL被攻擊事件原理分析

來源:SharkTeam

2024年1月30日,MIM_SPELL遭受閃電貸攻擊,因為精度計算漏洞,項目方損失650萬美元。

20240131184143650image.png

SharkTeam對此事件第一時間進行了技術分析,並總結了安全防範手段,希望後續項目可以引以為戒,共築區塊鏈行業的安全防線。

一、攻擊交易分析

攻擊者地址:

0x87F585809Ce79aE39A5fa0C7C96d0d159eb678C9

攻擊合約:

0xe1091d17473b049cccd65c54f71677da85b77a45

0x13AF445F81B0DEcA5dCb2Be6A4C691F545c95912

0xe59b54a9e37ab69f6e9312a9b3f72539ee184e5a

被攻擊合約:

0x7259e152103756e1616A77Ae982353c3751A6a90

攻擊交易:

0x26a83db7e28838dd9fee6fb7314ae58dcc6aee9a20bf224c386ff5e80f7e4cf2

0xdb4616b89ad82062787a4e924d520639791302476484b9a6eca5126f79b6d877

攻擊流程:

1. 攻擊者(0x87F58580)通過閃電貸借取300000枚MIM代幣。

20240131184138991image.png

2. 隨後向被攻擊合約(0x7259e1520)發送了240000枚的MIM代幣,用於下一步償還用戶的借款。

20240131184148811image.png

3. 攻擊者(0x87F58580)隨後調用repayForAll函數償還其他用戶的借款,後續又依次調用repay函數償還其他用戶借款,目的是將elastic變量減小為0.

20240131184151931image.png

20240131184156321image.png

4. elastic變量減小為0後,攻擊者(0x87F58580)創建新的攻擊合約(0xe59b54a9)並不斷的進行borrow和repay函數的調用,直到將elastic =0,base = 120080183810681886665215049728時結束。

20240131184202998image.png

20240131184206816image.png

5. 隨後攻擊者(0x87F58580)調用borrow函數和DegenBox合約的withdraw函數借出了5000047枚MIM代幣。

20240131184210840image.png

6. 攻擊者(0x87F58580)歸還閃電貸函數,並將4400000枚MIM代幣兌換為1807枚ETH,本交易獲利約450W。

20240131184214469image.png

二、漏洞分析

攻擊的本質是在進行借貸變量計算時精度出現了問題,使得關鍵變量elastic和base值被操縱後比例失衡,導致計算抵押物和借貸數量時出現問題,最終超額借出MIM代幣。

被攻擊合約(0x7259e1520)中borrow函數和repay函數在對elastic和base兩個變量進行計算時,都採用了向上取整的方式。

20240131184219617image.png

20240131184223183image.png

20240131184226803image.png

20240131184235073image.png

20240131184238458image.png

攻擊者(0x87F58580)首先通過償還其他用戶借款的方式,將elastic變量和base變量分別設置為了0和97。

20240131184246523image.png

隨後不斷的調用borrow函數和repay函數並且參數amount都為1,在第一次調用borrow函數時,由於elastic=0,會執行上述if邏輯並回到add函數中。這樣會導致elastic = 1,base = 98。

攻擊者(0x87F58580)再調用borrow函數並傳入1,由於elastic=1,會執行else邏輯,計算出的返回值為98,這樣在回到add函數中時,elastic=2,base變量為196.

但此時攻擊者(0x87F58580)調用repay函數並傳入1,由於elastic=2,會執行else邏輯,計算出的elastic變量本來為 1*2/98 =0,但由於下面存在向上取整的步驟,導致計算出的返回值1,這樣在回到sub函數中時,elastic變量又變回1,而base變量為195。

可以看到在經歷一次borrow-repay循環後,elastic變量不變而base變量近乎翻倍,利用這一漏洞,黑客頻繁進行borrow-repay函數循環,最後再調用一次repay,最終使得elastic=0 base = 120080183810681886665215049728。

20240131184252939image.png

當elastic和Base變量之間的比例嚴重失衡後,攻擊者(0x87F58580)添加了一點抵押物後即可通過solvent修飾符中的限制條件,從而借出大量MIM代幣。

20240131184258337image.png

三、安全建議

針對本次攻擊事件,我們在開發過程中應遵循以下注意事項:

1. 開發精度計算相關邏輯時,慎重考慮精度和取整情況。

2. 項目上線前,需要通過專業的第三方審計團隊進行智能合約審計。

  • Related Posts

    Bankless:有哪些值得關注的去中心化內容創作平臺?

    作者:William M. Peaster,Bankless…

    VIRTUAL的投資價值

    來源:道說區塊鏈 AI代理是這輪行情中我很看好的一個賽道。儘…

    發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

    You Missed

    Meme Coin 沒有毀掉這個周期 而是加速了行業成熟

    • By jakiro
    • 22 4 月, 2025
    • 4 views
    Meme Coin 沒有毀掉這個周期 而是加速了行業成熟

    Bankless :Vitalik 的虛擬機提案

    • By jakiro
    • 22 4 月, 2025
    • 8 views
    Bankless :Vitalik 的虛擬機提案

    Bankless:有哪些值得關注的去中心化內容創作平臺?

    • By jakiro
    • 22 4 月, 2025
    • 5 views
    Bankless:有哪些值得關注的去中心化內容創作平臺?

    以太坊能否重振雄風?三大關鍵癥結

    • By jakiro
    • 22 4 月, 2025
    • 6 views
    以太坊能否重振雄風?三大關鍵癥結

    川普關稅:一場單邊訛詐

    • By jakiro
    • 22 4 月, 2025
    • 5 views
    川普關稅:一場單邊訛詐

    維基解密、谷歌和比特幣:2011 年BTC面臨什麼挑戰?

    • By jakiro
    • 22 4 月, 2025
    • 4 views
    維基解密、谷歌和比特幣:2011 年BTC面臨什麼挑戰?
    Home
    News
    School
    Search