Il 10 giugno 2024, UwU Lend è stata attaccata e il progetto ha perso circa 19,3 milioni di dollari.

SharkTeam ha condotto immediatamente un'analisi tecnica di questo incidente e ha riassunto le precauzioni di sicurezza. Ci auguriamo che i progetti successivi possano imparare da questo e costruire congiuntamente una linea di difesa di sicurezza per l'industria blockchain.

1. Analisi delle transazioni di attacco

Attaccante: 0x841dDf093f5188989fA1524e7B893de64B421f47

L'aggressore ha lanciato un totale di 3 transazioni di attacco:

Transazione di attacco 1:

0x242a0fb4fde9de0dc2fd42e8db743cbc197ffa2bf6a036ba0bba303df296408b

Transazione di attacco 2:

0xb3f067618ce54bc26a960b660cfc28f9ea0315e2e9a1a855ede1508eb4017376

Transazione di attacco 3:

0xca1bbf3b320662c89232006f1ec6624b56242850f07e0f1dadbe4f69ba0d6ac3

Prendiamo la transazione di attacco 1 come esempio per l'analisi:

Contratto di attacco: 0x21c58d8f816578b1193aef4683e8c64405a4312e

Contratto target: contratto di tesoreria UwU Lend, comprendente:

USA:0xf1293141fc6ab23b2a0143acc196e3429e0b67a6

uDAI:0xb95bd0793bcc5524af358ffaae3e38c3903c7626

uUSDT:0x24959f75d7bda1884f1ec9861f644821ce233c7d

Il processo di attacco è il seguente:

1. Prestito flash di più token da diverse piattaforme, tra cui WETH, WBTC, sUSDe, USDe, DAI, FRAX, USDC, GHO

L'indirizzo di ricezione del token è 0x4fea76b66db8b548842349dc01c85278da3925da

I gettoni e le quantità dei prestiti lampo sono i seguenti:

Prestito Flash 159.053,16 WETH e 14.800 WBTC da Aave V3

Prestito flash 40.000 WETH da Aave V2

Prestito Flash 91.075,70 WETH e 4.979,79 WBTC da Spark

Prestito lampo da Morpho 301.738.880.01 sUSDe, 236.934.023.17 USDe e 100.786.052.15 DAI

Prestito flash 60.000.000 FRAX e 15.000.000 USDC da Uniswap V3: FRAX-USDC

Prestito Flash 4.627.557,47 GHO e 38.413,34 WETH da Balancer

Prestito flash 500.000.000 DAI da Maker

Un totale di circa 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 USD CC

2. Trasferisci il token prestito flash al contratto 0xf19d66e82ffe8e203b30df9e81359f8a201517ad (abbreviato in 0x f 19 d) per prepararti all'attacco.

3. Controlla il prezzo di sUSDe (abbassa il prezzo) scambiando token

(1)USDecrvUSD.exchange

Scambia 8.676.504.84 USDe in 8.730.453.49 crvUSD La quantità di USDe in USDecrvUSD aumenta e il prezzo diminuisce. La quantità di crvUSD diminuisce e il prezzo aumenta.

(2)USDeDAI.exchange

Scambia 46.452.158.05 USDe in 14.389.460.59 DAI La quantità di USDe in USDeDAI aumenta, il prezzo diminuisce, la quantità di DAI diminuisce e il prezzo aumenta.

(3)FRAXUSDe.exchange

Scambia 14.477.791.69 USDe in 46.309.490.86 FRAX, la quantità di USDe in USDeDAI aumenta, il prezzo diminuisce, la quantità di FRAX diminuisce e il prezzo aumenta

(4)GHOUSDe.exchange

Converti 4.925.427,20 USDe in 4.825.479,07 GHO, la quantità di USDe in USDeDAI aumenta, il prezzo diminuisce, la quantità di GHO diminuisce e il prezzo aumenta

(5)USDeUSDC.scambio

Converti 14.886.912.83 USDe in 14.711.447.94 USDC, la quantità di USDe in USDeDAI aumenta, il prezzo diminuisce, la quantità di USDC diminuisce e il prezzo aumenta

Dopo lo scambio di cui sopra, il prezzo di USDe nei 5 pool di fondi è diminuito. Alla fine, il prezzo degli sUSDe è crollato.

4. Creare continuamente posizioni di prestito, ovvero depositare altri asset (WETH, WBTC e DAI) nel contratto LendingPool e quindi prendere in prestito sUSDe. Poiché il prezzo degli sUSD è crollato, la quantità di sUSD prestata è stata molto maggiore rispetto a prima del crollo del prezzo.

5. Analogamente al passaggio 3, l’operazione inversa aumenterà il prezzo di sUSDe.

Quando la sUSDe viene aumentata, il valore della posizione presa in prestito nella fase 4 supera il valore della garanzia e raggiunge lo standard per la liquidazione.

6. Liquidare le posizioni di prestito in lotti e ottenere premi di liquidazione uWETH

7. Rimborsare il prestito e ritirare le attività sottostanti WETH, WBTC, DAI e sUSDe.

8. Deposita nuovamente sUSDe nel LendingPool. In questo momento, il prezzo di sUSDe viene aumentato, quindi è possibile prestare più altri asset, inclusi DAI e USDT.

9. Scambia token e rimborsa il prestito flash. Utile finale 1.946,89 ETH

2. Analisi delle vulnerabilità

Dall'analisi di cui sopra, si è scoperto che ci sono un gran numero di prestiti flash e molteplici manipolazioni del prezzo di sUSDe nell'intero processo di attacco. Quando sUSDe viene ipotecato, ciò influenzerà l'importo dei beni prestati quando sUSDe viene prestato; influenzerà il tasso di prestito e quindi il coefficiente di liquidazione (fattori sanitari).

Gli aggressori ne approfittano per abbassare il prezzo di sUSDe attraverso prestiti flash, ipotecare altri asset, prestare una grande quantità di sUSDe, quindi aumentare il prezzo di sUSDe, liquidare gli asset ipotecari per realizzare un profitto e ipotecare le restanti sUSDe per prestare altri beni, infine rimborsare il prestito lampo e l'attacco è completato.

Dal passaggio 3 sopra, abbiamo scoperto che l'aggressore ha manipolato il prezzo di sUSDe controllando il prezzo di USDe nei cinque pool di trading di Curve Finance: USDe/rvUSD, USDe/AI, FRAX/SDe, GHO/SDe e USDe/SDC. La funzione di lettura del prezzo è la seguente:

Tra questi, il prezzo sUSDe è calcolato da 11 prezzi, i primi 10 dei quali vengono letti da CurveFinance e l'ultimo è fornito da Uniswap V3.

Il prezzo letto da CurveFinance è fornito dai 5 pool di trading USDe/rvUSD, USDe/AI, FRAX/SDe, GHO/SDe e USD/SDC, che sono anche i 5 pool di trading manipolati dall'aggressore nella transazione di attacco.

Il prezzo restituito viene calcolato dal prezzo letto da uwuOracle, price_oracle(0) e get_p(0) nel contratto del pool di trading CurveFinance.

(1) il prezzo è il prezzo fornito da Chainlink e non può essere manipolato;

(2) Parametri del pool di negoziazione

L'aggressore manipola il valore restituito di get_p(0) manipolando il numero di token nel pool di scambio, manipolando così il prezzo.

3. Suggerimenti per la sicurezza

In risposta a questo attacco, è necessario seguire le seguenti precauzioni durante il processo di sviluppo:

(1) Per affrontare la vulnerabilità della manipolazione dei prezzi, è possibile utilizzare un oracolo dei prezzi fuori catena per evitare la manipolazione dei prezzi.

(2) Prima che il progetto vada online, è necessario che una società di revisione professionale di terze parti conduca un audit del contratto intelligente.

Chi siamo

La visione di SharkTeam è proteggere il mondo Web3. Il team è composto da professionisti esperti della sicurezza e ricercatori senior provenienti da tutto il mondo, esperti nella teoria alla base della blockchain e dei contratti intelligenti. Fornisce servizi tra cui l'identificazione e il blocco dei rischi, l'audit dei contratti intelligenti, KYT/AML, l'analisi sulla catena e altri servizi e ha creato una piattaforma intelligente di identificazione e blocco dei rischi sulla catena ChainAegis, che può combattere efficacemente l'Advanced Persistent Threat (Advanced Minaccia Persistente) nel mondo Web3, APT). Ha stabilito rapporti di cooperazione a lungo termine con attori chiave in vari campi dell'ecosistema Web3, come Polkadot, Moonbeam, polygon, Sui, OKX, imToken, Collab.Land, TinTinLand, ecc.

Sito ufficiale: https://www.sharkteam.org

Twitter: https://twitter.com/sharkteamorg

Telegramma: https://t.me/sharkteamorg

Discordia: https://discord.gg/jGH9xXCjDZ