[ad_1]
Questo post del blog rivela una minaccia contro la rete Ethereum che era presente dalla fusione fino all’hard fork di Dencun.
Sfondo
Prima della fusione, venivano impostati limiti diversi per la dimensione dei messaggi per la comunicazione RPC per proteggere i client dagli attacchi Denial of Service (DOS). Questi limiti, applicati ai messaggi ricevuti tramite endpoint HTTP, sono stati trasferiti all’API del motore, che svolge un ruolo cruciale nel connettere i client Execution e Consensus Layer durante la produzione dei blocchi. Grazie al coinvolgimento dell’API del motore nella produzione dei blocchi, è diventato possibile produrre blocchi che superavano i limiti di dimensione RPC di alcuni client ma rimanevano entro l’intervallo accettabile per altri.
Se un utente malintenzionato crea un messaggio che supera il limite di dimensione del client con l’impostazione più bassa, rispettando comunque i requisiti del limite di gas, e quindi attende la produzione di un blocco, potrebbe verificarsi una situazione in cui alcuni client considerano il blocco come valido, mentre altri lo rifiutano, emettendo un codice di errore HTTP “413: Contenuto troppo grande”.
Impatto
Un utente malintenzionato in grado di creare questi messaggi sarebbe in grado di forzare la maggior parte dei nodi (=geth) a rifiutare i blocchi che una minoranza accetterebbe. Questi blocchi verrebbero biforcati e il proponente perderebbe i premi.
All’inizio pensavamo che fosse possibile creare questi blocchi solo utilizzando builder o una versione modificata di un client. Geth ha un limite integrato di 128KB per le transazioni, il che significa che una grande transazione come quella in discussione non finirebbe nei pool di transazioni di nessun nodo geth. Era tuttavia possibile attivare comunque il limite facendo sì che un client con un limite più elevato proponesse il blocco e il CL richiedesse la convalida di questo blocco più grande proposto.
Abbiamo proposto una soluzione abbassando temporaneamente il limite RPC su tutti i client al valore più basso (5 MB). Ciò renderebbe il blocco non valido e un utente malintenzionato sarebbe molto limitato nel caos che potrebbe causare nella rete poiché la maggior parte dei nodi rifiuterebbe i propri blocchi.
Tuttavia il 7 febbraio abbiamo scoperto che era possibile creare un blocco che raggiungesse il limite di 5 MB con un gruppo di transazioni inferiori al limite di 128 KB e non superiori a 30 milioni di gas.
Questo è un problema più grande perché ci siamo resi conto che un utente malintenzionato potrebbe creare una serie di transazioni ad alto pagamento e inviarle alla rete. Dal momento che paga tutti gli altri nel mempool, ogni nodo (anche i nodi geth) includerebbe le transazioni di attacco nel proprio blocco creando così un blocco che non sarebbe accettato dalla maggior parte della rete, risultando in molti fork (tutti considerati valido dai nodi minoritari) e la catena continua a riorganizzarsi ancora e ancora.
Più tardi, il 7 febbraio, siamo giunti alla conclusione che chiunque alzasse i propri limiti RPC sarebbe stata l’alternativa più sicura.
Sequenza temporale
- 2024-02-06 13:00: Toni (EF), Pari (EF) e Justin (Besu) tentano di inviare alla rete una transazione appositamente macinata. La transazione contribuisce a blocchi fino a 2,7 MB se compressa in modo rapido.
- 06/02/2024 13:25: Pari riceve errori dal suo nodo Geth locale anche se la transazione dovrebbe essere valida.
- 06/02/2024 15:14: Justin è riuscito a bloccare la transazione e a inviarla tramite il client Besu.
- 06-02-2024 20:46: Sam (EF) allerta Pari (un ringraziamento speciale a mysticryuujin su X), Toni e Alex riguardo ad alcuni nodi Sepolia in difficoltà.
- 2024-02-06 21:05: Il team ricontrolla con Marius di Geth e conferma il bug.
- 2024-02-06 21:10: Il gruppo si riunisce per eseguire il debug
- 2024-02-07 23:40: Abbiamo deciso che tutti i client limitino il limite delle richieste RPC a 5 MB
- 07/02/2024 6:40: Abbiamo scoperto che potrebbe esserci un problema più grande e che l’attacco può essere eseguito con transazioni di dimensioni inferiori a 128 KB.
- 2024-02-07 10:00: Abbiamo deciso di aumentare il limite di richieste RPC per tutti i client.
- 2024-02-07 21:00: La correzione è stata integrata in geth.
- 09-02-2024: Geth è stato rilasciato
Sebbene Geth sia stato l’unico client interessato da questo bug, anche altri client hanno aggiornato le loro impostazioni predefinite per essere al sicuro da questo attacco anche se i limiti di gas sono aumentati. I team del cliente hanno indicato che i seguenti aggiornamenti hanno limiti rpc sicuri:
Geth: v1.13.12
Mente Infernale: v1.25.4
Credere: 24.1.2
Erigon: v2.58.0
Reth: v0.1.0-alpha.18
[ad_2]
Source link