BlockPulseNews
Définition

Réentrance : définition

Aussi appelé : Reentrancy

La réentrance (reentrancy) est une vulnérabilité de smart contract qui permet à un contrat malveillant de rappeler une fonction avant que la première exécution ne soit terminée, en profitant d'un état pas encore mis à jour pour retirer des fonds plusieurs fois.

Thème : Sécurité et arnaques

Réentrance : comment ça marche ?

Lorsqu'un smart contract envoie des fonds à une autre adresse, il passe temporairement la main à celle-ci. Si le destinataire est un contrat, il peut exécuter son propre code à ce moment-là, et notamment rappeler le contrat d'origine. Si ce dernier n'a pas encore enregistré que le retrait a eu lieu, il voit toujours l'ancien solde et accepte de payer une nouvelle fois.

C'est la faille exploitée lors du piratage de The DAO en 2016, qui a conduit à un hard fork d'Ethereum. Elle existe sous plusieurs formes : réentrance dans une même fonction, entre plusieurs fonctions d'un même contrat, entre plusieurs contrats, ou en lecture seule, lorsqu'un protocole lit une valeur incohérente pendant l'exécution d'un autre. La parade de base suit le schéma dit checks-effects-interactions : vérifier les conditions, mettre à jour l'état interne, puis seulement ensuite interagir avec l'extérieur. On ajoute souvent un verrou (reentrancy guard) qui interdit d'entrer de nouveau dans une fonction tant qu'elle n'est pas terminée.

Un exemple concret

Imaginons un coffre qui permet de retirer son dépôt : il envoie les fonds, puis met le solde à zéro. Un attaquant dépose une petite somme depuis un contrat. Quand il demande le retrait, son contrat reçoit les fonds et, avant que le coffre n'ait remis son solde à zéro, redemande un retrait. Le coffre, qui voit encore l'ancien solde, paie à nouveau, et la boucle continue jusqu'à épuisement.

Les risques à connaître

Une réentrance peut vider un contrat en une seule transaction. Les variantes entre contrats ou en lecture seule sont plus difficiles à repérer et touchent aussi des protocoles audités. Les tests, audits, outils d'analyse et verrous de réentrance réduisent le risque sans l'éliminer totalement.

À ne pas confondre avec

  • Flash loan : Le flash loan est un emprunt instantané souvent utilisé pour financer une attaque, mais ce n'est pas une faille en soi.
  • Overflow : L'overflow est une erreur arithmétique de dépassement de capacité, sans lien avec l'ordre des appels entre contrats.
  • delegatecall : Le delegatecall exécute le code d'un autre contrat dans son propre contexte, une source de failles différente de la réentrance.

Questions fréquentes sur Réentrance

Qu'est-ce qui s'est passé lors du piratage de The DAO ?

Un attaquant a exploité une faille de réentrance pour retirer des fonds en boucle avant que les soldes ne soient mis à jour. La communauté Ethereum a ensuite décidé d'un hard fork pour restituer les fonds.

Comment les développeurs se protègent-ils de la réentrance ?

En mettant à jour l'état avant tout appel externe, en utilisant des verrous de réentrance et en faisant auditer leur code.

Dans le même thème : Sécurité et arnaques

Tous les termes du thème Sécurité et arnaques →

À lire

Réentrance dans l'actualité

Nos articles qui parlent de Réentrance, les plus pertinents d'abord.

Approfondir avec l'Académie : La Sécurité Crypto Un module gratuit, en leçons courtes et quiz, pour maîtriser ce thème pas à pas.
Découvrir le module

Les autres termes en R

← Tout le lexique crypto de A à Z