Le week-end dernier, quelqu'un a déposé 200 000 $ dans un protocole DeFi et s'est éloigné avec 25 millions $ en ETH.
Le protocole est Resolv. L'actif est USR, un stablecoin indexé sur le dollar.
Le minting d'USR fonctionne comme ceci : vous déposez USDC, puis un service hors chaîne avec une clé privilégiée décide combien d'USR vous mint. Le contrat intelligent impose un dépôt minimum de 100 000 USDC par transaction.
Mais il n'y a pas de maximum du côté de la sortie.
Pas de limite. Pas de ratio par rapport à la garantie. Tout ce que le détenteur de la clé autorise est minté. Le contrat vérifie le plancher, jamais le plafond.
L'attaquant a obtenu la clé. Deux transactions :
100K USDC en → 50M USR out
100K USDC en → 30M USR out
80 millions de stablecoins non garantis. Mintés par la propre fonction du protocole, fonctionnant exactement comme prévu.
L'attaquant a vendu USR sur des échanges décentralisés. Le prix a chuté de 1,00 $ à 0,20 $. L'équipe a mis sur pause toutes les fonctions du protocole.
Pensez à un guichetier de banque avec autorité de signature et sans limites de transaction. Dans la finance traditionnelle, chaque transfert au-dessus d'un seuil nécessite une seconde signature, un délai ou les deux. Resolv n'en avait aucun. Une clé privée. Pas de multisig. Pas de verrou temporel. Pas de vérification de santé sur chaîne des montants de sortie.
Le contrat s'est exécuté parfaitement. C'est le problème.
Le modèle de sécurité était : "cette clé ne fuira pas." La solvabilité de l'ensemble du protocole dépendait de cette seule hypothèse.
Resolv détenait environ 95 millions $ en TVL avant l'exploitation. Le protocole est maintenant en pause, avec des actifs bien en dessous des passifs en cours.
Une clé. Pas de plafond. 25 millions $ disparus.