Réentrance Vyper sur Curve Finance
Un verrou de réentrance défectueux dans trois versions du compilateur Vyper a exposé plusieurs stablepools Curve à une attaque de réentrance classique.
- Date
- Victime
- Curve Finance
- Chaîne(s)
- Statut
- Partiellement récupéré
Le 30 juillet 2023, plusieurs pools de stablecoins de Curve Finance ont été drainés par des attaques de réentrance pour un total d'environ 73 M$. Le bug ne se trouvait pas dans la logique équivalente Solidity de Curve — il était dans le compilateur Vyper lui-même.
Ce qui s'est passé
Trois versions de Vyper (0.2.15, 0.2.16, 0.3.0) implémentaient le décorateur @nonreentrant avec un verrou défectueux qui n'empêchait pas réellement la réentrée sur certains chemins de code. Plusieurs pools Curve — notamment alETH/ETH, msETH/ETH, pETH/ETH et le pool CRV/ETH — avaient été déployés avec ces versions du compilateur et étaient donc vulnérables à l'attaque de réentrance canonique de 2016.
L'attaquant appelait remove_liquidity au milieu d'un swap, ce qui déclenchait un transfert d'ETH vers un contrat contrôlé qui ré-entrait dans le pool avant que le stockage ne soit mis à jour, permettant des retraits répétés au-delà de la part réelle de l'attaquant.
Conséquences
- Vyper a publié des versions corrigées et un avis clair listant les versions affectées.
- Une coalition de chercheurs MEV white-hat (« c0ffeebabe.eth ») a front-run environ 5,4 M$ de l'exploit et les a restitués à Curve.
- Plusieurs portions de la perte ont été récupérées par négociation ; le reste demeure non recouvré.
- Les cabinets d'audit incluent désormais systématiquement des vérifications de version du compilateur dans leurs checklists pour les déploiements Vyper.
Pourquoi c'est important
Curve est l'un des protocoles les plus audités de la DeFi. L'attaque a souligné que les audits du contrat lui-même ne peuvent garantir la sécurité si le compilateur qui produit le bytecode contient des bugs. Les builds reproductibles et la transparence des versions de compilateur sont depuis devenus une pratique standard.
Sources & preuves on-chain
- [01]twitter.comhttps://twitter.com/CurveFinance/status/1685693202722848768
- [02]hackmd.iohttps://hackmd.io/@vyperlang/HJUgNMhs2