900 % de profit assuré : retour sur un bug lucratif pour les traders de la DeFi
Les protocoles de finance décentralisée reposent sur des séries de smart contracts. Malheureusement, ces derniers peuvent présenter des bugs. Dans certains cas, ces bugs peuvent avoir des incidences majeures. À la fois sur la santé de ces protocoles et sur les fonds de leurs utilisateurs. Le dernier en date, un bug dans le code de plusieurs forks de Gains Network permettait aux traders de faire 900 % de profit sur tous leurs trades.
Un bug majeur dans le code de plusieurs protocoles DeFi
Gains Network est un protocole de DeFi hébergé sur Arbitrum et Polygon. Celui-ci propose du trading sur des marchés dérivés.
Comme la plupart des protocoles DeFi, le code de Gains Network a été forké à de nombreuses reprises. Ainsi, une multitude de protocoles utilisent le même code. Cependant, il y a une grande différence entre forker un protocole et savoir modifier ce dernier sans introduire de bugs.
Récemment, l’entreprise Zellic spécialisée dans la cybersécurité, a dévoilé plusieurs failles majeures dans le code de fork de Gains Network.
900 % de profit à coup sûr
Un premier bug impactait la gestion des Stop Loss et du prix de l’actif au moment de l’ouverture du trade, openPrice.
Ainsi, le système n’empêchait pas la création d’un stop loss à un prix supérieur à celui de l’open price, à savoir le prix auquel le trade était ouvert.
Par conséquent, si le prix du marché atteint le stop loss (qui est supérieure au vrai openPrice du marché) l’ordre est clôturé, générant un profit alors qu’il devrait générer une perte. En pratique, cela est dû à un mauvais calcul dans la manière dont la différence de prix est calculée.
« Le trader a commencé avec un solde initial de 10000000000 et a placé un ordre en utilisant ce montant. L’ordre a été placé de sorte que le stop loss était supérieur au prix d’ouverture lorsque l’ordre a été exécuté. Ensuite, cet ordre a été clôturé avec le type LimitOrder.SL, et l’ordre a réalisé un profit instantané de 900 % sur cet ordre (moins quelques frais de transaction). Ainsi, la faille a permis de réaliser un profit instantané de 900 % sur un ordre, peu importe comment le prix du jeton a évolué après que l’ordre a été initié. »
Mais ce n’est pas tout ! Car les équipes de Zellic ont décelé une seconde faille tout aussi critique.
Cette fois-ci c’est au niveau du calcul de profit d’un trade. Dans ce cas, la fonction qui calcule le pourcentage de profit va convertir une variable afin de calculer la différence (diff) nécessaire au calcul du profit.
Cependant, la conversion du type uint256 à int dans le code peut dans certains cas assigner la valeur -1. Cela se passe notamment lorsque le uint256 est trop grand pour être converti en int.
Dans le cas d’un ordre de vente, cela pourrait entraîner une valeur positive, résultant en un pourcentage de profit exagéré (presque 100 fois le levier).
Heureusement, les protocoles impactés, à savoir Gambit Trade ou encore Holdstation ont été avertis des failles et ont été en mesure de les corriger. Néanmoins, d’autres forks de Gains Network pourraient bien présenter les mêmes failles, mettant à risque les fonds des utilisateurs.
Il est relativement fréquent que de telles failles soient découvertes. Fort heureusement, celles-ci peuvent être découvertes avant d’avoir été exploitées. C’est notamment le cas d’une faille découverte dans l’IBC de Cosmos et qui aurait pu entraîner la perte de 126 millions de dollars.