Saltar al contenido
Est. MMXXVIVol. VI · № 273RSS
Blockchain Breaches

Archivo de incidentes de seguridad en criptomonedas — hackeos, exploits, fallos de puentes y rug pulls, documentados con evidencia on-chain.

Expediente № 026Fallo de smart contract

Init sin inicializar en Crowdpool de DODO

Los Crowdpools V2 de DODO perdieron 3,8 M$ al re-llamarse init() con un token falso; sin guard de reinicialización. Bots MEV adelantaron ~1,9 M$.

Fecha
Víctima
DODO
Estado
Parcialmente recuperado

El 9 de marzo de 2021, el exchange descentralizado DODO sufrió un exploit que afectó a cuatro Crowdpools V2: pérdidas iniciales totales de en torno a 3,8 millones de dólares, de los cuales aproximadamente 1,9 M$ fueron adelantados (front-run) por bots de arbitraje MEV (algunos de los cuales devolvieron fondos). La causa raíz: la función init() del Crowdpool podía llamarse de nuevo sobre pools ya inicializados, sin guard de reinicialización.

Qué ocurrió

Los Crowdpools V2 de DODO eran pools de liquidez inicializados mediante una función init() que establecía los parámetros del pool, incluidos los tokens que comerciaba y la relación de precio entre ellos. Como es estándar para funciones de inicialización, init() debía llamarse exactamente una vez, en la creación del pool.

El fallo fatal: el contrato Crowdpool de DODO no protegía contra una segunda llamada a init(). Un atacante podía:

  1. Llamar de nuevo a init() en un Crowdpool existente y financiado, pasando como uno de los activos del pool un token falso que controlaba y estableciendo una relación de precio arbitraria.
  2. El pool ahora creía que estaba comerciando el activo real contra el token falso sin valor del atacante a una tasa elegida por él.
  3. Usar un préstamo flash para "comerciar" el token falso dentro del pool, extrayendo los activos reales del pool a la tasa manipulada.
  4. Repetir en los cuatro Crowdpools afectados.

El total extraíble rondaba los 3,8 M$. Pero las transacciones del atacante eran visibles en el mempool público, y bots de arbitraje MEV adelantaron aproximadamente 1,9 M$ del exploit, repitiendo el ataque para extraer fondos antes de que el atacante original pudiera. Algunos de estos bots de front-running eran operados por sombreros blancos que devolvieron los fondos; otros se los quedaron.

Consecuencias

  • DODO pausó los Crowdpools afectados y desplegó un contrato corregido con guards adecuados de reinicialización.
  • DODO publicó un post de resolución y trabajó para recuperar y devolver fondos adelantados; una porción significativa se recuperó mediante operadores de bots MEV que devolvieron fondos y mediante negociación.
  • El AMM principal del protocolo no se vio afectado; solo la función Crowdpool.

Por qué importa

El incidente de DODO es uno de los exploits de inicializador re-invocable más tempranos de la historia de DeFi, anterior al más conocido Audius (2022) y continuando el linaje de Parity Multisig (2017). La clase de bug —una función init() o initialize() sin guard contra ser llamada dos veces— es una de las más documentadas en Solidity, y una de las más repetidas.

Las lecciones estructurales:

  1. Cada función de inicialización necesita un guard explícito de una sola ejecución: el modificador initializer de OpenZeppelin, un booleano initialized o equivalente. El patrón es una línea de código.

  2. El mempool público convierte cada exploit en una carrera. El incidente de DODO es una de las demostraciones más tempranas y claras de que los bots MEV adelantándose a un atacante son ahora parte de la dinámica del incidente: a veces para peor (los bots se quedan los fondos), a veces para mejor (bots de sombrero blanco los devuelven). El protocolo explotado a menudo tiene el menor control sobre dónde acaban los fondos.

  3. El aislamiento a nivel de función limita el radio de impacto. El AMM principal de DODO no se vio afectado porque el bug estaba confinado a la función Crowdpool. Los protocolos que aíslan nuevas funciones detrás de contratos separados (en lugar de expandir contratos centrales monolíticos) contienen el daño cuando una nueva función se lanza con un bug.

DODO se recuperó y continuó como DEX relevante: uno de los relativamente pocos protocolos de la ola de exploits de 2021 que sobrevivió a su incidente con la reputación en gran parte intacta, en parte por el proceso transparente de resolución y la fortuita (si caótica) recuperación parcial por bots MEV.

Fuentes y evidencia on-chain

  1. [01]halborn.comhttps://halborn.com/explained-the-dodo-dex-hack-march-2021/
  2. [02]coindesk.comhttps://www.coindesk.com/tech/2021/03/09/dodo-dex-drained-of-38m-in-defi-exploit
  3. [03]dodoexchange.medium.comhttps://dodoexchange.medium.com/dodo-incident-which-affected-4-crowdpools-and-our-resolution-9da0298c2b65

Registros relacionados