Prisma Finance MigrateTroveZap
11 Mio. $ aus Prismas Trove-Migrations-Helper abgezogen, nachdem der Angreifer migrate() umging und flashloan() direkt aufrief; forderte Entschuldigung.
- Datum
- Opfer
- Prisma Finance
- Chain(s)
- Status
- Mittel entwendet
Am 28. März 2024 um 11:25 UTC verlor das LSD-gedeckte Stablecoin-Protokoll Prisma Finance etwa 11,6 Millionen $, als ein Angreifer den MigrateTroveZap-Helper-Vertrag ausnutzte — ein Hilfsmittel, das gebaut wurde, damit Nutzer ihre Trove-Positionen zwischen Vertragsversionen in einer einzigen atomaren Transaktion migrieren können.
Was geschah
Prismas MigrateTroveZap war darauf ausgelegt, Migrationen von alten TroveManager-Verträgen zu neuen zu rationalisieren. Der beabsichtigte Ablauf:
- Nutzer ruft
migrate()auf dem Zap mit seiner alten Trove-Position auf. - Der Zap nimmt einen Flash-Kredit über die offene Schuld des Nutzers auf.
- Verwendet die Flash-Kredit-Mittel, um den alten Trove zu schließen und Sicherheiten zurückzuerlangen.
- Öffnet einen neuen Trove mit derselben Sicherheit und Schuld im neuen TroveManager.
- Verwendet die geliehenen Mittel des neuen Trove, um den Flash-Kredit zurückzuzahlen, alles in einer Transaktion.
Der Zap stellte sowohl den High-Level-migrate()-Einstiegspunkt als auch die zugrundeliegende flashloan()-Empfängerfunktion bereit, die der Flash-Kredit-Anbieter zurückrief. Der Empfänger sollte nur ausgelöst werden, wenn er innerhalb von migrate() aufgerufen wurde, aber der Empfänger validierte nicht, dass er über den Migrationsfluss aufgerufen worden war.
Der Angreifer:
- Rief
flashloan()direkt mit sorgfältig gestalteten Eingabedaten auf. - Manipulierte die Positionsparameter so, dass die Sicherheit in der "neuen Position" sich um einen kontrollierten Betrag von der Sicherheit in der "alten Position" unterschied.
- Steckte die Differenz ein, als die Migration mit nicht übereinstimmender Buchhaltung "abgeschlossen" wurde.
Nettoverlust: ~3.257 ETH (~11 Mio. $) aus Trove-Besitzern über mehrere Positionen abgezogen.
Folgen
- Prisma pausierte betroffene Verträge und lieferte einen behobenen Zap mit ordnungsgemäßer Aufrufer-Validierung.
- Der Angreifer beteiligte sich an On-Chain-Dialog mit dem Prisma-Deployer, rahmte den Exploit als "White-Hat-Rettung" ein und forderte eine öffentliche Entschuldigung des Prisma-Teams, bevor er Mittel freigab — eine ungewöhnliche Haltung.
- Über 2,5 Mio. $ wurden während der Verhandlung an Tornado Cash gesendet, was das White-Hat-Framing erheblich untergrub.
- Teilweise Restitution erfolgte über On-Chain-Vereinbarung; der Großteil des Verlusts wurde nie wiederhergestellt.
Warum es wichtig ist
Prismas Vorfall illustriert ein wiederkehrendes DeFi-Muster: Flash-Kredit-Callback-Funktionen sind Teil der Vertrauensgrenze. Wenn ein Vertrag einen Callback exponiert, den jeder Flash-Kredit-Anbieter auslösen kann, muss dieser Callback seinen eigenen Aufrufer und Kontext validieren — nicht nur darauf vertrauen, dass der legitime Einstiegspunkt verwendet wurde. Dieselbe Bug-Klasse wiederholt sich bei jedem Protokoll, das Flash-Kredite über Callback-artige Hooks ohne explizite Aufrufer-Kontext-Prüfungen integriert.
Die Prisma-Episode ist auch ein bemerkenswertes Beispiel für Angreifer-Posing während Verhandlung — die öffentliche Forderung nach einer Entschuldigung war ungewöhnlich genug, um weit diskutiert zu werden, aber die parallele Bewegung von Mitteln zu Tornado Cash machte klar, dass das "White-Hat"-Framing opportunistisch war.
Quellen & On-Chain-Belege
- [01]hackmd.iohttps://hackmd.io/@PrismaRisk/PostMortem0328
- [02]blog.cube3.aihttps://blog.cube3.ai/2024/03/28/prisma-finance-hack-crypto-exploit-analysis-postmortem-11-million/
- [03]theblock.cohttps://www.theblock.co/post/285776/prisma-finance-hacker-defends-exploit-demands-public-apology