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 № 051Smart-Contract-Bug

Punk Protocol Initialize-Hijack

9 Mio. $ aus Punk Protocol Minuten nach Start abgezogen via delegatecall auf Initialize, das Angreifer als Forge setzte; 5 Mio. von White-Hats gerettet.

Datum
Chain(s)
Status
Teilweise zurückerlangt

Am 10. August 2021 wurde das frisch gestartete Punk Protocol innerhalb von Minuten nach seinem öffentlichen Start um etwa 9 Millionen $ ausgeplündert. Der Exploit war ein Lehrbuch-erneut-aufrufbarer Initializer — der Angreifer rief Initialize() per delegatecall auf, setzte sich selbst als forge-Adresse des Projekts und zog dann die Reserven des Protokolls über legitime Auszahlungsfunktionen ab, die der Forge-Rolle vertrauten. Ein White-Hat-Front-Running-Bot rettete etwa 5 Millionen $ der gestohlenen Mittel. Die Verträge waren ohne Audit gestartet worden.

Was geschah

Die Verträge von Punk Protocol folgten einem aktualisierbaren Proxy-Muster mit einer Initialize()-Funktion, die die privilegierten Rollen des Protokolls setzte — einschließlich der forge-Adresse, die Auszahlungen und andere administrative Operationen kontrollierte. Wie es Standard ist, sollte Initialize() genau einmal aufrufbar sein, vom Deployer, zum Zeitpunkt des Deployments.

Der fatale Fehler: Initialize() konnte über delegatecall neu aufgerufen werden auf eine Weise, die die beabsichtigte One-Shot-Beschränkung des Protokolls umging. Der Angreifer:

  1. Identifizierte den erneut-aufrufbaren Initializer durch Standard-Vertragsanalyse.
  2. Verwendete delegatecall, um Initialize() in einem Kontext aufzurufen, in dem der Aufruf gelang — die forge-Adresse auf eine von ihm kontrollierte neu setzend.
  3. Mit der neuen forge-Rolle etabliert rief er withdrawTo() und withdrawToForge() über die legitimen Auszahlungs-Flows auf — aber mit der Adresse des Angreifers nun als Forge autorisiert.
  4. Entzog die Reserven des Protokolls innerhalb von Minuten nach dem Start.

Der gesamte extrahierbare Betrag war etwa 9 Millionen $, aber MEV-Bots front-runnten die Transaktionen des Angreifers — sie beobachteten die bösartige Abhebung in der öffentlichen Mempool und spielten ähnliche Abhebungen ab, um einen Teil der Mittel zu extrahieren, bevor der Angreifer abschließen konnte. Einer dieser Front-Runner war ein White-Hat, der etwa 5 Millionen $ erfasste und sie anschließend an Punk Protocol im Austausch gegen eine Finder-Gebühr (~1 Mio. $ als Belohnung behalten) zurückgab.

Folgen

  • Punk Protocol veröffentlichte einen Kompensationsplan, finanziert aus den geretteten 5 Mio. $ und aus Projekt-Treasury-Reserven.
  • Das Team erkannte an, dass die Verträge ohne Sicherheits-Audit deployt worden waren — eine Tatsache, die im Post-Mortem prominent figurierte.
  • Die verbleibenden ~3 Mio. $, die der ursprüngliche Angreifer behielt, wurden über Tornado Cash gewaschen; keine weitere Wiederherstellung.

Warum es wichtig ist

Der Punk-Protocol-Vorfall ist die kanonische Launch-ohne-Audit-Fallstudie. Die Schwachstelle — ein erneut-aufrufbarer Initializer, zugänglich über delegatecall — ist dieselbe strukturelle Klasse, die Parity Multisig 2017 zerstörte und später bei Audius 2022 und anderswo auftauchen würde. Es ist eines der am besten dokumentierten Bug-Muster in der Solidity-Geschichte. Jedes Audit, das von einer seriösen Firma durchgeführt wurde, hätte es gefangen.

Die strukturellen Lehren:

  1. Nicht auditierte Verträge zum Launch sind ein bekanntes Angreiferziel. Versierte Operatoren überwachen neue Vertrags-Deployments speziell auf bekannte Bug-Muster. Das Fenster zwischen Deployment und Erkennung wird oft in Minuten, nicht Tagen gemessen.

  2. Der initializer-Modifier von OpenZeppelin — und äquivalente Muster in anderen Framework-Bibliotheken — existiert speziell, um die Punk-Protocol-Klasse von Bug zu verhindern. Es ist eine einzeilige Annotation. Sie zu überspringen ist ein unerzwungener Fehler.

  3. White-Hat-MEV ist jetzt eine bedeutende Komponente des DeFi-Sicherheits-Ökosystems. Die Tatsache, dass etwa 56 % des Punk-Protocol-Drains durch Front-Running statt durch koordinierte Team-Reaktion zurückgewonnen wurden, ist repräsentativ dafür, wie sich die moderne Incident-Response-Landschaft entwickelt hat — der beste Verbündete von Protokollen ist oft ein externer Bot, der zufällig zusieht.

Das Muster wiederholt sich: Eminence (Sept 2020), Punk Protocol (Aug 2021) und unzählige kleinere Vorfälle sind alle Variationen von "der Vertrag startete, Beobachter fanden innerhalb von Minuten eine bekannte Bug-Klasse, und der Großteil des Wertes wurde je nach dem, wer zuerst dort ankam, entweder extrahiert oder gerettet".

Quellen & On-Chain-Belege

  1. [01]halborn.comhttps://www.halborn.com/blog/post/explained-the-punk-protocol-hack-august-2021
  2. [02]medium.comhttps://medium.com/punkprotocol/punk-compensation-plan-and-the-path-forward-c86b6143c01e

Verwandte Einträge