A fronte del successo del Merge di Ethereum, che ha visto la transizione della blockchain da protocollo di consenso PoW a PoS, un gruppo di miner ha deciso di mantenere attiva la chain PoW tramite un hard fork.
ETHW, la chain proof-of-work (PoW) nata a seguito del Merge, durante il fine settimana si è movimentare per sedare le dicerie secondo cui avrebbe subito un attacco replay on-chain.
BlockSec, società di revisione di smart contract, ha segnalato ciò che descrive come un attacco replay avvenuto il 16 settembre, in cui gli aggressori avrebbero trafugato i token ETHW riproducendo i calldata della chain proof-of-stake (PoS) di Ethereum sulla chain PoW forkata.
Secondo BlockSec, l'exploit sarebbe stato causato dal fatto che il bridge Omni cross-chain sulla chain ETHW stesse utilizzando un vecchio chainID, non verificando quello corretto del messaggio cross-chain.
Le reti Mainnet e le testnet di Ethereum utilizzano due identificatori per usi diversi, ovvero un ID di rete e un ID della chain (chainID). I messaggi peer-to-peer tra nodi utilizzano l'ID di rete, mentre le firme delle transazioni utilizzano il chainID. L'EIP-155 ha introdotto il chainID come strumento per prevenire gli attacchi replay tra le blockchain di ETH ed Ethereum Classic (ETC).
1/ Attenzione | BlockSec ha rilevato che gli sfruttatori stanno riproducendo il messaggio (calldata) della chain PoS su @EthereumPow. La causa principale è che il bridge non verifica correttamente il chainid effettivo (che viene mantenuto da sé) del messaggio cross-chain.
1/ Alert | BlockSec detected that exploiters are replaying the message (calldata) of the PoS chain on @EthereumPow. The root cause of the exploitation is that the bridge doesn't correctly verify the actual chainid (which is maintained by itself) of the cross-chain message.
— BlockSec (@BlockSecTeam) September 18, 2022
BlockSec è stato il primo servizio di analisi a segnalare l'attacco replay ed a notificarlo a ETHW, che a sua volta ha rapidamente respinto le affermazioni iniziali secondo cui era stato effettuato un attacco replay on-chain. ETHW ha tentato di notificare a Omni Bridge l'exploit a livello di contratto:
Ieri ho provato in tutti i modi a contattare Omni Bridge.
I bridge devono verificare correttamente il ChainID effettivo dei messaggi cross-chain.
Anche in questo caso non si tratta di un replay di transazioni a livello della chain, ma di un calldata replay causato da un difetto del contratto specifico.
Had tried every way to contact Omni Bridge yesterday.
— EthereumPoW (ETHW) Official #ETHW #ETHPoW (@EthereumPoW) September 18, 2022
Bridges need to correctly verify the actual ChainID of the cross-chain messages.
Again this is not a transaction replay on the chain level, it is a calldata replay due to the flaw of the specific contract. https://t.co/bHbYR4b2AW pic.twitter.com/NZDn61cslJ
L'analisi dell'attacco ha rivelato che l'exploiter ha inizialmente trasferito 200 WETH attraverso il bridge Omni della chain Gnosis, per poi riprodurre lo stesso messaggio sulla chain PoW, ottenendo altri 200ETHW. In questo modo, il saldo del contratto della chain distribuito sulla chain PoW è stato prosciugato.
L'analisi di BlockSec del codice sorgente del bridge Omni ha mostrato che la logica per la verifica del chainID era presente, ma il chainID verificato utilizzato nel contratto veniva estratto da un valore memorizzato nello storage, denominato unitStorage.
Il team ha illustrato che non si trattava del chainID corretto ottenuto tramite l'opcode CHAINID proposto da EIP-1344, e peggiorato dal conseguente fork a seguito del Merge di Ethereum:
"Questo è probabilmente dovuto al fatto che il codice è piuttosto vecchio (utilizza Solidity 0.4.24). Il codice ha sempre funzionato bene fino al fork della chain PoW".
Ciò ha permesso agli attaccanti di trafugare ETHW e potenzialmente altri token presenti sul bridge della chain PoW e di scambiarli sui marketplace che quotano i token in questione. Cointelegraph ha contattato BlockSec per accertare il valore derubato durante l'exploit.