Aller au contenu
Fondé MMXXVIVol. VI · № 273RSS
Blockchain Breaches

Archive des incidents de sécurité dans les cryptomonnaies — piratages, exploits, défaillances de ponts et rug pulls, documentés avec des preuves on-chain.

Dossier № 054Bug de smart contract

Init non protégé de DAO Maker

Une fonction init() non protégée dans les contrats de vesting de DAO Maker a permis la prise de contrôle et un emergencyExit, drainant 4 M$.

Date
Victime
DAO Maker
Chaîne(s)
Statut
Fonds dérobés

Le 3 septembre 2021, la plateforme de lancement et de distribution de tokens DAO Maker a perdu environ 4 millions de dollars affectant environ 5 251 utilisateurs. Une fonction init() non protégée sur les contrats de distribution de DAO Maker a permis à l'attaquant de ré-initialiser le contrat, prendre le contrôle et appeler une fonction de retrait d'urgence pour drainer les fonds des utilisateurs.

Ce qui s'est passé

DAO Maker exploitait une infrastructure de vente de tokens et de vesting — les tokens alloués aux utilisateurs et les fonds contribués étaient détenus dans des contrats de distribution en attente des calendriers de vesting.

La faille fatale était le bug canonique d'initializer ré-invocable : la fonction init() du contrat de distribution — qui définissait le propriétaire du contrat et les paramètres critiques — n'avait aucune protection contre un second appel.

L'attaque :

  1. A appelé init() sur un contrat de distribution déjà déployé et financé, en passant des paramètres qui définissaient l'attaquant comme propriétaire du contrat.
  2. Avec la propriété saisie, a appelé la fonction emergencyExit / retrait privilégié du contrat — légitimement disponible pour le propriétaire — pour transférer les fonds des utilisateurs.
  3. A répété sur les pools affectés, drainant environ 4 M$.

Conséquences

  • DAO Maker a reconnu la brèche et s'est engagée à indemniser les utilisateurs affectés depuis ses réserves d'entreprise et de trésorerie.
  • Les contrats compromis ont été retirés et remplacés par des versions correctement protégées.
  • Les fonds volés ont été blanchis ; aucune récupération publique.

Pourquoi c'est important

DAO Maker est une entrée de plus dans la lignée des initializers ré-invocables — le pattern catastrophique Solidity le plus répété du catalogue :

  • Parity Multisig (2017) — initWallet ré-invocable, 30 M$ volés + 150 M$ gelés.
  • DODO (mars 2021) — init() ré-invocable sur Crowdpools.
  • Punk Protocol (août 2021) — Initialize() ré-invocable via delegatecall.
  • DAO Maker (sept. 2021) — init() non protégée, saisie de propriété.
  • Audius (2022) — initializer de gouvernance ré-invocable.

Plus de cinq ans de la même classe de bug exactement, chaque instance coûtant des millions, malgré le fait que la mitigation est un seul modifier d'une ligne bien documenté (l'initializer d'OpenZeppelin). La récurrence est la leçon : connaître une classe de vulnérabilité en tant qu'industrie n'empêche pas les équipes individuelles de l'expédier. Chaque nouveau contrat upgradeable, écrit par une équipe qui n'a peut-être pas intériorisé l'historique Parity/DODO/Punk, est une nouvelle opportunité d'omettre la protection.

DAO Maker est aussi notable pour l'impact en nombre d'utilisateurs — environ 5 251 utilisateurs affectés — illustrant que les plateformes de lancement/distribution concentrent les fonds de nombreux utilisateurs individuels dans des contrats partagés, de sorte qu'un seul bug d'initializer devient un événement à plusieurs milliers de victimes plutôt qu'une perte unique de trésorerie de protocole. Le rayon d'impact de la classe de bug s'échelle avec la quantité d'argent utilisateur que le contrat vulnérable garde en custodie, et les plateformes de distribution en gardent beaucoup.

Sources & preuves on-chain

  1. [01]halborn.comhttps://www.halborn.com/blog/post/explained-the-dao-maker-hack-september-2021
  2. [02]newsweek.comhttps://www.newsweek.com/dao-maker-hack-7m-stolen-defi-heist-1618785
  3. [03]rekt.newshttps://rekt.news/daomaker-rekt

Dépôts liés