Reentrancy (Réentrance)

Securite

English: Reentrancy

Definition

Vulnérabilité permettant à un attaquant d'appeler récursivement une fonction avant que l'exécution initiale ne soit terminée. Cause du hack The DAO (2016, $60M). Protection : Checks-Effects-Interactions pattern, ou modifier `nonReentrant` (OpenZeppelin). Toujours mettre à jour l'état avant les appels externes.

English version

Vulnerability allowing attacker to recursively call function before initial execution completes. Caused The DAO hack (2016, $60M). Protection: Checks-Effects-Interactions pattern, or `nonReentrant` modifier.

Exemple de Code

// ❌ VULNERABLE
function withdraw(uint amount) public {
    require(balances[msg.sender] >= amount);
    (bool success,) = msg.sender.call{value: amount}(""); // Appel externe AVANT maj état
    require(success);
    balances[msg.sender] -= amount; // Trop tard !
}

// ✅ SECURE : Checks-Effects-Interactions
function withdraw(uint amount) public {
    require(balances[msg.sender] >= amount); // Check
    balances[msg.sender] -= amount;          // Effect
    (bool success,) = msg.sender.call{value: amount}(""); // Interaction
    require(success);
}

Pratique ce concept sur Solingo

Maîtrise Reentrancy (Réentrance) avec des exercices interactifs et un IDE intégré.

Commencer gratuitement