Saltar al contenido
Registro de incidente · · 1 min de lectura · 218 palabras ·Descubierto ·Divulgado Resuelto

Exploit de llamada recursiva en The DAO, junio de 2016: qué ocurrió y qué comprobar

Un fallo de reentrada en la función de división de The DAO vació unos 3,6 millones de ETH y llevó al polémico hard fork del que salieron Ethereum y Ethereum Classic.

Compartir
Esquema del incidente de The DAO que muestra la etapa de reentrada como punto de fallo.
Schematic of the The DAO incident showing the reentrancy stage as the failure point.

De un vistazo

ENTIDAD AFECTADA
The DAO
CADENA(S)
Ethereum
CLASE DE ATAQUE
Reentrada
PÉRDIDA DECLARADA
aprox. 3,6 millones de ETH(Ethereum Foundation, 17 Jun 2016)
RESPUESTA OFICIAL
blog.ethereum.org

El error que dio nombre a una clase de vulnerabilidad

La función de división de The DAO transfería ether al llamante antes de actualizar el saldo registrado de ese llamante. Un contrato que recibe ether puede ejecutar código, y ese código podía volver a llamar a la función de división: en ese momento el saldo seguía diciendo que al atacante se le debía su importe completo. Repítelo dentro de una misma transacción y la retirada se multiplica.

La reentrada ya se conocía antes de esto. Lo que hizo The DAO fue demostrar su coste a gran escala y establecer el orden comprobaciones-efectos-interacciones que hoy se enseña a todo desarrollador de Solidity.

Por qué sigue importando

Casi una década después, la reentrada sigue apareciendo en este registro: el incidente de Curve tuvo que ver con cerrojos de reentrada correctamente escritos pero incorrectamente compilados. La clase de vulnerabilidad no desapareció; se multiplicaron las formas de llegar a ella.

El fork

Conisec recoge el desenlace sin respaldarlo: los fondos se recuperaron cambiando la historia de la cadena mediante un hard fork que una minoría sustancial rechazó. Esa discrepancia produjo dos cadenas que hoy existen ambas. Es la ilustración más nítida disponible de que «el código es la ley» describe una preferencia y no cómo se comportó realmente el sistema bajo presión.

Cronología

Solo se añade. Las correcciones se incorporan como su propia entrada fechada; las entradas anteriores nunca se reescriben.

  1. Se ejecuta el exploit y la Fundación Ethereum publica una actualización crítica que confirma la vulnerabilidad. Ethereum Foundation
  2. Un hard fork en el bloque 1.920.000 traslada los fondos sustraídos a un contrato de retirada. La cadena sin bifurcar continúa como Ethereum Classic. Ethereum Foundation

Qué comprobar

La Fundación Ethereum publicó en su momento una actualización crítica; esa entrada y la documentación posterior del hard fork son el registro autorizado.

Conisec no aloja ni enlaza herramientas de recuperación, revocación o «comprobación». Tras un incidente público, los atacantes siembran habitualmente ese tipo de enlaces usando los nombres de las publicaciones que cubren la noticia. Usa el canal oficial del propio proyecto afectado, enlazado más arriba, y nada más.

Fuentes

  1. Ethereum Foundation, CRITICAL UPDATE Re: DAO Vulnerability (17 Jun 2016)

No es asesoramiento. Esto es un resumen de hechos publicados, no asesoramiento jurídico, fiscal ni de seguridad. Verifícalo con las fuentes primarias enlazadas más arriba.

Última verificación por Conisec Staff.

Sigue explorando