Am 9. März 2021 erlitt die dezentrale Börse DODO einen Exploit, der vier V2-Crowdpools betraf — Verluste anfänglich rund 3,8 Millionen $, von denen etwa 1,9 Mio. $ von MEV-Arbitrage-Bots front-runt wurden (einige gaben Gelder zurück). Die Ursache: Die init()-Funktion des Crowdpools konnte auf bereits initialisierten Pools erneut aufgerufen werden — ohne Re-Initialisierungs-Guard.
Was geschah
DODOs V2-Crowdpools waren Liquiditätspools, die über eine init()-Funktion initialisiert wurden, die die Pool-Parameter setzte — darunter, welche Tokens der Pool handelt und das Preisverhältnis zwischen ihnen. Wie bei Initialisierungs-Funktionen üblich, sollte init() genau einmal beim Anlegen des Pools aufgerufen werden.
Der fatale Fehler: DODOs Crowdpool-Contract schützte nicht davor, dass init() ein zweites Mal aufgerufen wurde. Ein Angreifer konnte:
init()erneut auf einem bestehenden, finanzierten Crowdpool aufrufen und einen Fake-Token unter seiner Kontrolle als eines der Pool-Assets übergeben sowie ein beliebiges Preisverhältnis setzen.- Der Pool glaubte nun, das echte Asset gegen den wertlosen Fake-Token des Angreifers zu einem vom Angreifer gewählten Kurs zu handeln.
- Per Flash Loan den Fake-Token in den Pool „handeln" und die echten Assets des Pools zum manipulierten Kurs extrahieren.
- Über die vier betroffenen Crowdpools wiederholen.
Insgesamt extrahierbar waren rund 3,8 Mio. $. Aber die Transaktionen des Angreifers waren im öffentlichen Mempool sichtbar, und MEV-Arbitrage-Bots front-runten etwa 1,9 Mio. $ des Exploits — sie spielten den Angriff nach, um die Gelder vor dem ursprünglichen Angreifer abzuziehen. Einige dieser Front-Running-Bots wurden von White-Hats betrieben, die die Gelder zurückgaben; andere behielten sie.
Folgen
- DODO pausierte die betroffenen Crowdpools und shippte einen gefixten Contract mit ordentlichen Re-Initialisierungs-Guards.
- DODO veröffentlichte einen Resolution-Post und arbeitete daran, front-runte Gelder zurückzuholen und zurückzugeben; ein relevanter Teil wurde durch zurückgebende MEV-Bot-Betreiber und Verhandlungen wiederhergestellt.
- Der Kern-AMM des Protokolls war nicht betroffen — nur das Crowdpool-Feature.
Warum es wichtig ist
Der DODO-Vorfall ist einer der frühesten Re-Invokable-Initializer-Exploits der DeFi-Geschichte — vor dem bekannteren Audius (2022) und setzt die Linie von Parity Multisig (2017) fort. Die Bug-Klasse — eine init()- oder initialize()-Funktion ohne Schutz gegen mehrfachen Aufruf — ist eine der am besten dokumentierten in Solidity und eine der am häufigsten wiederholten.
Die strukturellen Lektionen:
-
Jede Initialisierungs-Funktion braucht einen expliziten One-Shot-Guard — OpenZeppelins
initializer-Modifier, eininitialized-Boolean oder Äquivalentes. Das Pattern ist eine Codezeile. -
Der öffentliche Mempool macht jeden Exploit zum Rennen. DODOs Vorfall ist eine der frühesten klaren Demonstrationen, dass MEV-Bots, die einen Angreifer front-runnen, inzwischen Teil der Incident-Dynamik sind — manchmal zum Schlechteren (Bots behalten die Gelder), manchmal zum Besseren (White-Hat-Bots geben sie zurück). Das exploitete Protokoll hat oft am wenigsten Kontrolle darüber, wo die Gelder landen.
-
Feature-Isolation begrenzt den Blast-Radius. DODOs Kern-AMM war nicht betroffen, weil der Bug auf das Crowdpool-Feature beschränkt war. Protokolle, die neue Features hinter separaten Contracts isolieren (statt monolithische Kern-Contracts auszuweiten), begrenzen den Schaden, wenn ein neues Feature mit einem Bug shippt.
DODO erholte sich und blieb eine relevante DEX — eines der wenigen Protokolle aus der Exploit-Welle 2021, das den Vorfall mit weitgehend intaktem Ruf überstand, teils dank des transparenten Aufarbeitungs-Prozesses und der glücklichen (wenn chaotischen) MEV-Bot-Teilwiederherstellung.
Quellen & On-Chain-Belege
- [01]halborn.comhttps://halborn.com/explained-the-dodo-dex-hack-march-2021/
- [02]coindesk.comhttps://www.coindesk.com/tech/2021/03/09/dodo-dex-drained-of-38m-in-defi-exploit
- [03]dodoexchange.medium.comhttps://dodoexchange.medium.com/dodo-incident-which-affected-4-crowdpools-and-our-resolution-9da0298c2b65