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 № 026Bug de smart contract

Init non initialisé des Crowdpools DODO

Les Crowdpools V2 de DODO ont perdu 3,8 M$ après que l'attaquant a rappelé init() avec un faux token ; des bots MEV en ont front-run environ 1,9 M$.

Date
Victime
DODO
Statut
Partiellement récupéré

Le 9 mars 2021, l'exchange décentralisé DODO a subi un exploit affectant quatre Crowdpools V2 — pertes totales initialement d'environ 3,8 millions de dollars, dont environ 1,9 M$ ont été front-run par des bots d'arbitrage MEV (certains ayant restitué les fonds). Cause racine : la fonction init() du Crowdpool pouvait être rappelée sur des pools déjà initialisés, sans protection contre la ré-initialisation.

Ce qui s'est passé

Les Crowdpools V2 de DODO étaient des pools de liquidité initialisés via une fonction init() qui définissait les paramètres du pool — y compris les tokens tradés et la relation de prix entre eux. Comme c'est standard pour les fonctions d'initialisation, init() était censée être appelée exactement une fois, à la création du pool.

La faille fatale : le contrat Crowdpool de DODO ne se protégeait pas contre un second appel à init(). Un attaquant pouvait :

  1. Appeler à nouveau init() sur un Crowdpool existant et financé, en passant un faux token qu'il contrôlait comme l'un des actifs du pool et en fixant une relation de prix arbitraire.
  2. Le pool croyait désormais trader l'actif réel contre le faux token sans valeur de l'attaquant à un taux choisi par l'attaquant.
  3. Utiliser un prêt flash pour « trader » le faux token dans le pool, extrayant les actifs réels du pool au taux manipulé.
  4. Répéter sur les quatre Crowdpools affectés.

Le total extractible était d'environ 3,8 M$. Mais les transactions de l'attaquant étaient visibles dans le mempool public, et les bots d'arbitrage MEV ont front-run environ 1,9 M$ de l'exploit — rejouant l'attaque pour extraire les fonds avant que l'attaquant original ne le puisse. Certains de ces bots de front-running étaient opérés par des white-hats qui ont restitué les fonds ; d'autres les ont gardés.

Conséquences

  • DODO a suspendu les Crowdpools affectés et déployé un contrat corrigé avec des protections appropriées contre la ré-initialisation.
  • DODO a publié un post de résolution et a travaillé pour récupérer et restituer les fonds front-run ; une portion significative a été récupérée via les opérateurs de bots MEV restituant les fonds et via négociation.
  • L'AMM principal du protocole n'a pas été affecté — seule la fonctionnalité Crowdpool.

Pourquoi c'est important

L'incident DODO est l'un des plus anciens exploits d'initializer ré-invocable de l'histoire DeFi, antérieur au plus connu Audius (2022) et poursuivant la lignée de Parity Multisig (2017). La classe de bug — une fonction init() ou initialize() sans protection contre un second appel — est l'une des plus documentées en Solidity, et l'une des plus répétées.

Les leçons structurelles :

  1. Toute fonction d'initialisation a besoin d'une protection one-shot explicite — le modifier initializer d'OpenZeppelin, un booléen initialized, ou équivalent. Le pattern est une seule ligne de code.

  2. Le mempool public transforme chaque exploit en course. L'incident DODO est l'une des démonstrations claires les plus anciennes que les bots MEV front-runnant un attaquant font désormais partie de la dynamique d'incident — parfois pour le pire (les bots gardent les fonds), parfois pour le meilleur (les bots white-hat les restituent). Le protocole exploité a souvent le moins de contrôle sur l'endroit où finissent les fonds.

  3. L'isolation au niveau fonctionnalité limite le rayon d'impact. L'AMM principal de DODO n'a pas été affecté car le bug était confiné à la fonctionnalité Crowdpool. Les protocoles qui isolent les nouvelles fonctionnalités derrière des contrats séparés (plutôt que d'étendre des contrats centraux monolithiques) contiennent les dégâts quand une nouvelle fonctionnalité est livrée avec un bug.

DODO s'est rétabli et a continué comme un DEX significatif — l'un des protocoles relativement rares de la vague d'exploits 2021 qui a survécu à son incident avec sa réputation largement intacte, en partie grâce au processus de résolution transparent et à la récupération partielle fortuite (quoique chaotique) via les bots MEV.

Sources & preuves on-chain

  1. [01]halborn.comhttps://halborn.com/explained-the-dodo-dex-hack-march-2021/
  2. [02]coindesk.comhttps://www.coindesk.com/tech/2021/03/09/dodo-dex-drained-of-38m-in-defi-exploit
  3. [03]dodoexchange.medium.comhttps://dodoexchange.medium.com/dodo-incident-which-affected-4-crowdpools-and-our-resolution-9da0298c2b65

Dépôts liés