2024 年 6 月 10 日,UwU Lend 遭受攻擊,項目方損失約 1930 萬美元。

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

一、攻擊交易分析

攻擊者:0x841dDf093f5188989fA1524e7B893de64B421f47

攻擊者共發起了 3 筆攻擊交易:

攻擊交易 1 :

0x242a0fb4fde9de0dc2fd42e8db743cbc197ffa2bf6a036ba0bba303df296408b

攻擊交易 2 :

0xb3f067618ce54bc26a960b660cfc28f9ea0315e2e9a1a855ede1508eb4017376

攻擊交易 3 :

0xca1bbf3b320662c89232006f1ec6624b56242850f07e0f1dadbe4f69ba0d6ac3

以攻擊交易 1 爲例,進行分析:

攻擊合約:0x21c58d8f816578b1193aef4683e8c64405a4312e

目標合約:UwU Lend 金庫合約,包括:

uSUSDE:0xf1293141fc6ab23b2a0143acc196e3429e0b67a6

uDAI:0xb95bd0793bcc5524af358ffaae3e38c3903c7626

uUSDT:0x24959f75d7bda1884f1ec9861f644821ce233c7d

攻擊過程如下:

1. 從不同平臺閃電貸多種代幣,包括 WETH, WBTC, sUSDe, USDe, DAI, FRAX, USDC, GHO

代幣接收地址爲0x4fea76b66db8b548842349dc01c85278da3925da

閃電貸的代幣和數量如下:

從 Aave V3中閃電貸 159, 053.16 WETH 和 14, 800 WBTC

從 Aave V2中閃電貸 40, 000 WETH

從 Spark 中閃電貸 91, 075.70 WETH 和 4, 979.79 WBTC

從 Morpho 中閃電貸 301, 738, 880.01 sUSDe, 236, 934, 023.17 USDe 和 100, 786, 052.15 DAI

從 Uniswap V3: FRAX-USDC 中閃電貸 60, 000, 000 FRAX 和 15, 000, 000 USDC

從 Balancer 中閃電貸 4, 627, 557.47 GHO 和 38, 413.34 WETH

從 Maker 中閃電貸 500, 000, 000 DAI

共計約 328, 542.2 WETH, 19779.79 WBTC, 600786052.15 DAI, 301, 738, 880.01 sUSDe, 236, 934, 023.17 USDe, 4, 627, 557.47 GHO, 60, 000, 000 FRAX, 15, 000, 000 USDC

2. 將閃電貸的 Token 轉移到合約0xf19d66e82ffe8e203b30df9e81359f8a201517ad(簡記爲0x f 19 d)中,爲發起攻擊做準備。

3. 通過兌換(exchange)代幣,控制 sUSDe 的價格(降低價格)

(1)USDecrvUSD.exchange

將 8, 676, 504.84 USDe 兌換成 8, 730, 453.49 crvUSD,USDecrvUSD 中 USDe 數量增加,價格降低,crvUSD 數量減少,價格提高

(2)USDeDAI.exchange

將 46, 452, 158.05 USDe 兌換成 14, 389, 460.59 DAI,USDeDAI 中 USDe 數量增加,價格降低,DAI 數量減少,價格提高

(3)FRAXUSDe.exchange

將 14, 477, 791.69 USDe 兌換成 46, 309, 490.86 FRAX,USDeDAI 中 USDe 數量增加,價格降低,FRAX 數量減少,價格提高

(4)GHOUSDe.exchange

將 4, 925, 427.20 USDe 兌換成 4, 825, 479.07 GHO,USDeDAI 中 USDe 數量增加,價格降低,GHO 數量減少,價格提高

(5)USDeUSDC.exchange

將 14, 886, 912.83 USDe 兌換成 14, 711, 447.94 USDC,USDeDAI 中 USDe 數量增加,價格降低,USDC 數量減少,價格提高

以上 exchange 後, 5 個資金池中的 USDe 價格降低。最終導致 sUSDe 價格大跌。

4. 不斷創建借貸頭寸,即向 LendingPool 合約中存入其他資產(WETH,WBTC 和 DAI),然後借貸 sUSDe。因爲 sUSDe 價格大跌,因此,借出的 sUSDe 數量比價格大跌前要多很多。

5. 與第 3 步類似,反向操作將 sUSDe 的價格拉高。

由於 sUSDe 被拉高,第 4 步借貸的頭寸價值超過抵押價值,達到了清算的標準。

6. 批量地對借貸頭寸進行清算,獲得清算獎勵 uWETH

7. 償還貸款,提取標的資產 WETH, WBTC,DAI 和 sUSDe。

8. 將 sUSDe 再次存入到 LendingPool 中,此時 sUSDe 價格被拉高,因此可以借貸出較多其他資產,包括 DAI 和 USDT。

9. 兌換代幣,償還閃電貸。最終獲利 1, 946.89 ETH

二、漏洞分析

通過以上分析,發現整個攻擊過程存在大量的閃電貸以及多次操縱 sUSDe 的價格,當抵押 sUSDe 時,會影響借出資產的數量;當借出 sUSDe 時,會影響借貸率,進而影響清算係數(健康因子)。

攻擊者利用這一點,通過閃電貸砸低 sUSDe 的價格,抵押其他資產,借出大量的 sUSDe,然後再擡高 sUSDe 的價格,清算抵押資產而獲利,並將剩餘的 sUSDe 抵押借出其他資產,最後償還閃電貸,攻擊完成。

從上面第 3 步發現,攻擊者通過控制 Curve Finance 的 USDe/rvUSD, USDe/AI, FRAX/SDe, GHO/SDe 和 USDe/SDC 這 5 個交易池中的 USDe 的價格來操縱 sUSDe 的價格的。價格讀取函數如下:

其中,sUSDe 價格由 11 個價格計算得到的,其中前 10 個由 CurveFinance 中讀取,最後一個又 Uniswap V3提供。

從 CurveFinance 中讀取的價格則是由 USDe/rvUSD, USDe/AI, FRAX/SDe, GHO/SDe 和 USD/SDC 這 5 個交易池提供,也是攻擊者在攻擊交易中操縱的 5 個交易池。

返回的價格由 uwuOracle 讀取的 price,CurveFinance 交易池合約中的 price_oracle( 0)和 get_p( 0)計算得到的。

(1)price 是有 Chainlink 提供的價格,是不可以操縱的;

(2)交易池參數

攻擊者通過操縱交易池的代幣數量來操縱 get_p( 0)的返回值,進而實現操縱價格。

三、安全建議

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

(1)針對操縱價格的漏洞,可以採用鏈下的價格預言機,這樣可以避免價格被操縱。

(2)項目上線前,需要由第三方專業的審計公司進行智能合約審計。

About Us

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

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

Twitter:https://twitter.com/sharkteamorg

Telegram:https://t.me/sharkteamorg

Discord:https://discord.gg/jGH9xXCjDZ