reentrancy-attack

Une attaque de réentrance exploite la vulnérabilité d'un smart contract aux appels récursifs, permettant à un attaquant de retirer des fonds à plusieurs reprises ou de manipuler l'état du contrat avant que la transaction initiale ne soit terminée.

Les attaques de réentrance se produisent lorsqu'un contrat malveillant rappelle un contrat vulnérable avant que le premier appel n'ait fini de s'exécuter. Cet appel récursif peut vider des fonds ou modifier l'état du contrat de manière non intentionnelle. La vulnérabilité apparaît lorsqu'un contrat ne tient pas correctement compte des appels externes, en particulier ceux qui pourraient potentiellement manipuler son état interne. Il s'agit d'une préoccupation de sécurité critique dans les applications décentralisées (dApps), car cela peut entraîner des pertes financières importantes pour les utilisateurs et le projet.

        graph LR
  Center["reentrancy-attack"]:::main
  Pre_logic["logic"]:::pre --> Center
  click Pre_logic "/terms/logic"
  Rel_smart_contracts["smart-contracts"]:::related -.-> Center
  click Rel_smart_contracts "/terms/smart-contracts"
  Rel_smart_contract_vulnerability["smart-contract-vulnerability"]:::related -.-> Center
  click Rel_smart_contract_vulnerability "/terms/smart-contract-vulnerability"
  Rel_smart_contract_security["smart-contract-security"]:::related -.-> Center
  click Rel_smart_contract_security "/terms/smart-contract-security"
  classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
  classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
  classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
  classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
  linkStyle default stroke:#4b5563,stroke-width:2px;

      

🧠 Test de connaissances

1 / 3

🧒 Explique-moi comme si j'avais 5 ans

It's like going to an ATM, withdrawing money, but before the machine updates your balance, you quickly ask it again for money, and it lets you take more because it hasn't realized you already took some!

🤓 Expert Deep Dive

Reentrancy attacks exploit the asynchronous nature of external calls in smart contract execution environments. In Ethereum's EVM, when a contract sends Ether using call.value()(), the receiving contract's fallback function or receive function is executed. If this fallback logic contains a call back to the sending contract's vulnerable function (e.g., withdraw()), the execution stack allows this recursive call. The attacker's contract can manipulate the msg.sender context or internal state variables within the re-entered function call. The Checks-Effects-Interactions pattern is a fundamental security principle to prevent this; state changes must be finalized before external calls are made. For instance, updating the user's balance to zero before sending the Ether prevents the re-entered call from seeing a non-zero balance. Reentrancy guards, often implemented as a state variable toggled during function execution, act as a mutex to prevent re-entry. However, care must be taken to ensure the guard is correctly reset, especially in complex interaction chains.

🔗 Termes associés

Prérequis:

📚 Sources