Blockchain/Niveau VI · Après le bitcoin/6.3 Ethereum et smart contracts/Leçon 3
Le piratage de The DAO et Ethereum Classic
La faille de réentrance qui a scindé une chaîne et fixé les termes du débat sur l’immuabilité
MatérielUne interface d’explorateur de blocs (par ex. Etherscan)Le code source du smart contract de The DAO (version antérieure au fork)Un carnet pour noter les changements des variables d’état
Curiosité
- Pourquoi une ligne de code qui s’exécute avant la mise à jour de l’état permet-elle à un attaquant de vider des fonds à répétition ?
- Que se passe-t-il quand une communauté vote pour réécrire l’histoire plutôt que de la préserver ?
- Qui détient l’autorité finale : le mécanisme de consensus ou les développeurs qui le maintiennent ?
Explorer
- The DAO a été lancée en avril 2016 en tant que fonds de capital-risque autonome, levant environ 12,7 millions d’ETH auprès de plus de 11 000 investisseurs. Ce montant représentait environ 14 % de tout l’ether en circulation à l’époque. Le projet fonctionnait entièrement au moyen de smart contracts, permettant aux détenteurs de tokens de voter sur les projets à financer, sans gestion centralisée ni structures classiques de gouvernance d’entreprise.
- Le 17 juin 2016, un attaquant a exploité une vulnérabilité de réentrance dans la fonction de scission (split) de The DAO. Ce bug permettait d’appeler de nouveau le contrat avant que son solde interne ne soit mis à jour. L’attaquant a siphonné environ 3,6 millions d’ETH vers une « DAO enfant » (child DAO), où une période de blocage de 28 jours a gelé les fonds. Cet exploit a montré que les machines Turing-complètes introduisent des risques complexes de gestion de l’état, absents de systèmes plus simples comme Bitcoin.
- La communauté Ethereum s’est retrouvée face à un dilemme immédiat : respecter l’immuabilité du registre ou protéger les investisseurs d’une défaillance critique du code. Les développeurs ont fait valoir que le bug était une erreur d’implémentation, et non un comportement voulu, et que laisser les fonds bloqués saperait la confiance dans l’utilité de la plateforme. Les opposants ont rétorqué que modifier l’historique de la chaîne trahissait la promesse fondamentale du consensus décentralisé et créait un précédent dangereux pour de futures interventions de gouvernance.
- Le 20 juillet 2016, Ethereum a effectué un hard fork au bloc 1 920 000 afin d’annuler l’attaque et de transférer les fonds vers un contrat de remboursement. Les détenteurs de tokens DAO ont ensuite pu récupérer leur ether auprès de ce contrat. Une minorité a rejeté cette intervention et a continué à miner la chaîne originale non modifiée. Ce groupe a formé Ethereum Classic (ETC), fidèle au principe selon lequel « code is law » (le code fait loi) et selon lequel aucune entité ne devrait avoir le pouvoir de réécrire l’histoire.
- Le fork a créé deux réalités parallèles à partir d’un même registre. Tandis qu’Ethereum devenait une plateforme majeure de smart contracts, Ethereum Classic est resté un réseau plus modeste, servant surtout de manifeste philosophique en faveur de la décentralisation. L’incident a influencé le développement ultérieur des protocoles dans l’ensemble des cryptomonnaies.
- Consultez le bloc 1 920 000 sur un explorateur Ethereum et sur un explorateur Ethereum Classic : les deux chaînes sont identiques jusqu’au bloc 1 919 999 et divergent à partir du bloc 1 920 000. Le fork n’a pas déplacé l’ether de The DAO au moyen d’une transaction ; le nouveau logiciel client a appliqué un changement d’état irrégulier à ce bloc, ce qui explique que l’annulation apparaisse dans le code plutôt que dans une liste de transactions.
Faits clés
- The DAO a levé environ 12,7 millions d’ETH, soit près de 14 % de tout l’ether en circulation au moment de son lancement.
- Le 17 juin 2016, une faille de réentrance a permis à un attaquant de siphonner environ 3,6 millions d’ETH vers une DAO enfant.
- Ethereum a effectué un hard fork le 20 juillet 2016, au bloc 1 920 000, afin d’annuler l’attaque et de restituer les fonds.
- Une minorité a continué à miner la chaîne originale, devenue Ethereum Classic (ETC), en invoquant le principe « code is law ».
- À l’issue du fork, les détenteurs possédaient à la fois de l’ETH sur la nouvelle chaîne et de l’ETC sur l’ancienne.
- L’incident a suscité des débats durables sur l’immuabilité, l’autorité des développeurs et la définition du consensus.
Exercice neuf, six, trois, un
9RassemblerÉnumérez 9 cas où une mise à jour logicielle ou un changement de protocole a modifié des données d’utilisateurs existantes ou l’historique des transactions. Indiquez qui a initié le changement et quelle justification a été avancée.
6RegrouperRegroupez ces 9 cas en 6 catégories selon que le changement était une correction de bug, l’ajout d’une fonctionnalité, un retour en arrière pour raison de sécurité, une mise à niveau du consensus, un hard fork ou un soft fork.
3DistillerRéduisez ces 6 catégories à 3 types d’autorité qui ont fini par décider de ces changements.
1CristalliserRédigez 1 phrase sur ce que promet le principe « code is law » (le code fait loi) et sur ce qu’il sacrifie lorsque le code défaille.
Vérification des faits
Les dates, les chiffres et les affirmations ont été vérifiés à l’aide des sources publiées listées ci-dessous.
- Ethereum Foundation, 'The DAO hack' blog posts (June-July 2016)
- SEC, Report of Investigation: The DAO (July 2017)
- Post-mortem analyses of the reentrancy exploit (2016)