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
- Opfer
- Origin Protocol
- 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:
- Der Angreifer erstellte einen gefälschten "Stablecoin"-Vertrag, den er vollständig kontrollierte.
- Rief
mintMultiple()auf und übergab sowohl einen echten Stablecoin als auch den gefälschten Stablecoin als Eingaben. - Der Vault akzeptierte den gefälschten Vertrag (keine Whitelist-Prüfung) und rief während der Einzahlungsphase
transferFrom()darauf auf. - 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. - 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
- [01]medium.comhttps://medium.com/originprotocol/urgent-ousd-has-hacked-and-there-has-been-a-loss-of-funds-7b8c4a7d534c
- [02]peckshield.medium.comhttps://peckshield.medium.com/origin-dollar-incident-root-cause-analysis-f27e11988c90
- [03]medium.comhttps://medium.com/originprotocol/what-weve-changed-since-the-ousd-attack-5894f2bd77cf