Skip to content

Glossary

Read-Only Reentrancy

Variante de réentrance où un attaquant, dans une fenêtre d'état incohérent, exploite une fonction view renvoyant des données périmées sans ré-entrer aucune fonction modifiant l'état.

La read-only reentrancy exploite les fonctions view (en lecture seule) qui renvoient des données périmées pendant qu'une autre opération est encore en pleine exécution. Les reentrancy guards classiques nonReentrant protègent les fonctions modifiant l'état mais laissent les getters sans protection. Un attaquant peut donc déclencher un callback pendant une opération — par exemple le retrait de liquidité d'un pool de style Curve — et, depuis ce callback, appeler un getter de prix ou de parts qui lit un état à moitié mis à jour. Les protocoles en aval qui font confiance à ce getter, comme les marchés de prêt et les vaults, peuvent alors être mal valorisés et vidés.

Une série d'incidents en 2022 visant des marchés de prêt intégrés à Curve a mis cette classe en lumière. Les défenses consistent à étendre le verrou de réentrance aux fonctions view, ou à vérifier l'état du verrou du pool avant de lire une valeur rapportée.