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

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

推薦文章

Layer2 格局劇變:Base 生態有哪些關鍵亮點?

在激烈競爭的 L2 賽道中,原本穩坐釣魚臺的 Arbitrum 和 Optimism 似乎面臨着前...

加密泡泡啊
120 3個月前

XRP 漲至 7.5 美元?分析師告訴 XRP 大軍為純粹的煙火做好准備!

加密貨幣分析師 EGRAG 表示,XRP 即將迎來關鍵時刻,價格可能大幅上漲,這取決於能否突破關鍵...

加密泡泡啊
128 3個月前

以太坊ETF通過後 將推動山寨幣和整個加密生態大爆發

比特幣ETF通過後市場動蕩,以太坊ETF交易前景分析 比特幣ETF通過後,市場出現了先跌後漲的走勢...

加密泡泡啊
144 3個月前

ZRO為啥這么能漲?

ZRO概述 ZRO代幣,全稱為LayerZero,是LayerZero協議的本地代幣,旨在作為治理...

加密泡泡啊
105 3個月前

今晚ETH迎來暴漲時代 op、arb、metis等以太坊二層項目能否跑出百倍幣?

北京時間7月23日晚上美股开盤後 ETH 的ETF开始交易。ETH的裏程碑啊,新的時代开啓。突破前...

BNBCCC
125 3個月前

Mt Gox 轉移 28 億美元比特幣 加密貨幣下跌 ETH ETF 提前發行

2014 年倒閉的臭名昭著的比特幣交易所 Mt Gox 已向債權人轉移了大量比特幣 (BTC),作...

加密圈探長
113 3個月前