Reentrancy
SécuritéDéfinition
Vulnérabilité où un contrat externe rappelle une fonction du contrat victime avant que la première exécution ne soit terminée. Célèbre dans le hack de The DAO (2016, 60M$ volés). Prévention : suivre le pattern Checks-Effects-Interactions, ou utiliser ReentrancyGuard d'OpenZeppelin. Toujours mettre à jour l'état avant les appels externes.
Version anglaise
Vulnerability where external contract recalls victim contract function before first execution finishes. Famous in The DAO hack (2016, $60M stolen). Prevention: follow Checks-Effects-Interactions pattern, or use OpenZeppelin's ReentrancyGuard. Always update state before external calls.
Exemple de Code
// ❌ VULNÉRABLE (mauvais ordre)
function withdraw(uint256 amount) public {
require(balances[msg.sender] >= amount);
(bool success, ) = msg.sender.call{value: amount}("");
require(success);
balances[msg.sender] -= amount; // Trop tard ! L'attaquant peut rappeler withdraw()
}
// ✅ SÉCURISÉ (Checks-Effects-Interactions)
function withdraw(uint256 amount) public {
require(balances[msg.sender] >= amount); // Checks
balances[msg.sender] -= amount; // Effects
(bool success, ) = msg.sender.call{value: amount}(""); // Interactions
require(success);
}
// ✅ Avec ReentrancyGuard
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
function withdraw(uint256 amount) public nonReentrant { ... }Termes Liés
Pratique ce concept sur Solingo
Maîtrise Reentrancy avec des exercices interactifs et un IDE intégré.
Commencer gratuitement