domenica 6 agosto 2023

L'Attacco A Curve Finance: Reentrant Lock e Contromisure Adottate

Curve Finance ha avuto diversi problemi negli ultimi giorni. Il peggio sembra essere passato perchè l'hacker ha iniziato a restituire i fondi rubati (a causa di una taglia) però vediamo quello che è successo, anche per comprendere meglio i rischi della DeFi.
Il 30 Luglio 2023, un hacker ha sfruttato la vulnerabilità di alcuni pool di Curve, programmati nel linguaggio di programmazione Vyper tramite un meccanismo di reentrancy lock. Sostanzialmente un reentrant lock è un meccanismo di esclusione reciproca che consente ai thread di rientrare in un blocco di una risorsa (più volte) senza una situazione di deadlock. 
Attraverso questa debolezza, l’hacker ha potuto drenare una parte dei 69M$ da diversi pool di Curve:

CRV/ETH (circa 30M)
alETH/ETH (20.5M$)
pETH/ETH (11.5M$)
msETH/ETH (1.6M$ tramite un frontrun attack attraverso un MEV Bot di un secondo attaccante ma poi i soldi sono stati restituiti)

Oltre a far perdere il peg a numerose versioni liquide di ETH, ciò ha anche ridotto di molto la liquidità del primo pool in assoluto del token CRV (CRV/ETH). Ovviamente, questo drenaggio di liquidità, oltre a creare problemi ai liquidity provider e alle DAO che hanno fornito asset a questi pool, ha anche ridotto di molto la liquidabilità dell’asset Curve. L'exploit ha coinvolto progetti come l'exchange decentralizzato Ellipsis, le piattaforme di lending Alchemix e JPEG'd e il synthetic protocol Metronome, che hanno visto sottrarsi milioni di dollari di asset dai liquidity pool. Oltre a Curve, naturalmente. Il codice che ha parzialmente risolto la vulnerabilità è il seguente:
Il codice ora assegnerà correttamente un singolo storage_slotla la prima volta che identifica una chiave di rientro duplicata. Tuttavia, non richiamerà la set_reentrancy_key_positionfunzione su ciascuna type_con lo stesso offset, il che significa che qualsiasi @nonreentrant(<key>) oltre la prima avrebbe un offset di archiviazione "non definito" da utilizzare.



SCARSA LIQUIDITA' ON CHAIN
La scarsa liquidità on chain per grossi acquisti comporta il non poter vendere/comprare l'asset ed altissimo slippage ("price impact is too high").
Ipotizziamo che il pool CRV/ETH aveva al suo interno 30M$ (15M CRV e 15M ETH). In condizioni normali se tu vuoi acquistare 5M di CRV puoi farlo. Dopo lo scambio, il pool ospiterebbe 10M$ di CRV e 20M$ di ETH.
Se un pool viene drenato invece, la scarsa liquidità rende difficoltosi/impossibili gli scambi.
A questo punto, chi volesse scambiare questi due asset fra di loro dovrebbe utilizzare delle size più piccole, oppure optare per un altro pool. Il secondo pool più grande in termini di TVL è quello creato su Uniswap, ossia CRV/ETH 0.3% (2.2M$). Questa assenza di liquidità nei principali pool che consentono lo scambio di CRV crea un grosso problema per il token CRV. Esso è diventato un asset molto illiquido on-chain e che quindi non può essere acquistato o venduto in grosse quantità.
Dopo l’exploit e il drenaggio di liquidità da parte dell’hacker, molte persone hanno avuto paura che questo potesse accadere anche in altri pool di Curve, andando così a prelevare gran parte della liquidità sul protocollo. Il TVL complessivo ha perso il 50% della liquidità complessiva. Tutto ciò si è poi propagato in maniera simile anche sui vari booster di Curve, ossia Convex, Yearn Finance, StakeDAO.


CROLLO DI CRV 
Tutta questa sfiducia ha portato di conseguenza i token dei vari protocolli, soprattutto $CRV, ad avere massive vendite a mercato. Questo ha fatto crollare il prezzo da un valore iniziale di 0,70$ a meno di 0,50$, una contrazione di circa il 35%.
Un altro problema da considerare è che la gran parte degli AMM hanno un programma di liquidity mining per chiunque decida di fornire liquidità alla piattaforma.
Curve decide ogni due settimane di emettere 100.000 CRV a mercato e di destinarli verso diversi pool della propria piattaforma. Ovviamente, chi riceve più token avrà maggiori incentivi e così aumenterà la possibilità di attrarre più TVL nei pool, che porterà inevitabilmente a maggiori trade a causa di una ridotta presenza di slippage.
Questo è ciò che da il via al meccanismo del bribing, mediante veCRV che permette di decidere a quale pool destinare maggiore quantità di token per le prossime due settimane. Questo ti fa capire come il prezzo di CRV sia molto importante perchè fornendo le solite reward in termini quantitativi, i  liquidity provider verranno pagati molto meno (perchè CRV vale meno).


PRESTITO DI MICHAEL EGOROV (CURVE CEO)
A complicare tutta questa vicenda c’è l'enorme debito del CEO di Curve, Michael Egorov, che possiede una grandissima quantità di CRV. Non potendoli dumpare a mercato, egli ha deciso qualche anno fa di collateralizzarli sui principali protocolli di lending:

AAVE (55M$ di debito)
Fraxlend(10M$ di debito)
Abracadabra(12M$ di debito)
Inverse Finance (7M$ di debito)

Totale: circa 85M$ di debito in stablecoin. Se il prezzo di CRV dovesse raggiungere un livello che va da 0,4$ a 0,37$, porterebbe gran parte delle sue posizioni a essere vendute a mercato, innescando la sua liquidazione. In generale il collaterale CRV sarebbe venduto a mercato per ripagare il debito mantenendo la piattaforma solvente.
Le varie piattaforme di lending ne beneficerebbero guadagnando una parte della sua perdita.
Tuttavia la liquidità del pool maggiormente utilizzato da questi protocolli per liquidare, e quindi convertire CRV in ETH o in asset stabili, è stato drenato. Ciò rende CRV un token illiquido; di conseguenza, se ci fosse un grosso dump del token, queste piattaforme non avrebbero una controparte per ripagare il debito trovandosi a dover creare del bad debt.
Il fatto che Aave o altre piattaforme di lending possano dare la possibilità ai propri utenti di collateralizzare delle grosse posizioni tramite asset che possono diventare illiquidi è un problema. Ciò potrebbe portare il debito a non essere ripagato, obbligando la piattaforma stessa a utilizzare parte della propria treasury/fondo d’emergenza.
In assenza di questo fondo, invece, la piattaforma dovrà farsi carico di questo bad debt e quindi gli utenti perderebbero parte della liquidità depositata.


COME AGISCONO LE PIATTAFORME DI LENDING COINVOLTE
I vari protocolli di lending coinvolti hanno preso delle precauzioni per forzare Michael Egorov a ripagare il debito. Piattaforme come Fraxlend si tutelano da questi casi utilizzando un metodo di aumento del tasso d’interesse chiamato "Time-Weighted Variable Interest Rate". Essenzialmente, questo meccanismo raddoppia l’interesse sul debito preso in prestito ogni 12 ore se il market’s utilization rate rimane del 100%.
Questa strategia è stata adottata perchè a causa della sfiducia di questa posizione e per via dell’illiquidità del token CRV, non molte persone depositeranno liquidità su Fraxlend. In questo modo Michael Egorov dovrà ripagare il proprio debito, altrimenti l’interesse raddoppierà ogni giorno finché arriverà quasi a superare il controvalore del collaterale, innescando comunque la liquidazione.
Piattaforme come Abracadabra invece non hanno questo meccanismo di aumento esponenziale del tasso d’interesse.  Inverse Finance, a differenza delle piattaforme di lending viste in precedenza, adotta il tasso fisso. Sembra quindi che stia optando per una soluzione che comprende il deposito di altro collaterale da parte dell’entità che ha preso il prestito. In questo modo si può aumentare il periodo di ripagamento del debito, mantenendo il solito tasso d’interesse.
In tutto ciò, AAVE sta pensando a una serie di proposal che possano forzare Michael Egorov a ripagare il debito. 


COME SI E' COMPORTATO IL DEBITORE EGOROV
La prima cosa che ha fatto Michael, in quanto CEO di Curve, è stata quella di creare un pool sul protocollo da lui ideato, composto dalla stablecoin crvUSD e CRV/FRAX LP. Il tutto è stato incentivato con 100k di CRV come reward. 
L’obiettivo della creazione di questo pool è quello di incentivare il raccoglimento di liquidità verso Fraxlend. In questo modo si abbasserebbe il tasso di utilizzo della posizione di debito della piattaforma di lending. Dopo poche ore dal lancio, il pool si è riempito di circa 2 milioni di dollari, riducendo di fatto il tasso di utilizzo della posizione su FRAX all’89% e non consentendo al tasso di interesse di raddoppiare ogni 12 ore. L’altra mossa fatta da Michael è stata quella di vendere CRV tramite sell OTC (over-the-counter), ossia tramite accordi presi off-chain. Così facendo non si muove verso il basso il prezzo di CRV. Al momento si contano decine di investitori e il numero di CRV venduti ammonta a 59.5M, tra cui Justin Sun, la treasure di Yearn Finance, Wintermute, Cream Finance, DWF Labs.
Non sono chiare invece le dinamiche o i vincoli che obbligano gli acquirenti a detenere i token CRV per un certo periodo di tempo. Secondo i rumors emersi, l’obbligo è di mantenere i token CRV per almeno 6 mesi, o finché il prezzo non raddoppi rispetto a quello di acquisto, arrivando quindi a 0,8$. 
Con parte dei capitali raccolti, sembra che Egorov stia ripagando le varie piattaforme di lending, partendo da Aave con un "repay" di circa 3M$.
Oltre a questo, pare che ci sia anche una proposal da parte di uno dei primi investitori di Aave di acquistare un parte di CRV. In questo modo si eviterebbe il cigno nero e nel contempo Aave aumenterebbe il potere della DAO nei confronti di Curve.
Qui trovi l'address di Egorov: Etherscan (Michael Egorov)


RESTITUZIONE DI FONDI
Uno degli hacker ha iniziato a restituire i fondi rubati, circa 5500 ETH. In cambio l'hacker ha ricevuto una taglia di 610 ETH (il 10% del totale rubato). Le conferme arrivano da JPEG'd un protocollo di lending che ha perso 11,6 milioni di dollari da questo attacco.
Il team ha dichiarato che i fondi sono stati restituiti all'indirizzo del wallet JPEG'd che fa da treasury.

"Qualsiasi ulteriore indagine o questione legale contro l'entità terminerà. Consideriamo questo avvenimento come un soccorso da parte di un white-hat", ha dichiarato il team di JPEG'd.

Il 3 agosto Curve, Metronome e Alchemix avevano annunciato congiuntamente un'iniziativa per recuperare i fondi rubati, offrendo agli hacker una taglia del 10% e nessuna azione legale se avessero restituito il restante 90% dei fondi. 
In meno di 24 ore, l'hacker ha apparentemente accettato l'accordo e ha gradualmente iniziato a restituire i fondi rubati ai vari progetti.
Oltre a JPEG'd, gli hacker hanno restituito 4.820,55 Alchemix ETH (alETH) al team Alchemix Finance ed alcuni ETH al team Curve Finance.

Nessun commento:

Posta un commento