La reentrancy est la vulnérabilité originelle de la DeFi, celle qui a fait tomber The DAO en 2016 et a directement causé le split Ethereum / Ethereum Classic.
Le pattern : un contrat appelle une adresse externe (par exemple pour envoyer de l'ETH ou des tokens), et le contrat receveur ré-appelle la fonction d'origine avant que le premier appel n'ait fini de mettre à jour l'état. L'attaquant draine les fonds en ré-entrant la même fonction à répétition, chaque fois avant le décrément du solde.
Le correctif, c'est le pattern checks-effects-interactions : valider les entrées, mettre à jour l'état, puis faire les appels externes. Solidity moderne propose aussi des modificateurs ReentrancyGuard, mais ils traitent le symptôme, pas la cause.
La reentrancy ne se limite pas aux transferts d'ETH. La cross-function reentrancy, la read-only reentrancy et la cross-contract reentrancy sont toutes des patterns d'attaque actuels. Tout schéma où l'état peut être observé ou modifié pendant un appel externe est un candidat.