Euler Finance-Vorfall postmortal

Mar 15 2023
Ziel dieses Artikels ist es, den Euler Finance-Vorfall, der sich am 13. März um etwa 08:50 UTC ereignete, unvoreingenommen zu analysieren und die Grundursache zu ermitteln. Schwachstellenanalyse Die ausgenutzte Schwachstelle ergibt sich aus der Art und Weise, wie Euler Finance die Durchführung von Spenden ohne ordnungsgemäße Überprüfung des Kontozustands zulässt.
omniscia.io

Ziel dieses Artikels ist es, den Euler Finance-Vorfall, der sich am 13. März um etwa 08:50 UTC ereignete, unvoreingenommen zu analysieren und die Grundursache zu ermitteln.

Schwachstellenanalyse

Die ausgenutzte Sicherheitslücke ergibt sich aus der Art und Weise, wie Euler Finance die Durchführung von Spenden ohne ordnungsgemäße Überprüfung der Kontogesundheit zulässt.

Der anfällige Code wurde in eIP-14¹ eingeführt , was mehrere Änderungen im gesamten Euler-Ökosystem mit sich brachte. Der Fehler liegt in der ersten Änderung an der ETokenImplementierung ( EToken::donateToReservesFeature ²).

Die Logik innerhalb des LiquidationModuls versucht, die gesamten Schulden des Täters zurückzuzahlen. Wenn die Sicherheiten, die er besitzt, jedoch nicht die erwartete Rückzahlungsrendite erfüllen würden, verwendet das System standardmäßig die Sicherheiten, die der Benutzer hat ³.

Die Annahme dieses Codeblocks besagt, dass die verfügbaren Sicherheiten eines Kreditnehmers nur dann unzureichend sind, wenn:

Dies kann passieren, wenn der Kreditnehmer über mehrere Sicherheiten verfügt und die Pfändung dieser gesamten Sicherheit den Schuldner nicht wieder zahlungsfähig macht

ETokenDiese Sicherheitsgarantie wird durch den Spendenmechanismus nicht aufrechterhalten, der es dem Benutzer ermöglicht, durch die Spende seiner Einheiten „uneinbringliche Schulden“ in Form einer Hebelwirkung zu schaffen, die unbesichert ist, ohne dass sich dies auf sein DTokenGuthaben auswirkt⁴.

Kernproblem

Das Euler Finance-Protokoll ermöglicht es seinen Benutzern, eine künstliche Hebelwirkung zu erzeugen, indem sie Vermögenswerte in derselben Transaktion über prägen und hinterlegen EToken::mint. Dieser Mechanismus ermöglicht die Prägung von Token, die über die vom Euler Finance-Protokoll selbst gehaltenen Sicherheiten hinausgehen.

Der von Euler Finance in eIP-14¹ ( ) eingeführte Spendenmechanismus ermöglicht es einem Benutzer, sein Guthaben an den Token EToken::donateToReserveszu spenden, mit dem er Transaktionen durchführt. reserveBalanceDer Fehler besteht darin, dass keine Gesundheitsprüfung des Kontos durchgeführt wird, über das die Spende erfolgt.

Da eine Spende dazu führt, dass die Schulden ( ) eines Benutzers DTokenunverändert bleiben, während sein Eigenkapital ( EToken) sinkt, führt eine Liquidation seines Kontos dazu, dass ein Teil der DTokenEinheiten beim Benutzer verbleibt, wodurch uneinbringliche Schulden entstehen.

Der oben genannte Fehler ermöglicht es dem Angreifer, eine übermäßig gehebelte Position zu schaffen und diese selbst im selben Block zu liquidieren, indem er sie künstlich „unter Wasser“ bringt.

Wenn sie violatorsich selbst liquidieren, wird ein prozentualer Abschlag angewendet, der dazu führt, dass sie liquidatoreinen erheblichen Teil der Einheiten mit einem Abschlag erhalten EToken. Dadurch wird gewährleistet, dass sie „über Wasser“ sind und nur die Schulden machen, die den von ihnen erworbenen Sicherheiten entsprechen .

Das Endergebnis ist eine violatormit einem erheblichen Betrag an „uneinbringlichen Schulden“ ( DToken) und einer liquidatormit einer Überbesicherung ihrer Schulden ( DToken> EToken) aufgrund der prozentualen Liquidationsanreize, die das Euler-Protokoll bietet ⁵. Wie aus der Transaktion selbst hervorgeht⁶, wurde der maximale Rabatt von 20 % während der Liquidation des Angriffs gewährt.

Angriffsszenario

Damit sich der Angreifer selbst liquidieren konnte, musste er mindestens zwei Verträge einsetzen, um die Schwachstelle auszunutzen. Die Angriffstransaktion ⁶, die ungefähr am 01.02.2023 um 06:29:18 UTC eingereicht wurde, ruft einen Vertrag auf, der in einer früheren Transaktion bereitgestellt wurde.

Dieser Vertrag führt während der Ausführung der Angriffstransaktion die folgenden Schritte aus:

A. Hauptvertrag:

  • Erwerben Sie einen 30-Millionen-DAI-Flash-Darlehen von AAVE V2
  • Stellen Sie die beiden Verträge ( violator⁸& liquidator⁹) für den Angriff bereit
  • Überweisen Sie den gesamten 30-Millionen-DAI-Darlehenssaldo an dieviolator
  • Zahlen Sie 20 Millionen DAI beim DAI ETokenvon Euler Finance ein und erhalten Sie ~19,56 Millionen eDAIToken
  • Erstellen Sie eine künstliche eDAIHebelwirkung von 200 m, prägen Sie ~195,68 m eDAIund 200 m dDAIbis zumviolator
  • Zahlen Sie 10 Mio. DAI auf die violatorPosition zurück, wodurch sich ihr dDAIKontostand auf 190 Mio. erhöht
  • Erstellen Sie einen weiteren künstlichen eDAIHebel von 200 m und prägen Sie ~195,68 m eDAIund 200 m dDAIbis zumviolator
  • Spenden Sie 100 m eDAIan die Reserve desEToken
  • eDAI: ~310,93m
  • dDAI: 390m

Wie bereits erwähnt, wird das Modul bis zur Höhe des Sicherheitensaldos des Benutzers Liquidationliquidiert . Sie können somit die liquidieren , wobei ihr gesamter Saldo von ca. 310,93 Mio. anfällt, jedoch nur ein Teil davon , was durch den Liquidationsabschlag von Euler Finance⁵ noch verschärft wird.liquidatorviolatoreDAIdDAI

Da auf diese Position aufgrund ihres niedrigen Gesundheitszustands der maximale Rabatt angewendet wird, liquidatorentsteht ein eDAISaldo von ca. 310,93 Mio. mit einer Umrechnungsrate von 1.25 eDAIToken pro dDAI. Dies wird letztendlich zu einem Saldo nach der Gebühr von ca. 259,31 Mio. führen dDAI.

liquidatorVertrag:

  • Liquidieren Sie die Position und erwerben Sie ~310,93 Millionen eDAIToken und ~259,31 Millionen dDAIToken
  • Ziehen Sie den gesamten DAIToken-Vorrat ab, indem Sie die entsprechenden eDAIToken verbrennen

Daher wird für die Rückzahlung ein Wechselkurs von etwa 0,97 eDAIpro DAIverwendet. Da sich der Benutzer aufgrund des maximalen Liquidationsrabatts von 20 %, der während seiner Liquidation gewährt wurde, bereits „über Wasser“ befindet, kann er die ~38 Millionen „verbrennen“, die erforderlich sind, eDAIum die DAIim Vertrag gehaltenen ~38,9 Millionen freizugeben.

Letztendlich konnte der Angreifer nach der Ausführung seiner Transaktion die folgenden Vermögenswerte behalten:

  • +~8,877,507 DAI=~8,779,854.423 USD

Wir können die finanziellen Auswirkungen des DAIVermögenswerts abschätzen und einen geschätzten Gewinn von etwa ~8,779,854.423 USDdem 13.03.2023 um 12:42:00 UTC berechnen.

Der Angriff wurde auf mehrere andere Vermögenswerte wiederholt. Daher gilt die Einzahlungswarnung für folgende ETokenVermögenswerte : DAI,WETH

Sicherheitsaudit

Omniscia hat mehrere Sicherheitsüberprüfungen des Euler Finance-Protokolls durchgeführt. Die fraglichen Änderungen wurden jedoch in eIP-14 eingeführt . Wie aus dem Message Board selbst hervorgeht, hat Omniscia nur die Chainlink-Integrationskomponente geprüft, die hier öffentlich verfügbar ist .

Die EToken::donateToReserveFunktion, die den Kern dieser Schwachstelle darstellt, war nicht Gegenstand einer von Omniscia durchgeführten Prüfung. Daher war der Code, der die Sicherheitslücke verursacht, nie Gegenstand einer von unserem Team durchgeführten Prüfung.

Die donateToReserves-Funktion wurde im Juli 2022 vom Sherlock-Team geprüft . Euler Finance und Sherlock haben bestätigt, dass Euler zum Zeitpunkt des Exploits über eine aktive Versicherungspolice mit Sherlock verfügte.

Abschluss

Der Angriff war letztendlich auf einen falschen Spendenmechanismus zurückzuführen und berücksichtigte nicht die Schuldengesundheit des Spenders, was es ihm ermöglichte, eine unbesicherte DTokenSchuld zu schaffen, die niemals beglichen werden kann.

Quellen

  1. Euler-Verbesserungsvorschlag 14:https://forum.euler.finance/t/eip-14-contract-upgrades/305
  2. Euler-Verbesserungsvorschlag 14 Delta:https://euler-xyz.github.io/euler-contracts-upgrade-diffs/eip14/EToken.html
  3. Euler- LiquidatorSicherheiten-Standardlogik:https://github.com/euler-xyz/euler-contracts/blob/fa9398728165676a5666939d8c34a7578d8e1919/contracts/modules/Liquidation.sol#L139-L151
  4. Euler ETokenfehlerhafter Spendemechanismus:https://github.com/euler-xyz/euler-contracts/blob/fa9398728165676a5666939d8c34a7578d8e1919/contracts/modules/EToken.sol#L356-L386
  5. Euler-Liquidationsrabatt:https://docs.euler.finance/euler-protocol/eulers-default-parameters#maximum-liquidation-discount
  6. Transaktionslink zum Etherscan-Angriff:https://etherscan.io/tx/0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d
  7. Etherscan-Adresse des Hauptvertrags:https://etherscan.io/address/0xebc29199c817dc47ba12e3f86102564d640cbf99
  8. Etherscan-Adresse des Vertragsverletzers:https://etherscan.io/address/0x583c21631c48d442b5c0e605d624f54a0b366c72
  9. Etherscan-Adresse des Liquidatorvertrags:https://etherscan.io/address/0xa0b3ee897f233f385e5d61086c32685257d4f12b
  10. Berechnung des Euler- BaseLogicWechselkurses:https://github.com/euler-xyz/euler-contracts/blob/fa9398728165676a5666939d8c34a7578d8e1919/contracts/BaseLogic.sol#L292-L296

omniscia.io wurde Anfang 2021 von Blockchain-Cybersicherheitsveteranen gegründet und ist ein Pionier im Bereich Web3-Sicherheit. Das Unternehmen verfügt über jahrelange Erfahrung, die Entwicklung proprietärer Tools und einen bewährten Ansatz zur Sicherung intelligenter Verträge und komplexer dezentraler Protokolle – einschließlich des mag Aave, YFI, Lien, 1inch, fetch, Compound, Synthetix und viele andere.

Zu unseren Kunden, Partnern und Unterstützern zählen führende Ökosystem-Player wie L'Oréal, Polygon, AvaLabs, Morpho, Euler, CLabs, Olympus DAO, Fetch.ai, LimitBreak und viele mehr.

Folgen Sie unbedingt unseren sozialen Medien und abonnieren Sie unseren Newsletter für weitere Updates:

Twitter / LinkedIn / Newsletter