mercoledì 3 agosto 2022

Il Nomad Bridge è Stato Hackerato: Attacco Eseguito ed Arbitraggio Su EVMos

Due giorni fa è stato hackerato Nomad bridge e tutta la liquidità prosciugata. Chainalysis ha stimato che quest'anno 2 miliardi di dollari in criptovaluta siano stati rubati da bridge cross-chain attraverso 13 hack (il 69% del totale di fondi rubati). I bridge cross chain sono nati per risolvere il problema dell'interoperabilità tra blockchain diverse. Un bridge cross-chain è un protocollo che consente a un utente di trasferire le risorse da una blockchain all'altra. Tra gli esempi più noti il Wormhole che collega il mondo Solana con quello EVM (ed anche con la blockchain di Terra). In genere gli utenti interagiscono con i bridge cross-chain inviando fondi sul bridge, dove tali fondi vengono quindi bloccati nel contratto. All'utente vengono quindi emessi token equivalenti di un asset (ricordo le versioni dell'ormai defunto Ust, tipo wUst). Nel caso di Wormhole, gli utenti in genere inviano Ether (Eth) al protocollo, dove è detenuto come garanzia, e vengono emessi wEth su Solana, supportati da quella garanzia bloccata nel contratto Wormhole. I bridge sono un obiettivo interessante perché spesso dispongono di un punto di archiviazione centrale dei fondi che supporta gli asset "bridged" sulla blockchain ricevente. Indipendentemente da come vengono archiviati quei fondi, bloccati in uno smart contract o su un qualcosa di centralizzato, quel punto diventa un obiettivo. 


L'ATTACCO A NOMAD BRIDGE
Si tratta di un bridge cross chain molto importante noto soprattutto perchè permette di trasferire liquidità dal mondo Ethereum ad Evmos (quindi ecosistema Cosmos). Sono stati rubati 190 milioni di dollari in un attacco combinato con un centinaio di utenti (erano rimasti solo 1800 dollari circa). Durante l'attacco al Wormhole erano stati rubati 325 milioni di dollari. Quando il bug di Nomad si è diffuso sul Web e Telegram, pare che sia stato un copia/incolla della transazione originaria quindi dell'attacco (andava modificato solo il proprio indirizzo) ad aver permesso agli utenti successivi di portare a compimento ulteriori attacchi. Inizialmente sono stati prosciugati wBtc e successivamente wEth:
Lo smart contract permetteva di prelevare i fondi, senza aver prima bridgiato quindi senza "garanzia" (cioè senza depositare nulla). Nella foto di sotto vediamo ben 10.000 Eth che sono stati rubati in un'unica transazione (16 milioni di dollari):
Effettivamente l'audit di Nomad aveva già evidenziato questa vulnerabilità, in quanto la funzione `process()`, che si trova nell'attuale contratto di implementazione in 0xB92336759618F55bd0F8313bd843604592E27bd8, controlla che i messaggi contengano una radice merkle accettabile. Questo ha lo scopo di impedire agli utenti di trasmettere dati arbitrari. 
Per un errore, il team ha accidentalmente contrassegnato la radice zero (0x00) come radice accettabile quando ha utilizzato la funzione `initialize()` 41 giorni fa, tx hash 0x53fd92771d2084a9bf39a6477015ef53b7f116c79d98a21be723d06d79024cad
Ciò significa che ogni messaggio viene verificato automaticamente per impostazione predefinita, il che è l'opposto di ciò che si dovrebbe fare per annullare una radice merkle. Questa funzione ha portato a dimostrare la validità di ogni messaggio per impostazione predefinita.
Il risultato è che su Moonbeam, la versione Usdc di Nomad ha perso il peg. L'altro layer1 dove sono avvenuti problemi è stato EVMos in quanto il token nativo presentava enormi opportunità di arbitraggio perchè gli utenti si sono catapultati a vendere tutti i madUsdc per EVMos (gran parte degli Usdc nativi bloccati nel contract su Nomad sono stati rubati). Ieri EVMos presentava un prezzo di circa 1.50 dollari su Osmosis (che utilizza un'altra versione bridgiata di Usdc, ovvero Axelar) ed un prezzo di 5.60 dollari su altri dex di EVMos che usavano la versione bridgiata di Nomad (madUsdc) ad esempio EvmoSwap e Diffusion Finance. Oggi addirittura EVMos viene riportato con un valore di quasi 10 dollari:
Chiaramente è possibile comprare EVMos su Osmosis (mediante Keplr) e poi trasferire questi fondi su un indirizzo EVM (Metamask) mediante IBC. Effettivamente 1 EVMos presente su Osmosis 1.55 dollari verrebbe venduto a quasi 10 madUsdc. Il problema però è la liquidità in uscita da Diffusion (e su tutti i dex che utilizzano questa versione wrapped) e quindi che non ci sono più Usdc (garanzia) su Nomad bridge quindi se qualcuno non rimborsa il bridge (come venne fatto per Wormhole) è un'operazione di arbitraggio che non ha senso. Anzi, espone a rischi elevatissimi se il prezzo di EVMos continuasse a salire (perchè bisognerebbe vendere i madUsdc in cambio di EVMos, in perdita). Chiaramente se il prezzo di EVMos su Diffusion o EvmoSwap scendesse, sarebbe possibile scambiare i madUsdc acquistati per EVMos (e riportare quest'ultimi su Osmosis, vendendoli).

V.Buterin, founder di Ethereum, è da sempre scettico all'utilizzo di bridge cross chain: "I limiti di sicurezza fondamentali dei bridge sono in realtà un motivo chiave per cui, mentre sono ottimista su un ecosistema blockchain multi-catena, sono pessimista riguardo alle applicazioni cross-chain.
Per capire perché i bridge hanno queste limitazioni, dobbiamo guardare come varie combinazioni di blockchain e bridging sopravvivono agli attacchi del 51%. Molte persone hanno la mentalità che "se una blockchain viene attaccata al 51%, tutto viene distrutto, e quindi dobbiamo impedire con tutte le nostre forze che un attacco del 51% si verifichi anche una sola volta". Non sono d'accordo con questo stile di pensiero; infatti, le blockchain mantengono molte delle loro garanzie anche dopo un attacco del 51%, ed è davvero importante preservare queste garanzie.
Ad esempio, supponiamo di avere 100 Eth su Ethereum e che Ethereum venga attaccato al 51%, quindi alcune transazioni vengono oscurate e/o ripristinate. Qualunque cosa accada, hai ancora i tuoi 100 Eth. Anche un attacco al 51% non può proporre un blocco che tolga il tuo Eth, perché un blocco del genere violerebbe le regole del protocollo e quindi verrebbe rifiutato dalla rete. Anche se il 99% dell'hashpower vuole portare via il tuo Eth, tutti coloro che eseguono un nodo seguirebbero semplicemente la catena con il restante 1%, perché solo i suoi blocchi seguono le regole del protocollo. Più in generale, se hai un'applicazione su Ethereum, un attacco del 51% potrebbe bloccarla per un po' di tempo, ma quello che esce alla fine è uno stato coerente. Se avevi 100 Eth, ma lo vendevi per 320000 Dai su Uniswap, anche se la blockchain viene attaccata in un modo arbitrario e folle, alla fine della giornata hai comunque un risultato ragionevole: o mantieni i tuoi 100 Eth o ottieni i tuoi 320000 Dai. Il risultato in cui non ottieni nessuno dei due (o, del resto, entrambi ) viola le regole del protocollo e quindi non verrebbe accettato.
Ora, immaginando cosa succede se sposti 100 Eth su un ponte su Solana per ottenere 100 wEth (formato Solana), e poi Ethereum viene attaccato al 51%. L'attaccante ha depositato un mucchio dei propri Eth su Solana e poi ha ripristinato quella transazione su Ethereum non appena il tutto è stato confermato su Solana. Il contratto Solana-wEth ora non è più completamente garantito e forse i tuoi 100 Solana-wEth ora valgono solo 60 Eth. Anche se esiste un bridge perfetto basato su ZK-SNARK che convalida completamente il consenso, è comunque vulnerabile al furto attraverso attacchi di questo tipo. Per questo motivo, è sempre più sicuro detenere asset nativi di Ethereum su Ethereum o asset nativi di Solana su Solana piuttosto che detenere asset nativi di Ethereum su Solana o asset nativi di Solana su Ethereum. E in questo contesto, "Ethereum" si riferisce non solo alla catena di base, ma anche a qualsiasi vero L2 che è costruito su di essa. Se Ethereum viene attaccato al 51% e viene ripristinato, anche Arbitrum e Optimism vengono ripristinati, quindi le applicazioni "cross-rollup" che mantengono lo stato su Arbitrum e Optimism sono garantite per rimanere coerenti anche se Ethereum viene attaccato al 51%. E se Ethereum non viene attaccato al 51%, non c'è modo di attaccare il 51% di Arbitrum e Optimism separatamente. Quindi, detenere asset emessi su Optimism o su Arbitrum è ancora perfettamente sicuro. Il problema peggiora quando si superano le due catene. Se ci sono 100 catene, allora ci saranno dapp con molte interdipendenze tra quelle catene e il 51% che attacca anche una catena creerebbe un contagio sistemico che minaccia l'economia dell'intero ecosistema. Questo è il motivo per cui penso che è probabile che le zone di interdipendenza si allineino strettamente alle zone di sovranità (quindi, molte applicazioni dell'universo Ethereum si interfacciano strettamente tra loro, molte applicazioni dell'universo Avax si interfacciano tra loro, eth ma NON Ethereum-universo e applicazioni Avax-universo che si interfacciano strettamente tra loro).
Questo, per inciso, è anche il motivo per cui un rollup non può semplicemente "usare un altro livello di dati". Se un rollup memorizza i suoi dati su Celestia o BCH o qualsiasi altra cosa ma si occupa di risorse su Ethereum, se quel livello viene attaccato al 51% sei fregato. Il DAS su Celestia che fornisce il 51% di resistenza agli attacchi in realtà non ti aiuta perché la rete Ethereum non sta leggendo quel DAS; sarebbe la lettura di un bridge, che sarebbe vulnerabile agli attacchi del 51%. Per essere un rollup che fornisce sicurezza alle applicazioni che utilizzano risorse native di Ethereum, devi utilizzare il livello di dati di Ethereum (e allo stesso modo per qualsiasi altro ecosistema).
Non mi aspetto che questi problemi si manifestino immediatamente. Attaccare al 51% anche una sola chain è difficile e costoso. Tuttavia, maggiore è l'utilizzo di bridge e app cross chain, peggiore diventa il problema. Nessuno attaccherà al 51% Ethereum solo per rubare 100 Solana-wEth (o, del resto, nessuno attaccherà Solana solo per rubare 100 Ethereum-WSol). Ma se ci sono 10 milioni di Eth o Sol nel bridge, la motivazione per effettuare un attacco diventa molto più alta e grandi pool potrebbero ben coordinarsi per far sì che l'attacco avvenga. Quindi l'attività cross-chain ha un effetto anti-rete: più ha successo, più aumentano i rischi"

Nessun commento:

Posta un commento