L'access control est la discipline qui garantit que seules les adresses autorisées peuvent invoquer les fonctions privilégiées d'un smart contract, retirer des fonds, minter des tokens, mettre le protocole en pause, faire un upgrade.
L'access control cassé est l'une des classes de vulnérabilité à plus fort impact et la plus évitable. Les patterns classiques :
- Modificateur manquant : la fonction devrait avoir
onlyOwneret ne l'a pas. - Mauvais modificateur :
onlyAdminexiste mais est vérifié contre le mauvais rôle. - Initializable non initialisé : l'initializer d'un proxy peut être appelé par n'importe qui si le deployer oublie.
tx.originau lieu demsg.sender: permet à un contrat de phisher à travers un utilisateur victime.- Public au lieu d'internal : des fonctions utilitaires exposées par accident.
L'access control doit être exhaustif : chaque fonction qui change l'état a une décision d'autorisation explicite documentée dans l'audit, et chaque rôle privilégié a un porteur documenté (qui devrait en général être un multi-sig, pas une EOA).