Zum Inhalt springen
Gegr. MMXXVIBd. VI · № 273RSS
Blockchain Breaches

Ein Archiv von Sicherheitsvorfällen im Kryptobereich — Hacks, Exploits, Bridge-Ausfälle und Rug Pulls, dokumentiert mit On-Chain-Belegen.

Dossier № 014Reentrancy

Origin Dollar (OUSD) Reentrancy

7,7 Mio. $ aus OUSD-Stablecoin-Vault zwei Monate nach Start abgezogen via Fake-Stablecoin-Reentrancy, durch einen gas-sparenden Refactor verursacht.

Datum
Chain(s)
Status
Mittel entwendet

Am 17. November 2020 um 00:47 UTC wurde der Origin Dollar (OUSD) Stablecoin-Vault um etwa 7,7 Millionen $ ausgeplündert — 11.809 ETH und 2.249.821 DAI — weniger als zwei Monate nach dem Launch von OUSD. Der Exploit war ein Lehrbuch-Reentrancy-Angriff, ermöglicht durch eine einzige fehlende Validierungsprüfung, die während eines gas-sparenden Refactors stillschweigend entfernt worden war.

Was geschah

OUSD ließ Nutzer den Stablecoin minten, indem sie akzeptierte zugrundeliegende Stablecoins (USDC, USDT, DAI) hinterlegten. Die mint()- und mintMultiple()-Pfade des Vaults prüften, dass der hinterlegte Token ein whitelisted Underlying war, bevor sie transferFrom() darauf aufriefen — was genau die Art von Reentrancy verhinderte, die dieser Angriff später nutzen würde.

Ein nachfolgender gas-sparender Refactor kopierte die Logik für mintMultiple() von der Single-Token-mint()-Funktion, ließ aber die Validierungsprüfung für die Underlying-Token-Whitelist weg. Der Bug saß dann unentdeckt durch den Audit- und Launch-Prozess.

Der Angriff:

  1. Der Angreifer erstellte einen gefälschten "Stablecoin"-Vertrag, den er vollständig kontrollierte.
  2. Rief mintMultiple() auf und übergab sowohl einen echten Stablecoin als auch den gefälschten Stablecoin als Eingaben.
  3. Der Vault akzeptierte den gefälschten Vertrag (keine Whitelist-Prüfung) und rief während der Einzahlungsphase transferFrom() darauf auf.
  4. Der transferFrom() des gefälschten Vertrags trat erneut in den Vault ein, bevor der erste Mint das Aktualisieren des Supply-Zustands abgeschlossen hatte — was ein Rebase-Event auslöste, das OUSD-Salden mit Mitten-Mint-Zustand neu berechnete.
  5. Der Rebase begünstigte massiv die bereits bestehenden OUSD-Bestände des Angreifers und gewährte ihm einen unverhältnismäßigen Anteil der zugrundeliegenden Vermögenswerte des Vaults zum Auszahlungszeitpunkt.

Insgesamt abgezogen: ~7,7 Mio. $, über Tornado Cash und renBTC gewaschen.

Folgen

  • Origin Protocol erkannte den Verlust öffentlich am selben Tag an und kündigte die volle Erstattung betroffener Nutzer aus der projekteigenen Treasury und persönlichen Mitteln des Teams an.
  • Die OUSD-Verträge wurden mit umfassendem Reentrancy-Schutz auf jeder zustandsändernden Funktion und expliziter Whitelist-Validierung bei jeder Interaktion mit Underlying-Tokens neu gestaltet.
  • Die Mittel wurden nie On-Chain zurückgewonnen.

Warum es wichtig ist

Der Origin-Dollar-Vorfall ist einer der saubersten Fälle dafür, warum auditierter Code mit Audit-vermeidenden Bugs ausgeliefert werden kann. Der ursprüngliche mint() hatte die Validierungsprüfung; das Audit überprüfte mint(). Der Refactor nach dem Audit kopierte die Logik, ließ aber die Prüfung weg, und es gab kein zweites Audit vor dem Launch. Die Fehlerklasse — nachfolgende Bearbeitungen am auditierten Code ohne Re-Audit — hat seitdem mehrere große Verluste verursacht, einschließlich Fei/Rari.

Die Reaktion des Teams — volle Erstattung aus Team-Mitteln — war auch ungewöhnlich schnell und vollständig für die DeFi-Ära von 2020; sie schuf einen Präzedenzfall, dem andere Protokolle später folgten (und viele später nicht).

Quellen & On-Chain-Belege

  1. [01]medium.comhttps://medium.com/originprotocol/urgent-ousd-has-hacked-and-there-has-been-a-loss-of-funds-7b8c4a7d534c
  2. [02]peckshield.medium.comhttps://peckshield.medium.com/origin-dollar-incident-root-cause-analysis-f27e11988c90
  3. [03]medium.comhttps://medium.com/originprotocol/what-weve-changed-since-the-ousd-attack-5894f2bd77cf

Verwandte Einträge