The DAO, l'organisation décentralisée hébergée sur la blockchain d'Ethereum fait à nouveau parler d'elle. Cette fois-ci les nouvelles ne sont pas bonnes : un pirate est parvenu à mettre la main sur un butin de 50 millions de dollars grâce à un smart contract exploitant un bug.
Il y a eu comme un couac au sein de The DAO. Présentée comme un énorme succès, grâce à ses 150 millions de dollars levés auprès d'utilisateurs d'Ethereum lors de sa phase de création, l'entreprise décentralisée sur la blockchain de cette crypto-monnaie vient de connaître un tournant dramatique, quelques semaines seulement après sa création.
DAO : mode d'emploi
Pour comprendre ce qui s'est passé, il faut d'abord avoir une idée claire du fonctionnement d'une DAO (Decentralized Autonomous Organization). Il s'agit d'un concept d'entreprise autonome et décentralisée propre à la blockchain d'Ethereum. Elle n'a aucune existence juridique, n'emploie aucun personnel, ne peut détenir de biens et agit sur le monde physique en produisant des contrats avec des prestataires extérieurs.
Ces contrats, appelés « smart contracts », sont une des fonctionnalités offertes par la blockchain d'Ethereum, qui a été conçue dans cette optique. Les termes des contrats sont établis à l'avance et dès lors que les conditions en sont remplies, ses termes sont automatiquement exécutés.
Toutes les décisions sont prises de concert par les actionnaires de la DAO qui ont investi lors de sa création, ou acquis des parts plus tard. Chaque « jeton » dont ils disposent vaut pour un ou plusieurs droits de vote et chacun peut donc influencer la direction prise par la DAO en fonction de son poids dans son capital. Exactement comme pour une entreprise classique. Comme pour n'importe quelle autre blockchain, l'ensemble des transactions sont archivées et visibles publiquement.
On a signé décontrax
Maintenant que le décor est posé, concentrons-nous sur le 17 juin dernier. Un « pirate » est parvenu à sceller un smart contract avec The DAO pour la fourniture d'un service quelconque. Seulement, ce contrat contenait un bug (potentiellement introduit de façon volontaire). Selon Andrew Miller, un doctorant de l'université du Maryland ayant participé à l'audit du code d'Ethereum en 2015, la faille introduite dans le contrat était assez simple à mettre en évidence, comme il l'explique à nos confrères de Wired.
Selon lui, le contrat aurait tout simplement permis de répéter un retrait de fonds sans vérifier au préalable si le solde prévu était disponible. L'attaquant aurait ainsi mis la main sur environ 50 millions de dollars en ether (l'équivalent d'un bitcoin sur la blockchain d'Ethereum), stockés sur un autre compte visible de tous sur la blockchain. Les circonstances exactes de ce « hold-up » ne sont pas connues avec certitude, d'autres évoquant un bug dans un compilateur (Solidity).
Est-ce un vol si le contrat est mal écrit ?
Cet accident soulève un nombre important de questions, souvent cruciales. Alors que les smarts contracts n'en sont qu'à leur balbutiement, comment considérer ce type de cas d'un point de vue juridique ? Les avis fusent et divergent au sein de la communauté d'Ethereum. Certains voient cet évènement comme un vol tandis que d'autres rappellent que seul le code fait foi côté contrat et que si le code a été respecté, la DAO ne peut s'en prendre qu'à elle.
« A posteriori, il est clair qu'on est passé trop rapidement du petit contrat « Hello, World », à un gros truc complexe, avec plein de fric, comme The DAO. C'est un peu comme si, immédiatement après la traversée de la Manche par Blériot, on avait lancé sur l'Atlantique un avion de 500 passagers payants... », résume ainsi non sans humour Stephane Bortzmeyer sur son blog.
En attendant, la communauté cherche des solutions pour rapatrier les fonds « volés » dans les caisses de The DAO.
L'enjeu est de taille puisque la somme détournée représente plus de 3 % de la masse totale d'ether actuellement présente sur le marché. Or, Ethereum devant prochainement passer sur un modèle de génération non plus basée sur le minage (Proof of Work) mais sur un schéma dit de « Proof of Stake » où de nouveaux ethers sont générés sous forme d'intérêts de ceux déjà existants. En clair, ce ne sera plus la génération de nouveaux ethers qui sera récompensée, mais la rente. L'attaquant pourrait donc disposer de 3 % de la future masse d'ether générée, ce qui pourra poser dans le futur de gros problèmes.
Quelles solutions pour The DAO ?
Plusieurs options s'offraient à la communauté pour remettre la main sur ces fonds. Le contrat prévoyait une periode de maturation de 27 jours pour les fonds retirés de The DAO, période pendant laquelle l'attaquant ne peut pas disposer de la somme comme il le souhaite. Pour prolonger cette durée, une première étape a consisté en un « soft-fork ».
« Le but ici est de proposer à tous de considérer, au moins pendant un temps, ce bout de la blockchain comme nul et non avenu. Si tout le monde est d'accord cela veut dire que l'ether présent sur ce contrat ou cette adresse ne pourra pas bouger, personne ne le validera. On se débarrasse ainsi de la fameuse deadline de 27 jours et on n'a plus à précipiter une décision dans un sens ou l'autre. C'est trop compliqué d'être chirurgical en si peu de temps, d'où la proposition de marquer tout ce qui contient le code de la DAO (donc la DAO elle-même, et toutes les demandes de split légitimes) », nous explique un spécialiste des crypto-monnaies, qui souhaite garder l'anonymat.
Une fois ce délai obtenu, il reste encore à choisir une voie à suivre. Parmi les pistes explorées, on notera l'attaque pure et simple de la « child DAO » de l'attaquant, afin d'essayer de drainer les 3,6 millions d'ethers volés en profitant du fait que ce type de DAO ne peut envoyer des fonds que vers l'adresse dont elle les a reçues. Une autre option consisterait à ne rien faire du tout et à laisser The DAO se faire attaquer et dépouiller de tous les actifs qu'elle contient. Une solution qui aurait l'avantage de ne pas toucher au caractère inaliénable de la blockchain, mais ferait de celle d'Ethereum un véritable far west.
L'idée d'un « hard fork » a également été évoquée. Par consensus, les mineurs invalideraient la transaction incriminée et feraient ainsi revenir les 3,6 millions d'ethers dans The DAO, qui serait modifiée pour l'occasion afin de combler la faille. Cette méthode aurait l'inconvénient de créer un précédent de « réécriture » d'une blockchain. « Cela permettrait par exemple à un tribunal de faire pression pour faire invalider telle ou telle transaction », note l'expert que nous avons interrogé.
Deus ex machina
Finalement, une autre option semble avoir été adoptée en attendant. Un collectif de pirates se présentant comme « white hats » (des « gentils » autoproclamés) ont expliqué avoir placé, dans une nouvelle DAO, les 7,2 millions d'ethers qui étaient encore présents dans The DAO afin d'empêcher de nouvelles attaques. « Nous avons réduit le nombre d'attaquants potentiels de plus de 20 000 à seulement deux », se félicitent-ils sur Reddit.
La suite de leur plan consiste à s'en prendre directement la « child DAO » de l'attaquant pour drainer le plus d'ethers possible. Cette possibilité leur sera ouverte dans 22 jours, le temps que cette DAO « murisse » et que les fonds qu'elle contient puissent bouger. Sans rentrer dans les détails de l'attaque (visibles par ici), les fonds détournés pourraient retourner à leur place d'ici un peu plus de deux mois.
En cas d'échec de cette opération, le « hard fork » consistant à invalider les transactions frauduleuses en altérant la blockchain restera une option, mais elle est encore loin de faire l'unanimité au sein de la communauté d'Ethereum. « Un hard fork correspond à l'option nucléaire ,et la situation est telle que pour l'instant nous n'en avons pas besoin », résume l'un de ses membres.