Détournement d'Initialize de Punk Protocol
9 M$ drainés de Punk Protocol minutes après le lancement via delegatecall à Initialize fixant l'attaquant comme forge ; 5 M$ récupérés par white-hats.
- Date
- Victime
- Punk Protocol
- Chaîne(s)
- Statut
- Partiellement récupéré
Le 10 août 2021, le Punk Protocol fraîchement lancé a été drainé d'environ 9 millions de dollars dans les minutes suivant son lancement public. L'exploit était un initialiseur réinvocable d'école — l'attaquant a appelé Initialize() via delegatecall, s'est défini comme l'adresse forge du projet, puis a retiré les réserves du protocole via des fonctions de retrait légitimes qui faisaient confiance au rôle forge. Un bot white-hat de front-running a récupéré environ 5 millions de dollars des fonds volés. Les contrats avaient été lancés sans audit.
Ce qui s'est passé
Les contrats de Punk Protocol suivaient un schéma de proxy modifiable avec une fonction Initialize() qui définissait les rôles privilégiés du protocole — y compris l'adresse forge, qui contrôlait les retraits et autres opérations administratives. Comme c'est la pratique standard pour les fonctions d'initialiseur, Initialize() était censée être appelable exactement une fois, par le déployeur, au moment du déploiement.
La faille fatale : Initialize() pouvait être réinvoquée via delegatecall d'une manière qui contournait la contrainte one-shot prévue du protocole. L'attaquant :
- A identifié l'initialiseur réinvocable via une analyse de contrat standard.
- A utilisé
delegatecallpour invoquerInitialize()dans un contexte où l'appel réussissait — redéfinissant l'adresseforgeà une qu'il contrôlait. - Avec le nouveau rôle
forgeétabli, a appeléwithdrawTo()etwithdrawToForge()via les flux de retrait légitimes — mais avec l'adresse de l'attaquant maintenant autorisée comme forge. - A drainé les réserves du protocole dans les minutes suivant le lancement.
Le total extractible était d'environ 9 millions de dollars, mais des bots MEV ont devancé les transactions de l'attaquant — observant le retrait malveillant dans le mempool public et rejouant des retraits similaires pour extraire une partie des fonds avant que l'attaquant ne puisse terminer. L'un de ces devanciers était un white-hat qui a capturé environ 5 millions de dollars et les a par la suite restitués à Punk Protocol en échange de frais de recherche (~1 M$ conservé comme prime).
Conséquences
- Punk Protocol a publié un plan de compensation financé par les 5 M$ récupérés et par les réserves du trésor du projet.
- L'équipe a reconnu que les contrats avaient été déployés sans audit de sécurité — un fait qui a figuré en bonne place dans le post-mortem.
- Les ~3 M$ restants conservés par l'attaquant original ont été blanchis via Tornado Cash ; aucune récupération supplémentaire.
Pourquoi c'est important
L'incident Punk Protocol est l'étude de cas canonique lancement sans audit. La vulnérabilité — un initialiseur réinvocable accessible via delegatecall — est la même classe structurelle qui a détruit Parity Multisig en 2017 et apparaîtrait plus tard chez Audius en 2022 et ailleurs. C'est l'un des schémas de bugs les plus documentés dans l'histoire de Solidity. Tout audit effectué par une entreprise réputée l'aurait détecté.
Les leçons structurelles :
-
Les contrats non audités au lancement sont une cible connue des attaquants. Les opérateurs sophistiqués surveillent les nouveaux déploiements de contrats spécifiquement pour les schémas de bugs connus. La fenêtre entre le déploiement et la détection est souvent mesurée en minutes, pas en jours.
-
Le modificateur
initializerd'OpenZeppelin — et les schémas équivalents dans d'autres bibliothèques de framework — existe spécifiquement pour empêcher la classe de bug de Punk Protocol. C'est une annotation d'une ligne. L'omettre est une erreur évitable. -
Le MEV white-hat est maintenant une composante significative de l'écosystème de sécurité DeFi. Le fait qu'environ 56% du drain de Punk Protocol ait été récupéré par front-running plutôt que par une réponse d'équipe coordonnée est représentatif de la façon dont le paysage moderne de réponse aux incidents a évolué — le meilleur allié des protocoles est souvent un bot externe qui se trouve à regarder.
Le schéma se répète : Eminence (sep 2020), Punk Protocol (août 2021), et d'innombrables incidents plus petits sont tous des variations de « le contrat a été lancé, les observateurs ont trouvé une classe de bug connue en quelques minutes, et la plupart de la valeur a été soit extraite soit sauvée selon qui est arrivé en premier ».
Sources & preuves on-chain
- [01]halborn.comhttps://www.halborn.com/blog/post/explained-the-punk-protocol-hack-august-2021
- [02]medium.comhttps://medium.com/punkprotocol/punk-compensation-plan-and-the-path-forward-c86b6143c01e