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 № 069Réentrance

Réentrance 5x de Grim Finance

Les vaults Grim Finance sur Fantom ont perdu 30 M$ via une réentrance en 5 boucles dans depositFor. La TVL est passée de 98,9 M$ à 4,2 M$.

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

Le 19 décembre 2021, l'agrégateur de rendement basé sur Fantom Grim Finance a perdu environ 30 millions de dollars dans une attaque de réentrance en 5 boucles sur la fonction depositFor() de son vault. Au moment où l'équipe a mis le protocole en pause, la TVL de Grim s'était effondrée de 98,9 M$ à 4,2 M$ — une baisse de 96 %.

Ce qui s'est passé

Les vaults de Grim Finance utilisaient une fonction depositFor() pour créditer un utilisateur de shares de vault en échange de son dépôt. La fonction suivait le pattern typique : tirer les tokens de l'utilisateur via transferFrom, puis minter des shares au utilisateur basées sur le calcul de share price actuel.

La faille fatale : depositFor() manquait d'une protection appropriée contre la réentrance. Quand le transferFrom du token déposé déclenchait un callback (comme cela peut se produire avec les tokens ERC-777 ou fee-on-transfer, ou — plus directement — quand l'attaquant contrôlait entièrement le contrat du « token » déposé), le callback de l'attaquant pouvait ré-entrer dans depositFor() de Grim pendant que le premier appel était encore en cours d'exécution.

L'attaque :

  1. A déployé un contrat « token » malveillant dont la fonction transferFrom rappelait dans depositFor() de Grim.
  2. A appelé depositFor() de Grim avec le token malveillant.
  3. Le premier appel a lu le share price actuel et s'est préparé à minter des shares.
  4. Avant que le mint du premier appel ne se termine, le callback a ré-entré dans depositFor() — et a lu le même share price pré-mint, se préparant à minter plus de shares contre ce qui aurait dû être le même dépôt.
  5. Boucle 5 fois avant que la pile d'appels ne se déroule.
  6. Reparti avec 5x l'allocation légitime de shares pour un seul dépôt sous-jacent.

Drainage net : ~30 M$ sur les vaults Grim affectés, libellés en BTC, ETH, FTM, USDC et autres actifs.

Conséquences

  • Grim a suspendu toutes les opérations de vault en quelques heures.
  • L'équipe a contacté Circle (émetteur USDC), AnySwap et MakerDAO pour geler les actifs liés aux adresses de l'attaquant.
  • La TVL est tombée de 98,9 M$ à 4,2 M$ — une baisse de 96 % alimentée à la fois par le vol réalisé et les retraits paniqués des déposants des vaults non affectés.
  • Le protocole n'a jamais retrouvé sa place pré-incident parmi les agrégateurs de rendement Fantom.
  • Les fonds volés ont été blanchis via des ponts cross-chain et des mixers ; aucune récupération publique.

Pourquoi c'est important

Grim Finance fait partie d'une série récurrente d'incidents de réentrance sur contrats de vault qui se concentrent autour des agrégateurs de rendement forkant les mêmes patterns de base. La classe de bug — « le transfert de token externe dans le chemin de dépôt manque de garde de réentrance » — se répète sur :

  • Pickle Finance (nov. 2020) — injection de faux Jar via swap.
  • Cream Finance (août 2021) — réentrance ERC-777 tokensReceived.
  • Grim Finance (déc. 2021) — réentrance depositFor en 5 boucles.
  • Visor Finance (déc. 2021) — réentrance delegateTransferERC20.
  • Fei/Rari (avr. 2022) — exitMarket laissé non protégé.
  • Penpie (sept. 2024) — réentrance de plugin Pendle.

Le pattern défensif — le ReentrancyGuard d'OpenZeppelin appliqué à chaque chemin d'appel externe modifiant l'état, sans exceptions — est bien documenté et librement disponible. Chaque protocole qui livre un chemin de dépôt sans la garde est à un contrat de token soigneusement construit près de l'issue de Grim Finance. Le coût de 30 M$ est les frais récurrents pour avoir sauté la garde.

Sources & preuves on-chain

  1. [01]coindesk.comhttps://www.coindesk.com/tech/2021/12/20/fantom-defi-project-grim-finance-exploited-for-30m
  2. [02]cryptobriefing.comhttps://cryptobriefing.com/fantom-defi-project-grim-finance-suffers-30m-hack/
  3. [03]decrypt.cohttps://decrypt.co/88727/grim-finance-hacked-30-million-fantom-tokens

Dépôts liés