La plupart des drains de wallet que nous investiguons ont la même cause racine : l'utilisateur a signé une approval de token vers un contrat malicieux, et l'attaquant a drainé les actifs des semaines plus tard.
Ce pattern a un nom, l'approval phishing, et il est responsable d'une part importante de la valeur perdue chaque année dans les arnaques crypto. La bonne nouvelle, c'est qu'il est évitable, et que la prévention ne demande aucune technologie nouvelle. Elle demande la même discipline que celle qui a rendu les password managers normaux.
Comment l'attaque fonctionne
Les chaînes EVM ont une fonction approve() (et ses cousines NFT). Quand vous l'appelez, vous donnez à un smart contract le droit de bouger des tokens hors de votre wallet, jusqu'à un montant spécifié, jusqu'à révocation.
Ce mécanisme est fondamental à la DeFi. Chaque swap sur Uniswap, chaque dépôt dans Aave, chaque listing NFT sur OpenSea commence par une approval. Sans elle, le protocole ne pourrait pas bouger vos tokens pour faire ce que vous lui demandez.
L'exploit retourne le mécanisme contre vous :
- L'attaquant monte un site de phishing, fausse page de mint, faux claim d'airdrop, prompt « vérifie ton wallet ».
- Vous connectez votre wallet. Le site demande immédiatement une approval.
- L'approval a l'air normale dans le pop-up du wallet.
- Vous signez.
- Des heures, des jours ou des semaines plus tard, l'attaquant appelle
transferFrom()sur le contrat approuvé et draine vos tokens.
La transaction qui vous draine est signée par l'attaquant, pas par vous. Il n'y a pas de second prompt. Le temps que votre wallet montre la perte, les fonds sont déjà dans un mixer.
Pourquoi ça marche
L'approval phishing est efficace pour trois raisons :
L'UI cache ce qui se passe. La plupart des pop-ups affichent « Approve » avec une adresse de contrat et un token. Le montant est souvent 2^256 - 1, « unlimited », rendu en hex opaque. Peu d'utilisateurs distinguent « swap 0,1 ETH » de « approve unlimited USDC à 0xA1B2… ».
Le dommage est différé. Un swap échoue dans la même transaction. Une approval-phishing réussit silencieusement et attend que votre solde vaille la peine d'être pris. Quand la victime remarque, elle a déjà oublié sur quel site elle s'est connectée.
Le vecteur est partout. Chaque connexion à une dApp est un site de phishing potentiel. Un compte modérateur Discord compromis, une pub Google sponsorisée, un post Twitter d'un compte vérifié hijacké, l'attaquant n'a besoin que d'un seul clic.
Les projets NFT sont particulièrement exposés parce que toute leur communauté vit sur Discord et X, où les compromissions de comptes sont routinières.
Ce qui ne marche pas
Plusieurs défenses courantes sont plus faibles qu'elles n'en ont l'air :
- « Je signe seulement sur les sites officiels. » Les sites officiels sont régulièrement clonés sur des domaines quasi-identiques. Bookmarkez et vérifiez.
- « Mon hardware wallet me protège. » Un hardware wallet vous montre ce que vous signez, mais seulement si vous le lisez. La plupart des utilisateurs appuient sur « approve » sans lire.
- « Je vais juste faire attention. » Les sites de phishing sont conçus pour contourner « faire attention ». Toute une industrie de drainers est professionnelle et bien financée.
Ce qui marche
Cinq pratiques qui, combinées, rendent l'approval phishing très difficile à atterrir sur vous :
1. Séparez les wallets par rôle
Trésorerie, opérations, interaction dApp, fonds perso ne devraient jamais être la même adresse. Un drain du wallet d'interaction dApp ne doit pas toucher la trésorerie. On couvre l'architecture en détail dans la mission Wallet Setup.
Pour un particulier : un cold wallet avec les holdings long terme (hardware, ne se connecte jamais à des dApps), un hot wallet sans plus d'un mois de fonds courants, un burner avec 50 $ pour tester un nouveau mint.
2. Utilisez la simulation de transaction avant signature
Les extensions wallet comme Pocket Universe, Tally, ou la simulation intégrée dans MetaMask et Rabby vous disent ce qu'une transaction fait réellement avant signature. Elles attrapent la différence entre « swap » et « approve unlimited USDT à une adresse aléatoire ».
Cette seule habitude neutralise la majorité de l'approval phishing.
3. Lisez ce que votre hardware wallet affiche
L'écran d'un Ledger ou Trezor est la source de vérité. L'UI de la dApp peut mentir ; le device, non. Si le device affiche « Approve » et que vous attendiez « Swap », rejetez. À chaque fois.
4. Révoquez les approvals dont vous n'avez plus besoin
Des outils comme Revoke.cash listent toutes les approvals actives sur votre adresse et permettent de les révoquer en un clic. Faites-le mensuellement. Une approval révoquée ne peut plus être exploitée.
5. Utilisez des allowances limitées quand c'est supporté
Beaucoup de wallets et de dApps supportent désormais une allowance spécifique au lieu de unlimited. Utilisez-la. Le coût en confort, c'est une nouvelle approval la fois suivante ; le bénéfice sécurité, c'est un drain futur borné.
Pour les protocoles et les projets
Si vous opérez un protocole ou un projet, vos utilisateurs sont exposés à ce pattern par défaut, et ils vous blâmeront quand ça se produira. Trois choses à faire :
- Publiez en évidence les adresses canoniques de contrats à approver. Rendez la comparaison facile.
- Formez votre communauté. Un court post qui explique les approvals, avec recommandations d'outils de simulation, ne vous coûte rien et sauve les utilisateurs.
- Surveillez les wallets projet. Wallet Surveillance sur les adresses officielles donne une alerte précoce quand un attaquant approve en masse via un faux mint, parce que son contrat drainer apparaît dans les alertes.
Quand c'est arrivé
Si vous découvrez une vieille approval vers un contrat malicieux, révoquez-la avant de transférer des actifs vers ce wallet. Les drainers monitorent les wallets approuvés et déclenchent immédiatement sur les transferts entrants.
Si un drain a déjà eu lieu, une mission Réponse à incident se concentre sur le traçage des fonds à travers mixers et bridges. La récupération est possible dans certains cas, surtout quand les off-ramps coopèrent, mais seulement si le traçage commence en heures, pas en jours.
Le pattern est résolu. La discipline pour appliquer la solution ne l'est pas. Construisez la discipline une fois et l'approval phishing devient un non-événement.