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
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.
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.
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.
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😂😂
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
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
Share this Scrolly Tale with your friends.
A Scrolly Tale is a new way to read Twitter threads with a more visually immersive experience.
Discover more beautiful Scrolly Tales like this.