Prise de contrôle de gouvernance Tornado Cash
La DAO Tornado Cash détournée : l'attaquant a selfdestruct une proposition adoptée et redéployé du code malveillant à la même adresse, saisissant 1,2M votes.
- Date
- Victime
- Tornado Cash
- Chaîne(s)
- Statut
- Récupéré
Le 20 mai 2023, la DAO Tornado Cash a été prise par un attaquant qui a exploité une propriété subtile du redéploiement de contrat. La proposition malveillante prétendait être identique bit à bit à une précédente proposition approuvée par la communauté — donc les votants l'ont approuvée. Une fois adoptée, l'attaquant a selfdestruct la logique de la proposition et redéployé du code malveillant entièrement différent à la même adresse, saisissant 1,2 million de votes contre ~70 000 légitimes et drainant la DAO. Vol net : environ 2,17 millions de dollars (le leaderboard de Rekt liste 750 K$, reflétant une comptabilité différente de la valeur réalisée). L'attaquant a plus tard rendu le contrôle de la gouvernance.
Ce qui s'est passé
La DAO de Tornado Cash exécutait les propositions approuvées via delegatecall vers un contrat de proposition. L'attaque a abusé de la différence entre quand les votants examinent une proposition et quand son code s'exécute réellement :
- L'attaquant a soumis une proposition avec une logique qui semblait identique à une proposition précédemment approuvée et fiable. Les votants, reconnaissant le « même » code, l'ont approuvée.
- Le contrat de proposition contenait une fonction
emergencyStop()cachée avecselfdestruct. - Après l'adoption de la proposition mais avant/à l'exécution, l'attaquant a appelé
emergencyStop(), détruisant le code du contrat de proposition et — crucialement — réinitialisant le nonce de déploiement / libérant l'adresse. - L'attaquant a redéployé un code malveillant complètement différent à la même adresse (en utilisant la propriété de réutilisation d'adresse style
CREATE2queselfdestructactivait à l'époque). - Lorsque la DAO a exécuté la proposition « approuvée » via
delegatecall, elle a maintenant exécuté le code malveillant substitué de l'attaquant — qui a minté 10 000 votes de gouvernance à chacune de nombreuses adresses contrôlées par l'attaquant, totalisant 1,2 million de votes contre les ~70 000 votes légitimes existants. - Avec le contrôle de la supermajorité, l'attaquant a drainé les avoirs TORN de la DAO et les frais du routeur verrouillés.
Conséquences
- Le jeton TORN a chuté de ~40-50 % à la nouvelle.
- Dans un tournant inhabituel, l'attaquant — après avoir démontré un contrôle total — a soumis une proposition pour restaurer la gouvernance légitime et a renoncé au contrôle, retournant la DAO à sa communauté. Il a gardé les produits des jetons réalisés.
- L'incident est devenu une étude de cas canonique sur le danger de la réutilisation d'adresse activée par
selfdestructet l'écart entre l'examen et l'exécution de proposition.
Pourquoi c'est important
L'attaque de gouvernance de Tornado Cash est l'un des exploits les plus techniquement élégants du catalogue, et il enseigne deux leçons distinctes :
-
« Le code que vous avez examiné n'est pas nécessairement le code qui s'exécute. » Les votants de gouvernance ont examiné le code au moment de la soumission de la proposition ; le code qui s'est exécuté au moment de l'exécution était différent, parce que
selfdestruct+ redéploiement permettait à l'attaquant d'échanger le bytecode du contrat à une adresse fixe. C'est la même leçon structurelle que Swaprum et Hope Finance (déployé ≠ audité), généralisée à la gouvernance. -
La réutilisation d'adresse activée par
selfdestructest un risque fondamental. L'attaque dépendait de la propriété EVM (depuis contrainte par EIP-6780) queselfdestructlibérait une adresse pour redéploiement avec un code différent. L'exploit est l'une des raisons les plus médiatisées pour lesquelles la sémantiqueselfdestructde l'EVM a été ultérieurement resserrée.
Le choix de l'attaquant de rendre le contrôle de la gouvernance est également notable — l'un de plusieurs cas du catalogue (Mango Markets, les white-hats DODO, celui-ci) où la relation du perpétrateur aux fonds était ambiguë entre « voleur » et « démonstrateur agressif ». La ligne juridique et éthique — exécuter une logique que le contrat permet constitue-t-il un crime ? — reste la question non résolue qui traverse toute l'ère des exploits DeFi.
Sources & preuves on-chain
- [01]halborn.comhttps://www.halborn.com/blog/post/explained-the-tornado-cash-hack-may-2023
- [02]coindesk.comhttps://www.coindesk.com/tech/2023/05/21/attacker-takes-over-tornado-cash-dao-with-vote-fraud-token-slumps-40
- [03]medium.comhttps://medium.com/@zan.top/unpacking-the-tornado-cash-governance-attack-15b40691ca2e