# Les 10 Vulnerabilites Solidity les Plus Courantes
La securite des smart contracts est primordiale. Voici les 10 vulnerabilites les plus frequentes en 2026, avec code vulnerable et solutions.
1. Reentrancy
Risque : Appel recursif avant mise a jour de l'etat.
// ❌ VULNERABLE
function withdraw(uint amount) public {
require(balances[msg.sender] >= amount);
(bool success,) = msg.sender.call{value: amount}("");
balances[msg.sender] -= amount; // Trop tard !
}
// ✅ SECURISE
function withdraw(uint amount) public {
require(balances[msg.sender] >= amount);
balances[msg.sender] -= amount; // D'abord l'effet
(bool success,) = msg.sender.call{value: amount}("");
require(success);
}
2. Access Control
Risque : Fonctions critiques sans restriction.
// ❌ VULNERABLE
function mint(address to, uint amount) public {
balances[to] += amount;
}
// ✅ SECURISE
address public owner;
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
function mint(address to, uint amount) public onlyOwner {
balances[to] += amount;
}
3. Integer Overflow (pre-0.8.0)
Depuis Solidity 0.8.0, protection automatique. Mais attention aux blocs unchecked !
4. Timestamp Manipulation
Risque : Les mineurs peuvent manipuler block.timestamp (±15 secondes).
// ❌ VULNERABLE pour randomness
function random() public view returns (uint) {
return uint(keccak256(abi.encodePacked(block.timestamp)));
}
// ✅ Utiliser un oracle (Chainlink VRF)
5. tx.origin pour Auth
Risque : tx.origin peut etre exploite via phishing.
// ❌ VULNERABLE
function withdraw() public {
require(tx.origin == owner);
// Phishing possible !
}
// ✅ SECURISE
function withdraw() public {
require(msg.sender == owner);
}
Conclusion
Utilisez Slither, Foundry fuzz testing et audits professionnels pour detecter ces vulnerabilites.
Pratiquez sur Solingo avec nos 60 challenges de securite !