SharkTeam:Prisma Finance被攻擊事件分析

2024-04-02 22:04:46

2024年3月28日,Prisma Finance遭受閃電貸攻擊,項目方損失約1221萬美元。

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

一、攻擊交易分析

攻擊者1:0x7e39e3b3ff7adef2613d5cc49558eab74b9a4202(簡記為0x7e39)

攻擊合約1:0xd996073019c74b2fb94ead236e32032405bc027c(簡記為0xd996)

攻擊者2:0x7fe83f45e0f53651b3ed9650d2a2c67d8855e385

攻擊合約2:0x4148310fe4544e82f176570c6c7b649290a90e17

被攻擊的目標合約:0x1cc79f3f47bfc060b6f761fcd1afc6d399a968b6

攻擊包含16筆交易,以第一筆攻擊交易為例:

0x00c503b595946bccaea3d58025b5f9b3726177bbdc9674e634244135282116c7

攻擊流程如下:

1. 讀取地址0x56a201b872b50bbdee0021ed4d1bb36359d291ed(簡記為0x56a2)在目標合約中的所有抵押物和債務。

返回結果如下:

地址0x56a2在目標合約中抵押物共有1,745 wstETH,總債務共有1,442,100 mkUSD。

2. 攻擊者0x7e39通過攻擊合約0xd996調用mkUSD債務合約中的flashLoan函數。

參數receiver設置為MigrateTroveZap,amount為上面查詢到的全部債務。

然後,在flashLoan函數中會調用receiver(這裏是MigrateTroveZap)中的onFlashLoan函數。

onFlashLoan函數通過閃電貸先償還原來的所有債務,提取抵押物到receiver,然後receiver將一定數量的抵押物重新抵押,並借取一定的債務。其中主要調用了2個函數:

(1)closeTrove函數,償還債務並將所有的抵押物(1745.08 swtETH)從troverManager提取到receiver(這裏是MigrateTroveZap合約);

(2)openTrove函數,由receiver將463.18 wstETH重新抵押到troverManager中,並負債1,443,598 mkUSD。

從上面數據可以看出,flashLoan函數執行完成後,receiver中仍然保留了從troverManager中提取的屬於地址0x56a2的抵押物,數量約為1745.08 – 463.18 = 1281.90 wstETH。

3. 攻擊者0x7e39通過攻擊合約0xd996從Balancer中通過閃電貸借取了1 wstETH。

然後,抵押1 wstETH並借取債務2000 mkUSD,加上fee,共計負債2200 mkUSD。

4. 與步驟2類似,調用mkUSD債務合約中的flashLoan函數,這裏參數receiver仍然設置為MigrateTroveZap,amount為上一筆質押1 wstETH後的全部債務,即2000 mkUSD。在FflashLoan函數中會調用receiver中的onFlashLoan函數,然後調用closeTrove和openTrove函數。

只是,這裏closeTrove和openTrove函數中的參數account不再是上面的地址0x56a2,而是質押了1 wstETH的攻擊合約0xd996。

(1)closeTrove函數,償還債務並將所有的抵押物(1 swtETH)從troverManager提取到receiver(這裏仍然是MigrateTroveZap合約)。此時receiver中共有1281.90 +1=1282.90 wstETH.

(2)openTrove函數,由receiver將1282.80 wstETH(幾乎全部)重新抵押到troverManager中,並負債2001.8 mkUSD。

實際上,這裏抵押物中1281.80 wstETH是不屬於攻擊合約0xd996,而是屬於上面的地址0x56a2。

5. 最後,攻擊者0x7e39通過攻擊合約0xd996單獨調用closeTrove函數,將抵押的1282.80 wstETH 提取到了攻擊合約0xd996中。

償還閃電貸後,攻擊者仍獲利1281.80 wstETH,約2.30M USD。

二、漏洞分析

本次事件的根本原因是項目合約存在邏輯和權限校驗,使得攻擊者可以利用該漏洞獲取其他账戶地址的質押資產。

攻擊者最終獲得的wstETH是原本地址0x56a2在troverManager合約中的抵押物,通過mkUSD合約的flashLoan函數,自定義MigrateTroveZap合約中onFlashLoan函數的參數,利用 MigrateTroveZap將其轉變為攻擊合約的抵押物,然後將其提取出來。

攻擊者通過mkUSD合約中的flashLoan函數以及MigrateTroveZap合約中的onFlashLoan函數操縱其他账戶地址的抵押和提取。

(1)flashLoan函數中缺少對參數receiver地址的校驗,因為onFlashLoan函數中receiver會接收account的所有抵押物,因此需要對receiver進行可信的校驗;

(2)onFlashLoan函數中缺少對account地址的校驗,因為closeTrove和openTrove函數都是操作的account的資產,因此需要對account增加權限方面的校驗;

除了對這兩個地址參數的校驗外,可能還需要對flashLoan函數中的數量參數以及實現邏輯進行校驗。

三、安全建議

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

(1)項目在設計和开發過程中,要保持邏輯的完整性和嚴謹性,尤其是涉及到資產的轉移過程中,更要加強對函數調研權限的校驗,保證調用者、調用函數、函數參數、轉账邏輯等都是安全可信的。

(2)項目上线前,需要找專業的第三方審計團隊進行合約審計。

About Us

SharkTeam的愿景是保護Web3世界的安全。團隊由來自世界各地的經驗豐富的安全專業人士和高級研究人員組成,精通區塊鏈和智能合約底層理論。提供包括風險識別與阻斷、智能合約審計、KYT/AML、鏈上分析等服務,並打造了鏈上智能風險識別與阻斷平臺ChainAegis,能有效對抗Web3世界的高級持續性威脅(Advanced Persistent Threat,APT)。已與Web3生態各領域的關鍵參與者,如Polkadot、Moonbeam、polygon、Sui、OKX、imToken、Collab.Land等建立長期合作關系。

官網:https://www.sharkteam.org

Twitter:https://twitter.com/sharkteamorg

Telegram:https://t.me/sharkteamorg

Discord:https://discord.gg/jGH9xXCjDZ

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

推薦文章

3EX AI交易平臺解析港股加密布局:Web3浪潮下的投資狂潮

2024年,Web3技術風潮席卷全球,香港股市也迎來了一輪加密布局的熱潮。從博雅互動斥資上億美元購...

3EX AI交易平臺
5 5小時前

ETH的長期價值與3EX AI交易的創新應用

盡管以太坊(ETH)在今年初至今的表現並不理想,但我們對其長期市場定位和創新能力依然充滿信心。作為...

3EX AI交易平臺
5 5小時前

以太坊現貨ETF審核倒數3天:SEC會技術性駁回?若否決發行方將提訴訟?

美國證券交易委員會(SEC)是否批准以太坊現貨ETF 的關鍵時刻即將在本周23 日登場,SEC 需...

枯藤老樹新芽
5 5小時前

比特幣價格瞄准 8.3 萬美元:隨着 BTC 價格瞄准 ATH,鯨魚推動看漲前景

比特幣漲至 65,000 美元,給不穩定的加密市場帶來了希望。比特幣卷土重來後,一些山寨幣價格上漲...

一只傑瑞
5 5小時前

叛逆中本聰與 BONK 競爭 PEPE 保持強勢

PEPE 飆升 29%,BONK 略有上漲 2%,Rebel Satoshi 的 RECQ 飆升...

JSQZT60n
5 5小時前

Dragonfly 合夥人:為什么低流通/高 FDV 的代幣全都下跌了?

原文標題:Why are all these low float / high FDV coins...

鏈捕手
5 5小時前