Aller au contenu
Fondé MMXXVIVol. VI · № 273RSS
Blockchain Breaches

Archive des incidents de sécurité dans les cryptomonnaies — piratages, exploits, défaillances de ponts et rug pulls, documentés avec des preuves on-chain.

Dossier № 072Réentrance

Réentrance de staking Visor Finance

Le contrat de staking Visor Finance a perdu 8,2 M$ à une réentrance dans delegateTransferERC20. VISR a chuté de 95 % ; Visor a migré vers un nouveau jeton.

Date
Chaîne(s)
Statut
Partiellement récupéré

Le 21 décembre 2021 à 14h29 UTC, le protocole de gestion active de liquidité Visor Finance a perdu environ 8,2 millions de dollars lorsqu'un attaquant a exploité une réentrance dans le contrat de staking du protocole. 8 812 958 jetons VISR ont été volés ; le prix de marché du jeton est tombé d'environ 0,93 $ à 0,04 $ — une baisse de 95 % — à mesure que la dilution et le récit d'échec du protocole se sont stabilisés.

Ce qui s'est passé

Le contrat de staking de Visor permettait aux utilisateurs de déposer et retirer du VISR via une interface externe — IVisor.delegateTransferERC20() — que le contrat de staking appelait pour déplacer les jetons au nom de l'utilisateur.

Le comportement prévu de la fonction : le contrat de staking appelle delegateTransferERC20(), qui rappelle l'implémentation fournie par l'utilisateur, qui transfère les jetons. La faille était structurelle : l'implémentation fournie par l'utilisateur pouvait rentrer dans le contrat de staking avant que la comptabilité de l'appel original n'ait été mise à jour.

L'attaque :

  1. L'attaquant a déployé un contrat implémentant un delegateTransferERC20() malveillant qui, lorsque appelé par le contrat de staking de Visor, rentrait dans la fonction de retrait du contrat de staking.
  2. La réentrance laissait l'attaquant retirer du VISR plusieurs fois contre le même solde staké — chaque réentrance lisant le solde non décrémenté et approuvant un autre retrait.
  3. Drainé 8,8M VISR dans une boucle de transaction unique.

Conséquences

  • Visor a mis en pause les opérations et annoncé une migration de jetons vers un nouveau contrat VISR — l'ancien VISR a été effectivement annulé et de nouveaux jetons ont été émis aux détenteurs légitimes au snapshot pré-incident.
  • L'équipe a souligné que les positions et hypervisors actifs n'étaient pas affectés — la perte était contenue au contrat de staking.
  • Le jeton VISR (et plus tard, l'évolution rebrandée Gamma Strategies du protocole) s'est partiellement remis sur l'année suivante.

Pourquoi c'est important

Visor est l'un d'une séquence d'incidents de réentrance de fin 2021 (Cream Finance AMP en août, Visor en décembre, Fei/Rari en avril 2022) qui ont rétabli une leçon que l'industrie était censée avoir apprise cinq ans plus tôt avec The DAO : ne jamais faire confiance à un callback depuis un contrat externe durant une mutation d'état. La cause structurelle — des contrats de staking appelant des implémentations de callback fournies par l'utilisateur sans gardes de réentrance appropriées — récidive chaque fois qu'une conception de protocole favorise la flexibilité de composabilité au détriment d'une discipline stricte checks-effects-interactions.

La réponse de migration de jeton est aussi instructive : émettre un nouveau jeton et annuler l'ancien est une remédiation puissante et controversée qui fonctionne uniquement quand le protocole contrôle un pourcentage significatif de la liquidité et a la légitimité communautaire pour coordonner l'échange. Les plus petits protocoles ne peuvent pas y parvenir ; les plus grands en ont rarement besoin.

Sources & preuves on-chain

  1. [01]cryptobriefing.comhttps://cryptobriefing.com/8-2m-lost-visor-finance-suffers-latest-defi-hack/
  2. [02]finance.yahoo.comhttps://finance.yahoo.com/news/visor-finance-suffers-another-defi-094645929.html
  3. [03]ihodl.comhttps://ihodl.com/topnews/2021-12-21/visor-finance-hacked-loses-over-8m-tokens/

Dépôts liés