#2: Euler Finance Vorfall: Größter Hack 2023

Euler Finance Vorfall: Der größte Hack 2023

#2: Euler Finance Vorfall: Größter Hack 2023

Am 13. März 2023 stellte unser System fest, dass der Kreditpool von Euler Finance einem Flash-Loan-Angriff zum Opfer gefallen war, was zu Verlusten von 197 Millionen US-Dollar führte. Zuerst informierten wir die Community und lieferten dann eine Analyse zur Ermittlung der Grundursache.

Die Grundursache dieses Vorfalls ist das Fehlen einer Solvenzprüfung in der Funktion donateToReserves(). Genauer gesagt, der anfällige Vertrag bot Benutzern die Möglichkeit, ihre Sicherheiten dem Protokoll zu spenden, ohne zu prüfen, ob die Position des Benutzers solvent war. Schlimmer noch, um sich von dieser schlechten Position zu befreien, bot das Protokoll Liquidatoren einen großen Rabatt an, damit sie weniger Schulden begleichen mussten, um diese Position zu liquidieren. Der Angreifer erstellte eine große Position und machte diese Position durch Ausnutzung dieser Funktionalität zahlungsunfähig. Dann konnte er seine Sicherheiten mit einem Rabatt kaufen, um Profit zu machen.

Hintergrund

Überblick über Euler Finance

Euler Finance ist ein Kreditprotokoll auf Ethereum, das es Benutzern ermöglicht, bestimmte Token zu verleihen und auszuleihen. Wenn Kreditgeber in den Liquiditätspool von Euler einzahlen, wird ihnen eine entsprechende Menge an ETokens (zinsbringende ERC20-Token) geprägt und zugesandt. Diese ETokens können gegen ihre hinterlegten Basiswerte eingetauscht werden.

Auf der anderen Seite erhalten Kreditnehmer, die Liquidität aufnehmen, DTokens. Diese DTokens sind ERC20-konform und verhindern, dass Inhaber sie eigenständig verbrennen. Insbesondere können sie an jeden gesendet werden, anstatt dass sie an eine bestimmte Person gesendet werden können, aber die Annahme erfordert eine Genehmigung. Bezüglich des Basiswerts sind die Kreditnehmer für die Zahlung von Zinsen auf ihre Kredite verantwortlich, und ein Teil dieser Zinsen wird zur Deckung von uneinbringlichen Forderungen im Protokoll verwendet.

Das Hebelkreditgeschäft von Euler Finance (auch bekannt als Selbstkredit) und die Mechanismen zur sanften Liquidation sind zwei Schlüsselkonzepte, die uns helfen, die Ursache dieses Angriffs besser zu verstehen.

Hebelkredit

Euler Finance bietet eine Funktion für Hebelkredite, die es Benutzern ermöglicht, eine rekursive Kreditstrategie zu simulieren. Einfach ausgedrückt können Benutzer Sicherheiten hinterlegen und ETokens prägen, die dann als Sicherheit verwendet werden können, um weitere ETokens zu leihen. Der Vertrag wird auch eine entsprechende Menge an dTokens als Schulden-Token prägen. Die Gesundheit der Position des Benutzers wird basierend auf den Werten der ETokens und dTokens berechnet. Laut der Dokumentation von Euler Finance können Benutzer bis zu 19x Hebel nutzen. Die Hebelkreditfunktion spielte eine entscheidende Rolle bei diesem Vorfall. Ohne die Hilfe dieser Funktion hätte der Angreifer keinen Gewinn erzielen können. Durch Hebelkredite verstärkte der Angreifer die Größe seiner Position auf fast das 11-fache der ursprünglich aus dem Flash-Loan erhaltenen Gelder.

Sanfte Liquidation

Wie im Whitepaper von Euler Finance dargelegt, ermöglicht der Mechanismus der sanften Liquidation den Liquidatoren, der liquidierten Partei flexibel bei der Rückzahlung ihrer Schulden zu helfen, anstatt durch einen festen Koeffizienten für die Liquidation eingeschränkt zu sein, wie er von Protokollen wie Compound und Aave übernommen wird. Sanfte Liquidation bedeutet, dass je niedriger die Gesundheit einer Position ist, desto mehr Sicherheiten für die Liquidation in Frage kommen – bis zu 75% im Falle von uneinbringlichen Forderungen, basierend auf den Daten dieses Vorfalls. Die Liquidation von stark rabattierten Sicherheiten ermöglichte es dem Angreifer daher, den Flash-Loan zu begleichen und Gewinne zu erzielen.

Schwachstellenanalyse

Die Hauptschwachstelle, nämlich das Fehlen einer Solvenzprüfung, liegt in der Funktion donateToReserves(), die von Benutzern verwendet wird, um ETokens aus ihren Positionen als Spenden an die Reserve des Protokolls zu übertragen. Für normale Benutzer gibt es in der Regel keinen Anreiz oder keine Motivation, eine solche Aktion durchzuführen. Tatsächlich liegt die Schwachstelle darin, dass die Funktion donateToReserves() beim Übertragen von ETokens aus Benutzerpositionen keine Gesundheitsprüfung durchführt. Dies ermöglicht es Angreifern, ETokens aus der durch Hebelkredite geschaffenen großen Position direkt zu spenden, wodurch der Gesundheitsfaktor der Position unter 100 % fällt und uneinbringliche Forderungen entstehen.

Gemäß dem Design verwendet Euler Finance einen dynamischen Schließungsfaktor zur "sanften Liquidation" von Positionen. Kurz gesagt, je weniger gesund eine Position ist, desto höher ist der Anteil der Sicherheiten in dieser Position, der liquidiert werden kann. Im Falle von uneinbringlichen Forderungen kann der Liquidationsprozentsatz bis zu 75 % der Sicherheiten innerhalb der Position betragen (wie anhand der tatsächlichen Angriffstransaktion berechnet). Infolgedessen ermöglicht die beträchtliche Menge an rabattierten Sicherheiten, die liquidiert werden, dem Angreifer, den Flash-Loan zurückzuzahlen und Gewinne zu erzielen.

Angriffsanalyse

Es gibt mehrere Angriffstransaktionen, die auf verschiedene Pools abzielen:

  • 0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d (DAI)
  • 0x71a908be0bef6174bccc3d493becdfd28395d8898e355d451cb52f7bac38617 (WBTC)
  • 0x62bd3d31a7b75c098ccf28bc4d4af8c4a191b4b9e451fab4232258079e8b18c4 (wstETH)
  • 0x465a6780145f1efe3ab52f94c006065575712d2003d83d85481f3d110ed13d9 (USDC)
  • 0x3097830e9921e4063d334acb82f6a79374f76f0b1a8f857e89b89bc58df1f311 (stETH)
  • 0x47ac3527d02e6b9631c77fad1cdee7bfa77a8a7bfd4880dccbda5146ace4088f (WETH)

Die Angriffsschritte sind wie folgt (am Beispiel der ersten Angriffstransaktion):

  1. Der Angreifer borgte sich 30 Mio. DAI von AAVE über Flashloan.
  2. Der Angreifer hinterlegte 20 Mio. DAI und erhielt 20 Mio. eDAI zurück.
  3. Da Euler Finance die Möglichkeit des Hebelkredits bietet, konnte der Angreifer 195 Mio. eDAI und 200 Mio. dDAI prägen. Nun hält der Angreifer 215 Mio. eDAI und 200 Mio. dDAI.
  4. Fortsetzung von oben. 10 Mio. Schulden wurden zurückgezahlt, damit der Angreifer mehr eDAI prägen konnte. Nun hält der Angreifer 215 Mio. eDAI und 190 Mio. dDAI.
  5. Schritt 3 wurde wiederholt. Nun hält der Angreifer 410 Mio. eDAI und 390 Mio. dDAI.
  6. Der Angreifer rief die Funktion donateToReserve auf, um 100 Mio. eDAI zu spenden. Während dieses Prozesses wurde jedoch der Gesundheitsfaktor des Angreifers nicht überprüft. In diesem Fall kann die Position nun liquidiert werden (310 Mio. eDAI gegenüber 390 Mio. dDAI), was die Möglichkeit zum Profitieren eröffnet.
  7. Der Angreifer liquidierte die Position über einen anderen Adressvertrag als Liquidator (0xa0b3...). Der Liquidator (0xa0b3...) erhielt 310 Mio. eDAI und 259 Mio. dDAI.
  8. Der Angreifer verbrannte 38,9 Mio. eDAI, um 38,9 Mio. DAI (nicht mehr abhebbar aufgrund von Solvenzprüfungen) in der Position des Liquidators (0xa0b3...) abzuheben.
  9. Der Angreifer zahlte den Flash-Loan zurück.

Die wichtigsten Angriffsschritte 2-7 sind in der Transaktionsübersicht markiert.

Zusammenfassung

Dies war der größte Hack im Jahr 2023, bei dem ein 20-jähriger Argentinier namens Federico Jaime mit 197 Millionen US-Dollar einen Rekordbetrag stahl und der Presse "eine verschlungene, manchmal verwirrende und sogar widersprüchliche Erzählung" lieferte. Nichtsdestotrotz wurden "alle wiederbeschaffbaren Gelder" später an die Schatzadresse von Euler Finance zurückgegeben. Ein kleiner Teil (etwa 200.000 US-Dollar) wurde jedoch "unwissentlich" an die Lazarus-Gruppe gesendet – eine mutmaßliche staatlich unterstützte nordkoreanische Verbrecherbande, die von der US-Finanzbehörde sanktioniert wurde. Sie können diese Links, d. h. Link2 und Link2, für die detaillierte und interessante Geschichte konsultieren.

Die Grundursache dieses Vorfalls war das Fehlen von Solvenzprüfungen, was als Lektion dient. Tatsächlich ist es für ein Kreditprotokoll von entscheidender Bedeutung zu prüfen, ob Positionsgesundheitsprüfungen für alle Verfahren implementiert werden sollten, die sich auf Benutzerpositionen auswirken könnten. Darüber hinaus sollten Projektteams proaktiv ihr Kreditprotokoll auf signifikante Liquidationen überwachen und wirksame Alarmsysteme einrichten, um solche Ereignisse umgehend zu erkennen und darauf zu reagieren.

Lesen Sie andere Artikel in dieser Serie:

Sign up for the latest updates