Une approbation de token ERC20 est une autorisation que vous signez et qui permet à un smart contract de dépenser des tokens depuis votre wallet. Révoquer les approbations anciennes ou illimitées fait partie de l’hygiène courante d’un wallet, cela limite ce qu’une dapp compromise peut vider, et des outils comme Revoke.cash ou le vérificateur d’approbations de tokens d’Etherscan en font une tâche de cinq minutes. La révocation ne ferme que les approbations on-chain, pas les signatures permit off-chain, qui représentent le risque le plus important que la plupart des utilisateurs ne voient jamais.
Points clés
- Une approbation de token est une autorisation que vous signez, et les approbations illimitées permettent à un contrat de continuer à dépenser vos tokens jusqu’à ce que vous les annuliez.
- Revoke.cash et le vérificateur d’approbations de tokens d’Etherscan lisent les mêmes données de blockchain, choisissez donc selon l’interface et le modèle de confiance plutôt que selon les fonctionnalités.
- Le phishing par approbation utilise des signatures permit et Permit2 qui ressemblent à des connexions, et révoquer les approbations ERC20 ne fait rien pour les supprimer.
- Considérez le nettoyage comme une hygiène courante, regroupez les actions lorsque c’est possible et prévoyez le gas, au lieu d’attendre la panique après le piratage d’un protocole.
Qu’est-ce qu’une approbation de token, et pourquoi voudriez-vous en révoquer une ?
Lorsque vous échangez un token sur une plateforme d’échange décentralisée, prêtez une garantie sur un marché de prêt ou déplacez des actifs vers un produit de rendement, le contrat de destination ne peut généralement pas prélever vos tokens tout seul. Les tokens ERC20 ont été conçus avec un modèle simple d’allocation : le contrat du token ne sait rien de l’application que vous utilisez, et l’application ne peut pas déplacer de tokens à moins que vous ne l’ayez explicitement autorisée à le faire. Ainsi, avant une transaction ou un dépôt, votre wallet vous demande de signer une transaction d’approbation qui indique, en substance, que le routeur Uniswap peut dépenser jusqu’à X de mes USDC, ou un montant illimité.
Cette approbation signée est stockée dans le contrat du token lui-même, on-chain, et elle y reste jusqu’à ce que vous l’annuliez. Si vous avez approuvé un routeur pour 100 USDC et en avez utilisé 95, les 5 restants demeurent comme allocation. Si vous avez approuvé un montant illimité, cette allocation existe pour toujours jusqu’à ce que vous la révoquiez, ce qui est le cœur du problème. Les wallets comme MetaMask l’affichent comme « illimité » plutôt que comme un nombre gigantesque, en partie pour masquer à quel point l’utilisateur est exposé.
Les approbations ne sont pas mauvaises en elles-mêmes. C’est ainsi que fonctionne la DeFi. Le risque vient de trois sources. Premièrement, la dapp que vous avez approuvée est ensuite piratée et l’attaquant appelle l’allocation encore active. Deuxièmement, la dapp est une arnaque depuis le premier jour et l’approbation constitue toute la charge utile. Troisièmement, vous avez utilisé un protocole il y a des mois, vous l’avez oublié, et ce protocole a depuis changé de mains, été mis à niveau ou migré. Aucun de ces problèmes n’est théorique : l’incident Badger DAO de 2022 a entraîné une perte d’environ 120 millions de dollars, en partie parce que d’anciennes approbations sur le routeur Badger ont été exploitées, et d’innombrables pertes personnelles remontent à des approbations accordées à des sites de phishing.
Ce qui peut réellement mal tourner : la véritable surface de risque
La façon la plus claire de penser le risque d’approbation consiste à séparer trois couches : le contrat dépensier, le contrat du token et la couche de signature. Chaque couche a un rayon d’impact différent en cas de défaillance, et la plupart des guides les confondent en une seule. Elles ne sont pas identiques.
Le contrat dépensier. Il s’agit de la dapp, du routeur ou du coffre auquel vous avez donné l’autorisation. Si ce contrat est mis à niveau, exploité ou simplement victime d’un rug pull via ses clés d’administration, toute allocation qui le cible devient alors une allocation pointant vers l’attaquant. Avec une approbation illimitée, l’attaquant peut vider tous les tokens de ce type de votre wallet en un seul appel, sans autre signature nécessaire.
Le contrat du token. L’approbation est enregistrée sur le token lui-même. Révoquer signifie envoyer une nouvelle transaction au token qui remet à zéro votre allocation pour ce dépensier. Tant que cette transaction n’est pas minée, l’ancienne allocation reste active. Il n’y a pas de bouton « annuler », seulement une nouvelle transaction qui écrase l’ancienne allocation.
La couche de signature. C’est la partie que la plupart des utilisateurs manquent. Les wallets et dapps modernes utilisent des signatures off-chain (eth_sign, EIP 2612 permit, Permit2 d’Uniswap) afin que vous puissiez accorder une approbation sans payer de gas, ou même sans envoyer de transaction du tout. Ces signatures ne sont pas stockées on-chain comme des approbations, elles vivent dans l’historique du signataire. Une signature malveillante peut donner à un dépensier la permission de prélever des tokens depuis votre wallet, et révoquer vos approbations on-chain ne change absolument rien à cela. La solution est un outil différent, que nous couvrons ci-dessous.
Le cadrage honnête : la révocation est nécessaire, mais pas suffisante. Elle ferme la fuite lente des allocations on-chain résiduelles, mais elle ne ferme pas la porte qu’une signature permit a ouverte hier.
Approbations infinies ou finies : lesquelles sont réellement plus sûres ?
La plupart des wallets utilisent par défaut l’option « illimitée » pour des raisons de commodité, car l’alternative consiste à signer une nouvelle approbation chaque fois que votre solde change. Du point de vue de la sécurité, une approbation finie est strictement plus sûre, mais elle n’est pas gratuite.
Une approbation infinie vous coûte une transaction la première fois que vous utilisez une dapp, puis aucune transaction récurrente, car l’allocation est suffisamment élevée pour couvrir toute interaction future. L’inconvénient est exactement le risque de longue traîne décrit plus haut : une dapp que vous avez utilisée une fois en 2021 dispose encore d’un chèque en blanc sur vos tokens en 2026. À l’inverse, une approbation finie vous coûte une transaction à peu près chaque fois que vous déposez ou tradez, puisque l’allocation est consommée et doit être rechargée.
En pratique, les utilisateurs prudents choisissent un compromis. Ils n’accordent des approbations infinies qu’à un petit ensemble de contrats éprouvés avec lesquels ils interagissent chaque semaine, et des approbations finies pour tout le reste. Revoke.cash facilite cet audit, car il affiche chaque dépensier, l’allocation et le token sur un seul écran.
Une nuance : certains tokens implémentent ERC20 de manière non standard. USDT, par exemple, n’autorise pas les modifications directes d’approbation d’une valeur non nulle vers une autre valeur non nulle. Vous devez d’abord mettre l’allocation à zéro, attendre que cette transaction soit minée, puis définir la nouvelle allocation. Revoke.cash gère cela automatiquement ; si vous le faites manuellement via Etherscan, vous devez d’abord définir l’allocation à zéro.
Revoke.cash ou le vérificateur d’approbations de tokens d’Etherscan
Ce sont les deux outils sur lesquels les débutants tomberont en premier, et ils ne sont pas tant concurrents que deux vues des mêmes données. Tous deux lisent vos événements d’approbation on chain directement depuis Ethereum, donc aucun des deux outils ne conserve vos fonds et aucun ne peut signer quoi que ce soit pour vous.
Revoke.cash est une dapp dédiée qui liste tous les tokens que vous avez déjà approuvés, y compris les tokens ERC20, les NFT ERC721 et ERC1155, ainsi que sur des chains au-delà d’Ethereum, la plupart des grandes EVM et quelques chains non EVM. Il regroupe les allocations par contrat dépensier, affiche des étiquettes de risque pour les protocoles connus et fait remonter les allocations pour des tokens que vous ne détenez plus, ce qui constitue l’exposition cachée la plus courante. Il fournit aussi un lien vers une transaction de révocation préremplie dans votre wallet. Le site est open source et existe depuis les débuts de la DeFi, ce qui compte pour la confiance.
Le vérificateur d’approbations de tokens d’Etherscan se trouve dans l’explorateur de blocs Etherscan. Vous connectez une adresse de wallet et il liste toutes les approbations ERC20 liées à cette adresse, avec des liens vers les contrats de token et de dépensier concernés. Il est plus conservateur et moins riche en fonctionnalités, mais il bénéficie de la confiance associée à la marque Etherscan et constitue un second avis utile si un résultat de Revoke.cash paraît étrange.
Les deux outils exigent que vous signiez une transaction de révocation dans votre propre wallet. Vous pouvez aussi faire la même chose en appelant « approve(spender, 0) » directement sur le contrat du token via l’onglet write contract d’Etherscan, mais cette méthode est plus facile à mal exécuter et plus difficile à auditer. Pour les débutants, Revoke.cash est l’option par défaut la plus claire.
Le piège des signatures : pourquoi révoquer ne suffit pas
Les signatures Permit (EIP 2612) et Permit2 d’Uniswap ont été introduits pour rendre les approbations moins coûteuses ou sans gas. Au lieu d’envoyer une transaction d’approbation, vous signez un message off chain qui dit « J’autorise le dépensier X à déplacer jusqu’à Y de mon token Z ». Ce message est ensuite soumis par le dépensier, et le contrat du token le vérifie on chain puis définit l’allocation pour vous, dans la même transaction que l’action qui l’utilise. Du point de vue de l’utilisateur, l’UX est plus fluide : moins de confirmations, pas de gas séparé.
Le piège est qu’un site malveillant peut aussi vous demander exactement la même signature, avec une allocation beaucoup plus élevée et une expiration beaucoup plus lointaine. La signature ne fait rien tant que le dépensier ne la soumet pas, mais une fois soumise, elle devient indiscernable de toute autre approbation on chain. Pire encore, certains kits de phishing demandent des signatures permit qui ne sont pas utilisées immédiatement, mais revendues sur le dark web pour être utilisées plus tard, une fois que l’utilisateur est passé à autre chose.
Révoquer vos approbations on chain ne les affecte pas. L’allocation créée par un permit n’existe on chain qu’après sa soumission, et une fois qu’elle existe, elle apparaît dans Revoke.cash comme n’importe quelle autre approbation, vous pouvez donc toujours la révoquer. Mais la fenêtre dangereuse se situe avant la soumission, lorsque ni Etherscan ni Revoke.cash ne peuvent la voir. Cette fenêtre ne se ferme qu’au niveau de la signature.
Les outils de défense pratiques se situent au niveau du wallet : des outils comme Scam Sniffer, Pocket Universe, Blowfish, ainsi que les avertissements intégrés dans des wallets comme Rabby et les versions plus récentes de MetaMask, interceptent les signatures suspectes avant que vous ne les signiez. La discipline à adopter est simple : ne signez jamais un permit ou une approbation off chain sauf si vous comprenez parfaitement le message, le dépensier et l’allocation qu’il accorde. Lisez les écrans d’avertissement affichés par votre wallet. Si la dapp demande un permit alors que vous vouliez seulement consulter un site, c’est le signal de phishing.
Une routine de nettoyage sûre et reproductible
L’objectif d’une routine est de supprimer la décision « dois-je révoquer ceci » au moment même, car c’est là que vous êtes le plus susceptible de faire une erreur. Exécutez cette routine chaque trimestre, ou après toute interaction avec un protocole dont vous n’êtes pas sûr à 100 %.
Étape 1 : ouvrez Revoke.cash, ou le vérificateur d’approbations de tokens d’Etherscan en secours, et connectez le wallet que vous voulez auditer. Passez en revue la liste des dépensiers. Tout élément que vous ne reconnaissez pas, ou tout élément pointant vers un protocole que vous n’utilisez plus, est candidat à la révocation.
Étape 2 : triez par étiquette de risque. Revoke.cash signale les protocoles connus et les dépensiers malveillants connus. Tout élément dans cette dernière catégorie doit être révoqué immédiatement, quelle que soit la taille de l’allocation.
Étape 3 : pour les dépensiers restants, choisissez entre approbation infinie et finie. Si le protocole fait partie de votre rotation hebdomadaire, conservez l’approbation infinie et notez-la simplement. Si vous l’utilisez une fois par mois ou moins, définissez l’allocation au montant exact que vous comptez utiliser, ou ramenez-la à zéro et réapprouvez plus tard.
Étape 4 : regroupez lorsque c’est possible. Revoke.cash vous permet de mettre en file d’attente plusieurs révocations dans une seule transaction avec certains wallets, ce qui réduit nettement le gas. Sur Ethereum mainnet, révoquer une douzaine d’approbations une par une peut coûter de 20 $ à 60 $ en gas aux heures chargées, tandis qu’une version groupée coûte une seule base fee plus un léger surcoût. Il n’y a aucune pression temporelle on chain sur les révocations, vous pouvez donc attendre une période de gas faible si le coût compte.
Étape 5 : après la révocation, relancez le vérificateur pour confirmer que chaque allocation ciblée affiche désormais zéro. Ensuite, auditez l’historique de vos signatures dans votre wallet, Rabby et MetaMask exposent tous deux les messages récemment signés, et signalez tout ce qui paraît inconnu. Tout élément que vous ne pouvez pas expliquer doit être traité comme compromis, et vous devriez envisager de déplacer les fonds vers un nouveau wallet.
Comment suivre intelligemment l’hygiène des approbations
L’hygiène des approbations n’est pas un bouton de panique à utiliser une seule fois. C’est une habitude, comme la rotation des clés API ou la vérification des relevés bancaires, et elle est plus utile quand elle devient routinière. Zippfeed met en avant les titres liés aux wallets et à la DeFi avec un score de sentiment (bullish, neutral ou bearish) et une note d’importance, afin que vous puissiez repérer un exploit majeur de protocole dès qu’il est signalé et auditer vos anciennes autorisations avant que le cycle médiatique ne passe à autre chose.