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 № 246Fallo de smart contract

Drenaje por redondeo en Bunni DEX

Un error de redondeo en la función withdraw de Bunni DEX drenó $8,4M en Ethereum y Unichain tras juzgar mal los saldos ociosos. Protocolo cerrado.

Fecha
Víctima
Bunni
Estado
Fondos robados

El 2 de septiembre de 2025, el DEX basado en Uniswap v4 Bunni fue explotado por aproximadamente 8,4 millones de dólares en Ethereum y Unichain. El bug fue un error de dirección de redondeo en la función withdraw: los desarrolladores habían redondeado hacia abajo creyendo que esto haría que los saldos ociosos aumentaran, pero la matemática funcionaba al revés, permitiendo a un atacante retirar tokens desproporcionados mientras quemaba menos liquidez de la que debería. Bunni cerró permanentemente dos meses después, citando costes de remediación de 6-7 cifras para relanzar.

Qué ocurrió

Bunni era un DEX nativo de Uniswap v4 con una capa personalizada de gestión de liquidez diseñada para optimizar la eficiencia del capital mediante rebalanceo automatizado. La función withdraw del protocolo calculaba cuánta liquidez subyacente quemar por unidad de output retirado — un cálculo que involucraba división entera con una dirección de redondeo sobre la que los desarrolladores habían razonado durante el diseño.

El fallo fatal: el razonamiento de la dirección de redondeo estaba invertido. Los desarrolladores habían concluido que redondear un valor intermedio clave hacia abajo haría que el "saldo ocioso" del protocolo aumentara (una propiedad conservadora deseable). En la práctica, la matemática funcionaba al revés — redondear hacia abajo de hecho hacía que el cálculo del saldo ocioso disminuyera, dejando más valor disponible para que el retirador extrajera.

El ataque:

  1. Pidió tokens prestados por flash para financiar capital operativo.
  2. Ejecutó swaps cuidadosamente forjados a través del pool weETH/ETH de Bunni en Unichain y del pool USDC/USDT en Ethereum — preposicionando el estado del pool.
  3. Activó la función withdraw con parámetros que maximizaban el impacto del error de redondeo.
  4. Retiró significativamente más tokens de los que la liquidez quemada debería haber permitido.
  5. Repitió en ambas cadenas, extrayendo aproximadamente $8,4M en total.

Consecuencias

  • Bunni pausó los contratos inteligentes en cuestión de horas tras la detección.
  • El equipo inicialmente anunció planes de recuperación y remediación del protocolo.
  • Tras dos meses de evaluación, Bunni anunció públicamente el cierre permanente, citando:
    • Costes de remediación de "6-7 cifras" para auditorías y monitorización requeridos para relanzar de manera segura.
    • Recursos insuficientes para absorber la pérdida mientras se financia el esfuerzo de reconstrucción.
  • El equipo liberó como open source los contratos v2 bajo licencia MIT como contribución de despedida.
  • Los fondos robados fueron blanqueados; sin recuperación pública.

Por qué importa

El incidente de Bunni es una de las demostraciones más claras de cómo una sola inversión de dirección de redondeo puede ser una primitiva de exploit completamente cargada. Los desarrolladores habían razonado explícitamente sobre el comportamiento de redondeo — simplemente razonaron incorrectamente. La auditoría (Bunni había sido auditado) no detectó la inversión, presumiblemente porque los casos de prueba no ejercían las condiciones de input específicas donde la dirección del redondeo importaba.

Las lecciones estructurales:

  1. El razonamiento sobre dirección de redondeo es excepcionalmente fácil de equivocarse en matemáticas de protocolo. La combinación de "intuición sobre lo que debería pasar" + "división entera de Solidity" + "cálculos complejos multi-paso" produce bugs que pasan la revisión por personas que creen entender el código.

  2. Las pruebas basadas en propiedades (Echidna, invariantes de Foundry, Halmos) detectan bugs de dirección de redondeo de forma mucho más fiable que los tests unitarios basados en ejemplos, porque las pruebas de propiedades exploran el espacio de input buscando violaciones de invariantes en lugar de comprobar outputs esperados específicos.

  3. El relanzamiento post-exploit es económicamente inviable para muchos protocolos pequeños. El cálculo del equipo de Bunni — coste de remediación de 6-7 cifras vs. recuperación incierta de confianza del usuario — es el mismo cálculo que destruyó Polter Finance, varios forks de Compound v2 y muchos otros proyectos medianos. La asimetría entre el coste de prevenir un exploit (auditorías + infraestructura de pruebas: quizás $200K) y el coste de recuperarse de uno (remediación + auditorías + monitorización + reconstrucción de confianza del usuario: $1M+ si el proyecto sobrevive del todo) sigue desplazando la frontera racional hacia inversión pre-lanzamiento más conservadora.

La liberación open-source de los contratos v2 de Bunni como gesto de despedida es inusual y digna de mención — la mayoría de los protocolos que cierran simplemente dejan de mantener su código. La release con licencia MIT da a otros constructores de Uniswap v4 la oportunidad de aprender del diseño de Bunni (y evitar sus bugs específicos) sin tener que construir las mismas primitivas desde cero.

Fuentes y evidencia on-chain

  1. [01]halborn.comhttps://www.halborn.com/blog/post/explained-the-bunni-hack-september-2025
  2. [02]coindesk.comhttps://www.coindesk.com/web3/2025/09/02/bunni-dex-halts-smart-contracts-after-exploit-drains-usd8-4m-across-chains
  3. [03]coindesk.comhttps://www.coindesk.com/business/2025/10/23/bunni-dex-shuts-down-cites-recovery-costs-after-usd8-4m-exploit

Registros relacionados