Toma de gobernanza de Tornado Cash
El DAO de Tornado Cash fue secuestrado tras que un atacante autodestruyera una propuesta aprobada y redesplegara código malicioso, sumando 1,2M votos.
- Fecha
- Víctima
- Tornado Cash
- Cadena(s)
- Estado
- Recuperado
El 20 de mayo de 2023, el DAO de Tornado Cash fue tomado por un atacante que explotó una propiedad sutil del redespliegue de contratos. La propuesta maliciosa afirmaba ser idéntica byte a byte a una propuesta anterior aprobada por la comunidad — por lo que los votantes la aprobaron. Después de que pasara, el atacante autodestruyó la lógica de la propuesta y redesplegó código malicioso completamente diferente en la misma dirección, capturando 1,2 millones de votos contra ~70.000 legítimos y drenando el DAO. Robo neto: aproximadamente $2,17 millones (el ranking de Rekt lista $750K, reflejando una contabilidad diferente del valor realizado). El atacante posteriormente devolvió el control de gobernanza.
Qué ocurrió
El DAO de Tornado Cash ejecutaba propuestas aprobadas vía delegatecall a un contrato de propuesta. El ataque abusó de la diferencia entre cuándo los votantes revisan una propuesta y cuándo su código realmente se ejecuta:
- El atacante envió una propuesta con lógica que parecía idéntica a una propuesta previamente aprobada y confiada. Los votantes, reconociendo el "mismo" código, la aprobaron.
- El contrato de la propuesta contenía una función
emergencyStop()oculta conselfdestruct. - Después de que la propuesta pasara pero antes/en el momento de la ejecución, el atacante llamó a
emergencyStop(), destruyendo el código del contrato de propuesta y — críticamente — reiniciando el nonce de despliegue / liberando la dirección. - El atacante redesplegó código malicioso completamente diferente en la misma dirección (usando la propiedad de reutilización de dirección estilo
CREATE2queselfdestructpermitía en ese momento). - Cuando el DAO ejecutó la propuesta "aprobada" vía
delegatecall, ahora ejecutó el código malicioso sustituido por el atacante — que acuñó 10.000 votos de gobernanza para cada una de muchas direcciones controladas por el atacante, totalizando 1,2 millones de votos contra los ~70.000 votos legítimos existentes. - Con control de supermayoría, el atacante drenó las tenencias de TORN del DAO y las comisiones del router bloqueadas.
Consecuencias
- El token TORN cayó ~40-50% con la noticia.
- En un giro inusual, el atacante — tras demostrar control total — envió una propuesta para restaurar la gobernanza legítima y renunció al control, devolviendo el DAO a su comunidad. Se quedaron con las ganancias realizadas en tokens.
- El incidente se convirtió en un caso de estudio canónico sobre el peligro de la reutilización de dirección habilitada por
selfdestructy la brecha entre la revisión de propuestas y la ejecución de propuestas.
Por qué importa
El ataque de gobernanza de Tornado Cash es uno de los exploits técnicamente más elegantes del catálogo, y enseña dos lecciones distintas:
-
"El código que revisaste no es necesariamente el código que se ejecuta." Los votantes de la gobernanza revisaron el código en el momento de la presentación de la propuesta; el código que se ejecutó en el momento de la ejecución era diferente, porque
selfdestruct+ redespliegue permitía al atacante intercambiar el bytecode del contrato en una dirección fija. Esta es la misma lección estructural que Swaprum y Hope Finance (desplegado ≠ auditado), generalizada a la gobernanza. -
La reutilización de dirección habilitada por
selfdestructes un peligro fundacional. El ataque dependía de la propiedad de la EVM (desde entonces restringida por EIP-6780) de queselfdestructliberaba una dirección para redespliegue con código diferente. El exploit es una de las razones de más alto perfil por las que la semántica deselfdestructde la EVM fue posteriormente endurecida.
La elección del atacante de devolver el control de la gobernanza también es notable — uno de varios casos del catálogo (Mango Markets, los white-hats de DODO, este) donde la relación del perpetrador con los fondos era ambigua entre "ladrón" y "demostrador agresivo". La línea legal y ética — ¿constituye un crimen ejecutar lógica que el contrato permite? — sigue siendo la pregunta sin resolver que recorre toda la era del exploit DeFi.
Fuentes y evidencia 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