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 № 183Bug de smart contract

Bug de transfert Super Sushi Samurai

4,8 M$ drainés de Super Sushi Samurai sur Blast : un bug de transfert doublait le solde lors d'un self-transfer. Un white-hat avait vu le bug en premier.

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

Le 21 mars 2024, le jeton GameFi de Blast Super Sushi Samurai (SSS) a perdu environ 4,8 millions de dollars à cause d'un bug de logique de transfert de jetons : transférer des jetons à soi-même créditait le solde sans le débiter, doublant les avoirs de l'expéditeur à chaque self-transfer. Un attaquant a bouclé les self-transfers pour minter un solde effectivement infini, puis a dumpé dans le pool de liquidité. Un white-hat avait indépendamment découvert le même bug et tentait de sauver les fonds quand l'acteur malveillant a frappé.

Ce qui s'est passé

L'implémentation transfer ERC-20 de SSS gérait le cas from == to incorrectement — elle ajoutait le montant au destinataire avant de soustraire de l'expéditeur, donc un self-transfer augmentait nettement le solde. Des self-transfers répétés ont gonflé le SSS de l'attaquant à une taille arbitraire ; vendre cette offre a drainé le pool SSS/WETH de ~4,8 M$.

Conséquences

  • Un white-hat a récupéré une partie (il courait pour sécuriser les fonds via le même bug).
  • Le projet a négocié des retours partiels ; SSS s'est effondré.

Pourquoi c'est important

Super Sushi Samurai est le même bug comptable self-transfer / from == to que MonoX (échanger un jeton contre lui-même) — la classe d'entrées dégénérées. Aucun utilisateur légitime ne fait de self-transfer pour doubler son solde ; précisément parce que c'est dégénéré, ce n'est pas testé. La règle récurrente du catalogue : testez les entrées qu'aucun utilisateur honnête ne soumettrait jamais, parce que ce sont exactement les entrées qu'un attaquant soumettra. Le property-based testing (« pour tout a,b : l'invariant balanceOf tient après transfer(a,b) y compris a==b ») attrape ça trivialement ; les tests par exemple écrits autour du comportement utilisateur attendu, jamais.

Sources & preuves on-chain

  1. [01]halborn.comhttps://www.halborn.com/blog/post/explained-the-super-sushi-samurai-hack-march-2024
  2. [02]coindesk.comhttps://www.coindesk.com/business/2024/03/21/newly-issued-gaming-token-exploited-on-blast-with-46m-drained
  3. [03]rekt.newshttps://rekt.news/sss-rekt

Dépôts liés