Bug matemático de migración en Uranium Finance
$57,2M extraídos de Uranium Finance por una constante mal puesta en la migración v2.1 (1.000.000 vs 10.000) que permitió swap de 1 wei por 98% de los pools.
- Fecha
- Víctima
- Uranium Finance
- Cadena(s)
- Estado
- Fondos robados
El 28 de abril de 2021, el AMM de BSC Uranium Finance fue drenado por aproximadamente $57,2 millones en 26 pares de mercado diferentes durante el evento de migración de tokens v2.1 del protocolo. El exploit fue una única constante mal puesta en la función de swap — 1000**2 (= 1.000.000) donde el código debería haber usado 10.000. La discrepancia de factor 100 permitió al atacante drenar pools enteros depositando un wei de entrada.
Qué ocurrió
Uranium Finance era un fork de Uniswap v2 en BNB Chain. Como parte de una actualización v2.1, el equipo modificó la comprobación del invariante de producto constante de la función de swap para soportar un mecanismo de comisión diferente. El código original de Uniswap usaba una constante de escalado específica en su "comprobación de sanidad" para el nuevo saldo del pool tras un swap — una comprobación que asegura que el swap respete la regla de producto constante x*y = k.
En el código real de Uniswap, la constante coincide con el factor de escalado usado en la matemática de ajuste de saldo. En la versión modificada de Uranium, el equipo escaló el ajuste de saldo por 10.000 (una estructura de comisión diferente) pero dejó la constante de la comprobación de sanidad en 1.000.000 (el valor sin modificar de Uniswap).
Debido a que la comprobación de sanidad esperaba un valor 100× mayor que el que la matemática real del saldo producía, la comprobación pasaba para swaps que violaban el invariante hasta en 100×. En términos prácticos: un atacante podía enviar 1 wei de un token de entrada y el pool le permitiría retirar hasta el 98% del saldo del token de salida.
El atacante recorrió los 26 pares de mercado de Uranium, drenando ETH, WBNB, BUSD, USDT, BTCB y una larga cola de otros activos. La pérdida total se asentó en ~$57,2M.
Consecuencias
- Uranium Finance cerró permanentemente en cuestión de días tras el incidente.
- Los fondos fueron puenteados de BSC a Ethereum, intercambiados a ETH, y enviados a Tornado Cash.
- En febrero de 2025, las autoridades estadounidenses incautaron aproximadamente $31M de los fondos originales robados en una acción coordinada de decomiso, tras años de rastreo forense.
- Una acusación de un individuo no identificado siguió poco después de la incautación.
Por qué importa
Uranium Finance es uno de los casos más limpios de por qué forkear una base de código sensible a la seguridad requiere re-auditar cada línea modificada. La función swap de Uniswap v2 ha sido auditada decenas de veces por los mejores revisores Solidity del mundo; sus matemáticas son correctas. La versión modificada de Uranium había sido tocada por un equipo pequeño ajustando comisiones — y la modificación rompió el invariante.
El patrón recurre cada vez que un proyecto forkea un AMM probado en batalla y cambia "solo una pequeña cosa":
- Uranium (2021) — modificación de mecanismo de comisión rompió el invariante de swap.
- Sonne Finance (2024) — el orden de despliegue del fork de Compound v2 rompió la inicialización del mercado.
- Hundred Finance (2023) — la matemática de redención del fork de Compound v2 se rompió bajo ataque de donación.
- Velocore (2024) — CPMM estilo Balancer con lógica de comisión modificada rompió las protecciones contra desbordamiento.
Cada fork hereda la seguridad bien entendida del upstream; cada modificación crea una nueva superficie de ataque sin auditar. El coste de la lección — los $57M de Uranium — se paga cada vez que un equipo subestima esta asimetría.
Fuentes y evidencia on-chain
- [01]halborn.comhttps://www.halborn.com/blog/post/explained-the-uranium-finance-hack-april-2021
- [02]coindesk.comhttps://www.coindesk.com/markets/2021/04/28/binance-chain-defi-exchange-uranium-finance-loses-50m-in-exploit
- [03]rekt.newshttps://rekt.news/uranium-rekt