Dieser Blog -Beitrag enthält eine Bedrohung gegen das Ethereum -Netzwerk, das von der Zusammenführung bis zur Hardgabel von Dencun vorhanden war.
Hintergrund
Vor der Zusammenführung wurden unterschiedliche Größengrößen für die RPC-Kommunikation eingestellt, um Kunden vor Denial-of-Service-Angriffen (Denial-of-Service) zu schützen. Diese Grenzen, die auf Nachrichten angewendet wurden, die über HTTP -Endpunkte empfangen wurden, wurden auf die Engine -API übertragen, die eine entscheidende Rolle bei der Verbindung von Ausführungs- und Konsensschicht -Clients während der Blockproduktion spielt. Aufgrund der Beteiligung der Engine -API an der Blockproduktion wurde es möglich, dass Blöcke hergestellt werden, die die RPC -Größengrenzen einiger Kunden übertreffen, aber für andere im akzeptablen Bereich blieben.
Wenn ein Angreifer eine Nachricht erstellt, die die Größengrenze des Kunden mit der niedrigsten Einstellung überschreitet, während sie die Gasgrenzeanforderungen festhalten, und dann darauf wartet, dass ein Block erstellt wird, kann dies zu einer Situation führen, in der einige Clients den Block als gültig betrachten, während andere einen HTTP -Fehlercode “413: Inhalt zu groß” ausgeben. “
Auswirkungen
Ein Angreifer, der diese Botschaften herstellen könnte, könnte die Mehrheit der Knoten (= Geth) dazu zwingen, Blöcke abzulehnen, die eine Minderheit akzeptieren würde. Diese Blöcke würden weggezogen und der Antragsteller würde die Belohnungen verpassen.

Am Anfang dachten wir, dass es nur möglich war, diese Blöcke durch die Verwendung von Bauherren oder eine modifizierte Version eines Clients zu erstellen. Geth hat eine gebaute Grenze von 128 KB für Transaktionen, was bedeutet, dass eine große Transaktion wie eine, die diskutiert wird, in den Transaktionspools eines Geth -Knotens nicht enden würde. Es war jedoch möglich, die Grenze weiterhin auszulösen, indem ein Client mit einer höheren Grenze den Block vorschlägt und die CL, die die Validierung dieses vorgeschlagenen größeren Blocks anforderte, vorschlägt.
Wir haben eine Lösung vorgeschlagen, um die RPC -Grenze für alle Clients vorübergehend auf den niedrigsten Wert (5 MB) zu senken. Dies würde den Block ungültig machen, und ein Angreifer wäre im Chaos, das er im Netzwerk verursachen kann, sehr begrenzt, da die Mehrheit der Knoten ihre Blöcke ablehnen würde.
Am 7. Februar stellten wir jedoch fest, dass es möglich war, einen Block zu erstellen, der die 5 -MB -Grenze mit einer Reihe von Transaktionen unter der 128 -KB -Grenze und nicht über 30 Millionen Gas erreichen würde.
Dies ist ein größeres Problem, da wir festgestellt haben, dass ein Angreifer eine Reihe hochbezahlter Transaktionen erstellen und an das Netzwerk senden könnte. Da er alle anderen im Mempool übertroffen hat, würde jeder Knoten (sogar Geth -Knoten) die Angriffstransaktionen in seinen Block enthalten und so einen Block erzeugen, der von der Mehrheit des Netzwerks nicht akzeptiert wird, was zu vielen Gabeln (alle von den Minderheitenknoten als gültig angesehen wird) und die Kette immer wieder immer wieder wieder vorzurocken.
Später am 7. Februar kamen wir zu dem Schluss, dass jeder, der ihre RPC -Grenzen erhöht, die sicherere Alternative sein würde.
Zeitleiste
- 2024-02-06 13:00: Toni (EF), Pari (EF) und Justin (FRU) versuchen, eine spezifische Transaktion zum Netzwerk zu übermitteln. Die Transaktion trägt zu bis zu 2,7 MB -Blöcken bei, wenn sie snappy komprimiert werden.
- 2024-02-06 13:25: PARI erhält Fehler von seinem lokalen Geth-Knoten, obwohl die Transaktion gültig sein sollte.
- 2024-02-06 15:14: Justin hat es geschafft, die Transaktion in einen Block zu setzen und sie über den Besu-Kunden einzureichen.
- 2024-02-06 20:46: SAM (EF) Warns Pari (besonderer Dank an Mystikryuujin auf x), Toni und Alex über bestimmte Sepolia -Knoten kämpfen.
- 2024-02-06 21:05: Team-Double-Checks mit Marius von Geth und bestätigt den Fehler.
- 2024-02-06 21:10: Die Bande tritt zusammen, um sie zu debuggen
- 2024-02-07 23:40: Wir haben uns für alle Kunden entschieden, ihr RPC-Anforderungslimit auf 5 MB zu beschränken
- 2024-02-07 6:40: Wir haben festgestellt, dass es ein größeres Problem geben könnte und der Angriff mit Transaktionen von weniger als 128 KB ausgeführt werden kann.
- 2024-02-07 10:00: Wir haben uns für alle Kunden entschieden, das RPC-Anforderungslimit zu erhöhen.
- 2024-02-07 21:00: Die Lösung wurde in Geth zusammengeführt.
- 2024-02-09: Geth wurde freigelassen
Während Geth der einzige von diesem Fehler betroffene Kunde war, haben auch andere Kunden ihre Ausfälle so aktualisiert, dass diese Angriffe sicher sind, selbst wenn die Gasgrenzen erhöht werden. Die Kundenteams gaben an, dass die folgenden Updates die sicheren RPC -Grenzen haben:
Geth: v1.13.12
Nethermind: v1.25.4
Glauben: 24.1.2
Erigon: v2.58.0
Reth: v0.1.0-alpha.18

