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

Delegatecall a contrato malicioso en Furucombo

Usuarios de Furucombo perdieron 14 M$ tras engañar al proxy para hacer delegatecall a una 'implementación Aave v2' maliciosa que barrió cada saldo aprobado.

Fecha
Víctima
Furucombo
Cadena(s)
Estado
Fondos robados

El 27 de febrero de 2021 a las 16:47 UTC, el protocolo DeFi de batching de transacciones Furucombo fue explotado por aproximadamente 14 millones de dólares, drenados no de su propia tesorería sino de cada usuario que había concedido aprobaciones de tokens al contrato proxy de Furucombo. El atacante engañó al proxy de Furucombo haciéndole creer que Aave v2 había recibido una implementación actualizada, y usó delegatecall para ejecutar código controlado por el atacante con los privilegios de cada usuario.

Qué ocurrió

Furucombo permitía a los usuarios agrupar operaciones DeFi en una sola transacción —útil para cosas como "depositar en Aave, luego swapear en Uniswap, luego proveer liquidez en Curve, todo atómicamente"—. Para hacerlo, los usuarios concedían al contrato proxy de Furucombo aprobaciones de tokens, a menudo con allowance infinito, para que el proxy pudiera mover sus tokens durante las operaciones agrupadas.

El proxy de Furucombo soportaba contratos de destino actualizables para los protocolos con los que se integraba. Cuando un protocolo actualizaba su contrato de implementación, el proxy de Furucombo enrutaba a una nueva dirección de implementación. El bug: el proxy no validaba que la nueva "implementación" fuera realmente desplegada por el protocolo con el que afirmaba integrarse.

El atacante:

  1. Desplegó un contrato malicioso, escrito para parecer una actualización de implementación de Aave v2.
  2. Engañó al proxy de Furucombo para enrutar llamadas relacionadas con Aave a través del contrato malicioso.
  3. Usó el delegatecall del proxy al contrato malicioso para ejecutar código arbitrario en el contexto del proxy, incluyendo llamadas a transferFrom() contra el saldo de tokens aprobado de cada usuario.
  4. Drenó los saldos de cada usuario que tuviera aprobaciones infinitas a Furucombo, barriendo ~14 M$ en varios tokens.

Consecuencias

  • Furucombo desautorizó los componentes proxy relevantes y recomendó a los usuarios afectados revocar todas las aprobaciones al proxy.
  • El equipo publicó un análisis post-mortem y lanzó un proxy rediseñado con allowlists estrictas de direcciones de implementación.
  • Los fondos robados fueron lavados mediante Tornado Cash; sin recuperación pública.

Por qué importa

Furucombo es el caso canónico de la clase de vulnerabilidad "contrato malicioso vía delegatecall". Cualquier contrato que retenga aprobaciones de usuarios y pueda hacer delegatecall a destinos influenciables por el atacante está a una validación ausente de ser un drenador de wallets para todos sus usuarios. El mismo patrón reapareció en LI.FI (2024) y muchos otros agregadores basados en aprobaciones.

La lección más profunda —reenfatizada por Furucombo y todo incidente similar— es que las aprobaciones infinitas a contratos actualizables componen confianza para siempre. La UX moderna de wallets (Revoke.cash, permits acotados en el tiempo vía EIP-2612, valores por defecto de aprobaciones acotadas) existe toda como respuesta directa a la clase de fallo Furucombo.