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 № 186Attaque par flash loan

MigrateTroveZap de Prisma Finance

11 M$ drainés de l'assistant de migration Trove de Prisma : l'attaquant a contourné migrate() et appelé flashloan() directement, exigeant des excuses.

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

Le 28 mars 2024 à 11h25 UTC, le protocole stablecoin adossé aux LSD Prisma Finance a perdu environ 11,6 millions de dollars lorsqu'un attaquant a exploité le contrat assistant MigrateTroveZap — un utilitaire construit pour permettre aux utilisateurs de migrer leurs positions Trove entre versions de contrat en une seule transaction atomique.

Ce qui s'est passé

Le MigrateTroveZap de Prisma était conçu pour rationaliser les migrations des anciens contrats TroveManager vers les nouveaux. Le flux prévu :

  1. L'utilisateur appelle migrate() sur le Zap avec son ancienne position Trove.
  2. Le Zap prend un prêt flash de la dette en cours de l'utilisateur.
  3. Utilise les fonds du prêt flash pour fermer l'ancien Trove et récupérer la garantie.
  4. Ouvre un nouveau Trove avec la même garantie et dette dans le nouveau TroveManager.
  5. Utilise les fonds empruntés du nouveau Trove pour rembourser le prêt flash, le tout en une transaction.

Le Zap exposait à la fois le point d'entrée de haut niveau migrate() et la fonction réceptrice sous-jacente flashloan() que le fournisseur de prêts flash rappelait. Le récepteur était censé être déclenché uniquement lorsqu'appelé depuis migrate(), mais le récepteur ne validait pas qu'il avait été invoqué à travers le flux de migration.

L'attaquant :

  1. A appelé flashloan() directement avec des données d'entrée soigneusement forgées.
  2. A manipulé les paramètres de position pour que la garantie dans la « nouvelle position » soit différente de la garantie dans l'« ancienne position » d'un montant contrôlé.
  3. A empoché la différence pendant que la migration « se terminait » avec une comptabilité incohérente.

Perte nette : ~3 257 ETH (~11 M$) drainés des propriétaires de Trove sur plusieurs positions.

Conséquences

  • Prisma a mis en pause les contrats affectés et livré un Zap corrigé avec une validation appropriée de l'appelant.
  • L'attaquant s'est engagé dans un dialogue on-chain avec le déployeur Prisma, présentant l'exploit comme un « sauvetage white-hat » et exigeant des excuses publiques de l'équipe Prisma avant de libérer les fonds — une posture inhabituelle.
  • Plus de 2,5 M$ ont été envoyés à Tornado Cash pendant la négociation, sapant considérablement le cadrage white-hat.
  • Une restitution partielle a eu lieu via un accord on-chain ; la majeure partie de la perte n'a jamais été récupérée.

Pourquoi c'est important

L'incident Prisma illustre un schéma DeFi récurrent : les fonctions de callback de prêt flash font partie de la frontière de confiance. Si un contrat expose un callback que tout fournisseur de prêt flash peut déclencher, ce callback doit valider son propre appelant et contexte — pas seulement faire confiance au fait que le point d'entrée légitime a été utilisé. La même classe de bug se répète chez chaque protocole qui intègre des prêts flash via des hooks de style callback sans vérifications explicites de contexte d'appelant.

L'épisode Prisma est également un exemple notable de posture d'attaquant pendant la négociation — la demande publique d'excuses était assez inhabituelle pour être discutée largement, mais le mouvement parallèle de fonds vers Tornado Cash a clairement montré que le cadrage « white-hat » était opportuniste.

Sources & preuves on-chain

  1. [01]hackmd.iohttps://hackmd.io/@PrismaRisk/PostMortem0328
  2. [02]blog.cube3.aihttps://blog.cube3.ai/2024/03/28/prisma-finance-hack-crypto-exploit-analysis-postmortem-11-million/
  3. [03]theblock.cohttps://www.theblock.co/post/285776/prisma-finance-hacker-defends-exploit-demands-public-apology

Dépôts liés