Aller au contenu
Fondé MMXXVIVol. VI · № 273RSS
Blockchain Breaches

Archive des incidents de sécurité dans les cryptomonnaies — piratages, exploits, défaillances de ponts et rug pulls, documentés avec des preuves on-chain.

Dossier № 024Bug de smart contract

Delegatecall vers contrat malveillant de Furucombo

Les utilisateurs de Furucombo ont perdu 14 M$ après que l'attaquant a trompé le proxy pour delegatecaller une fausse implémentation Aave v2.

Date
Victime
Furucombo
Chaîne(s)
Statut
Fonds dérobés

Le 27 février 2021 à 16h47 UTC, le protocole DeFi de batching de transactions Furucombo a été exploité pour environ 14 millions de dollars — drainés non pas de sa propre trésorerie mais de chaque utilisateur ayant accordé des approvals de tokens au contrat proxy de Furucombo. L'attaquant a trompé le proxy de Furucombo en lui faisant croire qu'Aave v2 avait reçu une implémentation mise à jour, et a utilisé delegatecall pour exécuter du code contrôlé par l'attaquant avec les privilèges de chaque utilisateur.

Ce qui s'est passé

Furucombo permettait aux utilisateurs de batcher les opérations DeFi en une seule transaction — utile pour des choses comme « déposer sur Aave, puis swap sur Uniswap, puis fournir de la liquidité sur Curve, le tout atomiquement ». Pour ce faire, les utilisateurs accordaient des approvals de tokens au contrat proxy de Furucombo, souvent avec allowance infinie, pour que le proxy puisse déplacer leurs tokens pendant les opérations batchées.

Le proxy de Furucombo supportait les contrats cibles upgradeables pour les protocoles avec lesquels il s'intégrait. Quand un protocole upgradait son contrat d'implémentation, le proxy de Furucombo routait via une nouvelle adresse d'implémentation. Le bug : le proxy ne validait pas que la nouvelle « implémentation » était bien déployée par le protocole avec lequel il prétendait s'intégrer.

L'attaquant :

  1. A déployé un contrat malveillant — écrit pour ressembler à une mise à jour d'implémentation Aave v2.
  2. A trompé le proxy Furucombo pour qu'il route les appels liés à Aave via le contrat malveillant.
  3. A utilisé le delegatecall du proxy vers le contrat malveillant pour exécuter du code arbitraire dans le contexte du proxy — y compris des appels à transferFrom() contre le solde de tokens approuvé de chaque utilisateur.
  4. A drainé les soldes de chaque utilisateur détenant des approvals infinies vers Furucombo, raflant environ 14 M$ sur plusieurs tokens.

Conséquences

  • Furucombo a désautorisé les composants proxy concernés et recommandé aux utilisateurs affectés de révoquer toutes les approvals au proxy.
  • L'équipe a publié un post-mortem et livré un proxy repensé avec des allowlists strictes d'adresses d'implémentation.
  • Les fonds volés ont été blanchis via Tornado Cash ; aucune récupération publique.

Pourquoi c'est important

Furucombo est le cas canonique pour la classe de vulnérabilité « contrat malveillant via delegatecall ». Tout contrat qui détient des approvals utilisateurs et peut delegatecall vers des cibles influençables par l'attaquant est à une validation manquante d'être un drainage de wallet pour tous ses utilisateurs. Le même pattern est réapparu chez LI.FI (2024) et de nombreux autres agrégateurs basés sur les approvals.

La leçon plus profonde — soulignée à nouveau par Furucombo et chaque incident similaire — est que les approvals infinies vers des contrats upgradeables composent la confiance pour toujours. L'UX moderne des wallets (Revoke.cash, permits bornés dans le temps via EIP-2612, valeurs par défaut d'approvals bornées) existe toute comme réponse directe à la classe d'échec Furucombo.