來源:SharkTeam
2024年6月10日,UwU Lend遭受攻擊,項目方損失約1930萬美元。
攻擊者: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
閃電貸的代幣和數量如下:
從AaveV3中閃電貸159,053.16 WETH和14,800 WBTC
從AaveV2中閃電貸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(簡記爲0xf19d)中,爲發起攻擊做准備。
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中讀取,最後一個又UniswapV3提供。
從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)項目上线前,需要由第三方專業的審計公司進行智能合約審計。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
標題:SharkTeam:UwU Lend攻擊事件分析
地址:https://www.torrentbusiness.com/article/110903.html