Reentrada en Origin Dollar (OUSD)
$7,7 M drenados de la bóveda OUSD dos meses tras el lanzamiento vía reentrada con stablecoin falsa, introducida cuando un refactor eliminó una comprobación.
- Fecha
- Víctima
- Origin Protocol
- Cadena(s)
- Estado
- Fondos robados
El 17 de noviembre de 2020 a las 00:47 UTC, la bóveda de la stablecoin Origin Dollar (OUSD) fue drenada por aproximadamente $7,7 millones — 11.809 ETH y 2.249.821 DAI — menos de dos meses después del lanzamiento de OUSD. El exploit fue un ataque de reentrada de libro de texto posible gracias a una sola comprobación de validación faltante que había sido silenciosamente eliminada durante un refactor para ahorrar gas.
Qué ocurrió
OUSD permitía a los usuarios mintear la stablecoin depositando stablecoins subyacentes aceptadas (USDC, USDT, DAI). Las rutas mint() y mintMultiple() de la bóveda verificaban que el token depositado fuera un subyacente en lista blanca antes de llamar a transferFrom() sobre él — previniendo exactamente el tipo de reentrada que este ataque usaría después.
Un refactor posterior para ahorrar gas copió la lógica de mintMultiple() de la función mint() de un solo token pero omitió la comprobación de validación para la lista blanca de tokens subyacentes. El bug quedó sin detectar a través del proceso de auditoría y lanzamiento.
El ataque:
- El atacante creó un contrato "stablecoin" falso que controlaba completamente.
- Llamó a
mintMultiple()pasando tanto una stablecoin real como la stablecoin falsa como entradas. - La bóveda aceptó el contrato falso (sin verificación de lista blanca), y llamó a
transferFrom()sobre él durante la fase de depósito. - El
transferFrom()del contrato falso reingresó en la bóveda antes de que el primer minteo hubiera terminado de actualizar el estado de suministro — desencadenando un evento de rebase que recalculaba los saldos OUSD usando estado a mitad de minteo. - El rebase favoreció masivamente las tenencias preexistentes de OUSD del atacante, otorgándoles una participación desproporcionada de los activos subyacentes de la bóveda al momento de la retirada.
Total drenado: ~$7,7 M, blanqueados a través de Tornado Cash y renBTC.
Consecuencias
- Origin Protocol reconoció públicamente la pérdida el mismo día y anunció el reembolso completo de los usuarios afectados desde la propia tesorería del proyecto y fondos personales del equipo.
- Los contratos de OUSD se rediseñaron con protección integral contra reentrada en cada función que muta estado y validación explícita de lista blanca en cada interacción con token subyacente.
- Los fondos nunca se recuperaron on-chain.
Por qué importa
El incidente de Origin Dollar es uno de los casos más claros de por qué el código auditado puede desplegarse con bugs que eluden la auditoría. El mint() original tenía la comprobación de validación; la auditoría revisó mint(). El refactor post-auditoría copió la lógica pero eliminó la comprobación, y no hubo segunda auditoría antes del lanzamiento. La clase de fallo — ediciones posteriores a código auditado sin re-auditoría — ha sido responsable de varias pérdidas mayores desde entonces, incluyendo Fei/Rari.
La respuesta del equipo — reembolso completo desde fondos del equipo — también fue inusualmente rápida y completa para la era DeFi de 2020; sentó un precedente que otros protocolos luego siguieron (y muchos no).
Fuentes y evidencia on-chain
- [01]medium.comhttps://medium.com/originprotocol/urgent-ousd-has-hacked-and-there-has-been-a-loss-of-funds-7b8c4a7d534c
- [02]peckshield.medium.comhttps://peckshield.medium.com/origin-dollar-incident-root-cause-analysis-f27e11988c90
- [03]medium.comhttps://medium.com/originprotocol/what-weve-changed-since-the-ousd-attack-5894f2bd77cf