Am 3. September 2021 verlor die Launchpad- und Token-Distributionsplattform DAO Maker rund 4 Millionen $ und betraf etwa 5.251 Nutzer. Eine ungeschützte init()-Funktion in DAO Makers Distributions-Contracts ließ den Angreifer den Contract neu initialisieren, die Eigentümerschaft übernehmen und eine Notfall-Withdraw-Funktion aufrufen, um Nutzergelder zu entwenden.
Was geschah
DAO Maker betrieb Token-Sale- und Vesting-Infrastruktur — den Nutzern zugewiesene Tokens und eingezahlte Gelder wurden in Distributions-Contracts gehalten, bis die Vesting-Pläne abgelaufen waren.
Der fatale Fehler war der kanonische Re-Invokable-Initializer-Bug: Die init()-Funktion des Distributions-Contracts — die den Eigentümer und kritische Parameter setzte — hatte keinen Schutz gegen einen erneuten Aufruf.
Der Angriff:
- Rief
init()auf einem bereits deployten, finanzierten Distributions-Contract auf und übergab Parameter, die den Angreifer als Contract-Eigentümer festlegten. - Mit der übernommenen Eigentümerschaft rief er die
emergencyExit- / privilegierte Withdraw-Funktion des Contracts auf — legitim für den Eigentümer verfügbar — um Nutzergelder herauszuziehen. - Wiederholt über die betroffenen Pools, mit einem Gesamtschaden von rund 4 Mio. $.
Folgen
- DAO Maker bestätigte den Vorfall und verpflichtete sich, betroffene Nutzer zu entschädigen — aus Unternehmensreserven und Treasury.
- Die kompromittierten Contracts wurden außer Betrieb genommen und durch ordnungsgemäß geschützte Versionen ersetzt.
- Die gestohlenen Gelder wurden gewaschen; keine öffentliche Wiederherstellung.
Warum es wichtig ist
DAO Maker ist ein weiterer Eintrag in der Re-Invokable-Initializer-Linie — dem am häufigsten wiederholten katastrophalen Solidity-Pattern im Katalog:
- Parity Multisig (2017) — re-invokables
initWallet, 30 Mio. $ gestohlen + 150 Mio. $ eingefroren. - DODO (März 2021) — re-invokables
init()in Crowdpools. - Punk Protocol (Aug. 2021) — re-invokables
Initialize()per Delegatecall. - DAO Maker (Sept. 2021) — ungeschütztes
init(), Übernahme der Eigentümerschaft. - Audius (2022) — re-invokables Governance-Initializer.
Über fünf Jahre exakt derselben Bug-Klasse, jeder Vorfall mit Millionen-Verlusten — obwohl die Behebung ein einziger gut dokumentierter einzeiliger Modifier ist (OpenZeppelins initializer). Die Wiederkehr ist die Lektion: Dass eine Branche eine Schwachstellenklasse kennt, hindert einzelne Teams nicht daran, sie auszuliefern. Jeder neue upgradefähige Contract eines Teams, das die Parity-/DODO-/Punk-Geschichte nicht verinnerlicht hat, ist eine neue Chance, den Guard wegzulassen.
DAO Maker ist auch bemerkenswert wegen der Nutzerzahl-Wirkung — rund 5.251 betroffene Nutzer — was zeigt, dass Launchpad-/Distributionsplattformen viele individuelle Nutzergelder in gemeinsamen Contracts bündeln, sodass ein einzelner Initializer-Bug zu einem Ereignis mit tausenden Opfern wird statt zu einem reinen Treasury-Verlust eines einzelnen Protokolls. Der Blast-Radius dieser Bug-Klasse skaliert mit dem Umfang an Nutzergeldern, die der anfällige Contract verwahrt — und Distributionsplattformen verwahren sehr viel.
Quellen & On-Chain-Belege
- [01]halborn.comhttps://www.halborn.com/blog/post/explained-the-dao-maker-hack-september-2021
- [02]newsweek.comhttps://www.newsweek.com/dao-maker-hack-7m-stolen-defi-heist-1618785
- [03]rekt.newshttps://rekt.news/daomaker-rekt