Ferdinand Profile picture
Mar 31, 2022 11 tweets 4 min read Read on X
Les reufs, connaissez vous la Re-Entrancy attack ? une erreur de débutant ou de maladroite-té qui fait perdre souvent des millions à des smarts contrats

Ça consiste simplement à un contrat B de rappeler un contrat A avant que A ne termine son exécution.
Explication👇
Supposons un simple contrat A qui permet de déposer ses éthers et les retirer, implémenter comme suit:
les plus futés auront déjà remarquer la grave erreur Image
Si t'as pas remarquer tkt, je n'avais rien vu aussi 😅.

Et bien ce #contrat comporte une erreur fatale qui lui fera perdre tous ces fonds en cas d'attaque.

En effet dans la méthode withdraw qui permet de retirer ses ethers, la variable d'état(balances[address]) qui renvoi
la balance d'un utilisateur est mis à jour après le retrait, c-a-d après l'appel de la fonction call(une fonction de bas niveau pour interagir avec d'autres contrats,ça permet d'envoyer des ethers e.g)
on met donc la balance de l'utilisateur à 0 après retrait. Image
Ok Ferdinand c'est bien beau tout ça mais, ça fait quoi si je le met après ?

Et bien regarder ce que le pirate peut faire :
ci dessous un contrat Attack qui permet d'attaquer notre contrat et retirer tous ces fonds. Image
Ce contrat est construit avec notre contrat, et est déployé pour juste interagir avec.

En appellant la méthode attack() le pirate comme tout le monde va déposer ces ethers mais va aussi retirer tous les ethers de notre contrat 😂.

je t'explique,
Lorsque le pirate appelle cette méthode, vous l'aurez compris ça fait le dépôt mais aussi le retrait. Jusque là pas de prob. Image
Sauf qu'il est malin et il a implémenté une fonction fallback quand notre contrat lui renvoi ces ethers.
En résumé quand il fait le withdraw et que notre contrat lui envoi ces ethers, le fallback spam notre méthode withdraw et retire tous les ethers de notre contrat😂😂 Image
Cela est possible par ce que comme expliqué au dessus, nous mettons à jour sa balance qu'après retrait. Donc après le withdraw sa balance n'est pas encore à 0 il continue de spamer notre withdraw😞
jusqu'a ce qu'il n'y a plus rien à retirer Image
Morale de l'histoire, mettez toujours à jour vos variables d'etats avant de faire appel à un contrat ou une méthode extérieure.

Et bien voilà, j’espère vous avoir éclairé sur ce sujet
Si vous avez aimé n'hésitez pas à liker et retwetter pour les dévs #solidity

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Ferdinand

Ferdinand Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(