Am 13. März 2023 stellte unser System fest, dass der Lending-Pool von Euler Finance einem Flash-Loan-Angriff zum Opfer gefallen war, was zu Verlusten in Höhe von 197 Millionen US-Dollar führte. Wir alarmierten zunächst die Community und lieferten anschließend eine Analyse, um bei der Identifizierung der Grundursache zu helfen.
1/ @eulerfinance is attacked. The root cause is due to the lack of liquidity check in the function donateToReserves()https://t.co/stWtPWK900
— BlockSec (@BlockSecTeam) March 13, 2023
See the detailed attack steps below. https://t.co/bm10OJHiXu pic.twitter.com/TDbYuzVWHe
Die Grundursache dieses Vorfalls ist das Fehlen einer Insolvenzprüfung in der Funktion donateToReserves(). Konkret stellt der anfällige Kontrakt eine Funktionalität bereit, mit der Nutzer ihre Sicherheiten an das Protokoll spenden können, ohne dass geprüft wird, ob die Position des Nutzers solvent war. Erschwerend kam hinzu, dass das Protokoll Liquidatoren einen hohen Rabatt anbot, um Schulden zu begleichen und diese Position aufzulösen, um so diese schlechte Position loszuwerden. Der Angreifer erstellte eine große Position und machte diese durch die Ausnutzung dieser Funktionalität insolvent. Anschließend konnte er seine Sicherheiten mit einem Rabatt zurückkaufen, um Profit zu erzielen.
Hintergrund
Überblick über Euler Finance
Euler Finance ist ein Kreditprotokoll auf Ethereum, das es Nutzern ermöglicht, bestimmte Token zu verleihen und zu leihen. Wenn Kreditgeber in den Liquiditätspool von Euler einzahlen, wird ein entsprechender Betrag an ETokens (zinsertragbringende ERC20-Token) geprägt und an sie gesendet. Diese ETokens können gegen die hinterlegten Basiswerte eingelöst werden.
Andererseits erhalten Kreditnehmer, die Liquidität in Anspruch nehmen, DTokens. Diese DTokens sind ERC20-konform und verhindern, dass Inhaber sie eigenständig verbrennen können. Insbesondere können sie nicht einfach an jeden gesendet werden, sondern können von jedem genommen werden, wobei deren Annahme jedoch eine Genehmigung erfordert. In Bezug auf den Basiswert sind die Kreditnehmer dafür verantwortlich, Zinsen auf ihre Kredite zu zahlen, und ein Teil dieser Zinsen wird verwendet, um Forderungsausfälle im Protokoll zu decken.
Das Leverage-Borrowing (auch als Self-Borrow bekannt) und die Soft-Liquidation-Mechanismen von Euler Finance sind zwei Schlüsselkonzepte, die uns helfen, die Ursache dieses Angriffs besser zu verstehen.
Leverage Borrow
Euler Finance bietet eine Leverage-Borrowing-Funktion, die es Nutzern ermöglicht, eine rekursive Kreditstrategie zu simulieren. Einfach ausgedrückt können Nutzer Sicherheiten hinterlegen und ETokens prägen, die dann als Sicherheit verwendet werden können, um weitere ETokens zu leihen. Der Kontrakt prägt zudem einen entsprechenden Betrag an dTokens als Schulden-Token. Die Gesundheit der Position des Nutzers wird auf Basis der Werte der ETokens und dTokens berechnet. Laut der Dokumentation von Euler Finance können Nutzer einen Hebel von bis zu 19x nutzen. Die Leverage-Borrowing-Funktion spielte bei diesem Vorfall eine entscheidende Rolle. Ohne die Unterstützung dieser Funktion hätte der Angreifer keinen Profit erzielen können. Durch das Leverage Borrowing vergrößerte der Angreifer seine Positionsgröße auf fast das 11-fache der ursprünglichen Mittel aus dem Flash-Loan.
Soft Liquidation
Wie im Whitepaper von Euler Finance dargelegt, ermöglicht der Soft-Liquidation-Mechanismus es Liquidatoren, der liquidierten Partei flexibel bei der Rückzahlung ihrer Schulden zu helfen, anstatt wie bei Protokollen wie Compound und Aave auf einen festen Koeffizienten für die Liquidation beschränkt zu sein. Soft Liquidation bedeutet, dass je niedriger die Gesundheit einer Position ist, desto mehr Sicherheiten für eine Liquidation in Frage kommen – basierend auf den Daten dieses Vorfalls bis zu 75 % im Falle von Forderungsausfällen. Die Liquidation der deutlich diskontierten Sicherheiten ermöglichte es dem Angreifer daher, den Flash-Loan zurückzuzahlen und einen Gewinn zu erzielen.
Schwachstellenanalyse
Die Hauptschwachstelle, nämlich das Fehlen einer Insolvenzprüfung, liegt innerhalb der Funktion donateToReserves(), die von Nutzern verwendet wird, um ETokens aus ihren Positionen als Spende an die Reserve des Protokolls zu übertragen. Für normale Nutzer gibt es normalerweise keinen Anreiz oder keine Motivation, eine solche Aktion durchzuführen. Tatsächlich liegt die Schwachstelle darin begründet, dass die Funktion donateToReserves() keine Gesundheitsprüfung durchführt, wenn ETokens aus Nutzerpositionen übertragen werden. Dies ermöglicht es Angreifern, die ETokens aus der durch Leverage Borrowing geschaffenen großen Position direkt zu spenden, wodurch die Gesundheit der Position unter 100 % fällt und faule Kredite entstehen.

Dem Design entsprechend verwendet Euler Finance einen dynamischen Schließungsfaktor, um Positionen „soft zu liquidieren“. 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 Forderungsausfällen kann der Liquidationsprozentsatz bis zu 75 % der Sicherheiten innerhalb der Position betragen (wie anhand der tatsächlichen Angriffstransaktion berechnet). Infolgedessen ermöglicht der beträchtliche Anteil der liquidierten, stark rabattierten Sicherheiten dem Angreifer, den Flash-Loan zurückzuzahlen und Gewinne zu erzielen.
Angriffsanalyse
Es gibt mehrere Angriffstransaktionen, die sich gegen verschiedene Pools richteten:
- 0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d (DAI)
- 0x71a908be0bef6174bccc3d493becdfd28395d8898e355d451cb52f7bac38617 (WBTC)
- 0x62bd3d31a7b75c098ccf28bc4d4af8c4a191b4b9e451fab4232258079e8b18c4 (wstETH)
- 0x465a6780145f1efe3ab52f94c006065575712d2003d83d85481f3d110ed13d9 (USDC)
- 0x3097830e9921e4063d334acb82f6a79374f76f0b1a8f857e89b89bc58df1f311 (stETH)
- 0x47ac3527d02e6b9631c77fad1cdee7bfa77a8a7bfd4880dccbda5146ace4088f (WETH)
Die Angriffsschritte sind wie folgt (am Beispiel der ersten Angriffstransaktion):
- Der Angreifer leiht sich 30 Mio. DAI bei AAVE über einen Flash-Loan.
- Der Angreifer zahlt 20 Mio. DAI ein und erhält dafür 20 Mio. eDAI.
- Da Euler Finance die Möglichkeit des Leverage Borrowing bietet, kann der Angreifer 195 Mio. eDAI und 200 Mio. dDAI prägen. Nun hält der Angreifer 215 Mio. eDAI und 200 Mio. dDAI.
- Fortsetzung wie oben. 10 Mio. Schulden wurden zurückgezahlt, sodass der Angreifer mehr eDAI prägen konnte. Nun hält der Angreifer 215 Mio. eDAI und 190 Mio. dDAI.
- Schritt 3 wurde wiederholt. Nun hält der Angreifer 410 Mio. eDAI und 390 Mio. dDAI.
- 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 eröffnet, Profit zu machen.
- Der Angreifer liquidierte die Position unter Verwendung eines anderen Adresskontrakts als Liquidator (0xa0b3...). Der Liquidator (0xa0b3...) erhielt 310 Mio. eDAI und 259 Mio. dDAI.
- Der Angreifer verbrannte 38,9 Mio. eDAI, um 38,9 Mio. DAI aus der Position des Liquidators (0xa0b3...) abzuheben (aufgrund von Insolvenzprüfungen konnten nicht mehr abgehoben werden).
- Der Angreifer zahlte den Flash-Loan zurück.
Die entscheidenden Angriffsschritte 2-7 sind im Transaktionsverlauf markiert.

Zusammenfassung
Dies war der größte Hack im Jahr 2023, bei dem rekordverdächtige 197 Millionen US-Dollar von einem 20-jährigen Argentinier namens Federico Jaime gestohlen wurden, der den Medien „eine verschlungene, manchmal verwirrende und sogar widersprüchliche Erzählung“ lieferte. Nichtsdestotrotz wurden „alle wiederbeschaffbaren Gelder“ später auf die Treasury-Adresse von Euler Finance zurücküberwiesen. Ein kleiner Teil (etwa 200.000 USD) wurde jedoch „unwissentlich“ an die Lazarus-Gruppe gesendet – ein mutmaßlich staatlich unterstütztes nordkoreanisches Verbrechersyndikat, das vom US-Finanzministerium sanktioniert wird. Sie können sich auf diese Links beziehen, d. h. link2 und link2, für die detaillierte und interessante Geschichte.
Die Grundursache dieses Vorfalls war das Fehlen von Insolvenzprüfungen, was als Lektion dient. Tatsächlich ist es für ein Kreditprotokoll entscheidend zu beurteilen, ob Gesundheitsprüfungen für Positionen für alle Verfahren implementiert werden sollten, die sich auf Nutzerpositionen auswirken könnten. Darüber hinaus sollten Projektteams ihre Kreditprotokolle proaktiv auf signifikante Liquidationen überwachen und effektive Warnsysteme einrichten, um solche Ereignisse umgehend zu erkennen und darauf zu reagieren.
Lesen Sie weitere Artikel in dieser Serie:
- Lead-In: Top Ten "Awesome" Security Incidents in 2023
- #1: Harvesting MEV Bots by Exploiting Vulnerabilities in Flashbots Relay
- #3: KyberSwap Incident: Masterful Exploitation of Rounding Errors with Exceedingly Subtle Calculations
- #4: Curve Incident: Compiler Error Produces Faulty Bytecode from Innocent Source Code
- #5: Platypus Finance: Surviving Three Attacks with a Stroke of Luck
- #6: Hundred Finance Incident: Catalyzing the Wave of Precision-Related Exploits in Vulnerable Forked Protocols
- #7: ParaSpace Incident: A Race Against Time to Thwart the Industry's Most Critical Attack Yet
- #8: SushiSwap Incident: A Clumsy Rescue Attempt Leads to a Series of Copycat Attacks
- #9: MEV Bot 0xd61492: From Predator to Prey in an Ingenious Exploit
- #10: ThirdWeb Incident: Incompatibility Between Trusted Modules Exposes Vulnerability



