Dans le monde des blockchains et plus particulièrement avec l’arrivée de la Finance Décentralisée (DeFi), les autorisations ou approbations (approvals) de contrat intelligent sont des éléments majeurs. Beaucoup de débutants donnent ces autorisations à des contrats sans comprendre réellement leur impact et offrent un accès souvent illimité aux fonds détenus ainsi qu’aux NFTs.
Qu’est ce qu’une autorisation (approval) d’un contrat intelligent ?
Le système des autorisations ou approvals a été implémenté par Ethereum grâce au langage Solidity dans les smart contract. Leurs buts est de permettre à un contrat intelligent d’interagir avec un jeton spécifique qui se trouve dans votre portefeuille. Cette interaction à généralement lieu quand un utilisateur souhaite échanger un jeton spécifique contre un autre.
Par exemple, vous avez des USDC et vous souhaitez faire un swap pour obtenir des DAI sur la plateforme Uniswap. Pour que cet échange puisse être réalisé, il faudra au préalable donner l’autorisation à Uniswap afin qu’il ait accès à vos USDC.
Pour que cette autorisation soit effective, vous allez donner l’autorisation avec le paramètre « limite de dépense maximum ». A l’issue, vous allez confirmer et moyennant des frais, écrire ces instruction sur la blockchain sur laquelle vous êtes actuellement en train d’interagir.
Nota : La majorité des plateformes d’échange décentralisées utilisent la quantité de dépense maximum, ceci généralement pour éviter de demander de nouvelles autorisations dans le futur. N’hésitez donc pas à modifier cette quantité de limite de dépense en fonction de vos besoins au moment de l’échange.
Ainsi, quand vous allez lancer l’échange, cela va se passer de la façon suivante :
- Demande de swap de 1000 USDC contre 1000 DAI avec signature de la transaction (vous)
- Vérification du solde USDC du portefeuille par le contrat intelligent
- Récupération des 1000 USDC qui se trouvent sur portefeuille
- Transfert des 1000 DAI qui se trouvent dans la pool du protocole vers le Wallet
Le tout se fait dans la même transaction et de façon transparente sur la blockchain. Ce qu’il faut noter, c’est que c’est le contrat qui va récupérer vos USDC et pas vous qui allez les envoyer.
Le cheminement lors d’une approbation
On peut donc récapituler le cheminement d’une autorisation (approval) en deux phases :
- Approbation : Cette phase consiste à donner la permission au contrat d’accéder à un jeton en particulier. Durant celle-ci, vous avez également la possibilité de modifier le montant de jetons accessibles (entre 0 et illimité).
- Confirmation : La seconde étape va permettre de signer et donc de confirmer cette approbation en inscrivant celle-ci dans la blockchain. Une fois que le bloc contenant la transaction sera validé, l’autorisation deviendra pleinement effective.
Normalement, vous devriez avoir pris conscience du risque de laisser des approbations illimitées ouvertes sur ses wallets. En effet, alors que beaucoup de personnes pensent avoir leurs fonds en sécurité sur leurs cold wallet comme Ledger, SafePal ou autre, vous êtes en réalité totalement vulnérable en cas de piratage du smart contract comme ce fût le cas avec Fucombo par le passé.
Points clés :
- Donner une autorisation permet à un contrat d’interagir avec un jeton spécifique de votre wallet ;
- Le processus de création d’une autorisation se fait en deux étapes : L’Approbation et la Confirmation (signature et propagation à travers la blockchain) ;
- Autoriser un contrat intelligent sur un cold Wallet (Ledger, Trezor, SafePal, …) rend le portefeuille vulnérable et peut occasionner la perte totale des fonds liés à cette approbation.
Un concept multi-chain qui s’étend à toutes les blockchains EVM compatibles
Aujourd’hui, ce concept d’approbation est utilisé sur l’ensemble des blockchains dites EVM compatibles. Ce sont des blockchains qui fonctionnent de façon similaire à Ethereum et qui ont copié certaines parties du code source d’Ethereum, dont celui de l’Ethereum Virtual Machine. De ce fait, elles utilisent des standards similaires au niveau des jetons par exemple :
- ERC-20 pour Ethereum
- BEP-20 pour la BNB Chain
Ainsi, on retrouve donc une multitude de blockchain comme :
- BNB Chain (BNB)
- Fantom (FTM)
- Polygon (MATIC)
- Avalanche C-Chain (AVAX)
Ce qui implique donc de penser à régulièrement nettoyer vos autorisations sur ces différentes blockchains.
Comment révoquer les autorisations (approvals) sur ses wallets ?
Comme nous l’avons vu, les approbations sont inscrites dans la blockchain pour être utilisables et utilisées. Avec le temps et le manque d’attention, il se peut que les autorisations se multiplient sur une ou plusieurs de vos adresses.
Pour révoquer ces autorisation (approvals), il faut donc réaliser le cheminement inverse en écrivant de nouveau dans la blockchain afin de proscrire la ou les autorisations. Par chance, les outils sont aujourd’hui beaucoup plus nombreux qu’ils l’étaient par le passé. Ainsi, il est possible d’utiliser des outils généralistes et multi-chain pour révoquer les approbations comme :
Les explorateurs ont eux aussi mis en place ces outils pour vous permettre de faire du nettoyage sur différentes blockchains :
- Ethereum : Ether Scan
- BNB Chain : BSC Scan
- Avalanche C-Chain : Snow Trace
- Polygon : Polygon Scan
- Fantom : FTM Scan
- Arbitrum : Arbi Scan
Il est donc important de vérifier vos adresses crypto afin d’avoir un aperçu des autorisations octroyées aux contrats. Il faut aussi noter que chaque révocation vous coûtera des frais de transaction car il faut écrire dans la blockchain pour que ce soit valide.
Astuce : En fonction de la quantité d’approbations et de la blockchain, il peut être plus intéressant d’abandonner une adresse. Pour cela il faudra simplement transférer les fonds vers un nouveau portefeuille totalement vierge. Une technique plus compliquée avec les cold wallets car il faudra réinitialiser votre matériel puis générer une nouvelle seed et l’importer.
Le cas du SetApprovalForAll et sa dangerosité pour les NFTs
Si vous suivez régulièrement l’actualité, vous avez probablement dû voir passer cette fameuse fonction SetApprovalForAll qui à permis de vider de nombreux portefeuille de leurs NFTs. C’est une fonction qui a vu le jour grâce au standard ERC-721 (les NFTs). Comme la documentation officielle l’indique, elle permet de définir ou annuler l’approbation d’un opérateur donné et l’autorise à transférer tous les jetons de l’expéditeur en son nom.
Lorsque vous vendez des NFT sur une place de marché, vous devez autoriser cette place de marché à transférer les articles vendus de votre adresse à celle de l’acheteur. C’est là qu’entre en jeu la fonction SetApprovalForAll. Vous faites confiance à la place de marché, vous l' »autorisez » à vendre vos NFT (pas tous vos NFT, mais les NFT que vous possédez dans le contexte de ce contrat). La place de marché est ce que l’on appelle « l’opérateur » dans ce contexte.
En d’autre terme, donner une autorisation de type SetApprovalForAll qui permet à la plateforme d’envoyer vos NFT une fois vendu. Néanmoins, si ce genre d’autorisation est signée avec un smart contract corrompu, vous donnez l’accès intégrale aux jetons non-fongibles qui se trouvent dans votre wallet.
Il suffira alors simplement que les pirates émettent une transaction par l’intermédiaire du contrat pour déplacer les NFTs (comme lors d’une vente) sur un autre wallet. Le tout bien évidemment sans aucune confirmation de votre part vu que vous avez donné au préalable cette autorisation. C’est pour cette raison que l’on voit autant de piratage de compte ces derniers mois liés à cette fonction.
Encore une fois, notez qu’un cold wallet comme Ledger ne vous protégera pas contre ce type d’attaque. C’est pour cette raison que vous devez vous en servir exclusivement comme moyen de stockage..
Les attaques de phishing et la signature des autorisations (approvals et setApprovalForAll)
La majorité des attaques de phishing qui ont lieu sur des sites réputés crypto demandent dans un premier temps de connecter votre wallet puis de signer une autorisation. Vous l’aurez compris, cette autorisation va ensuite déverrouiller l’accès à vos fonds ainsi que vos NFT pour permettre aux pirates de subtiliser vos fonds.
Ce fût le cas par exemple des sites suivants :
Mais les pirates redoublent d’ingéniosité pour ce genre de choses. En effet, ce sont aussi de nombreux Discord qui sont victimes de ce genre de phénomènes. Généralement, l’un des administrateurs (ou modérateur) du Discord en question va poster un lien assez inattendu en indiquant un mint gratuit d’un NFT. Vu que l’annonce est assez inattendue et les communautés souvent très impliquées, certains ne tardent pas et se rendent sur le site en question.
Ils vont dans un premier temps connecter leur wallet avant de signer également une transaction qui permet un accès intégral au portefeuille. Malheureusement, l’effet est quasi immédiat et les comptes compromis perdent souvent l’intégralité des NFT qu’ils possèdent ainsi que certains jetons préalablement ciblés. Une raison d’être encore plus vigilant et de ne pas signer n’importe quelle transaction si vous ne connaissez pas ses effets.
Pour conclure, vous devez être particulièrement rigoureux sur les autorisations que vous donnez aux contrats. Il vaut mieux éviter de stocker des fonds sur des portefeuilles qui ont des approbations en cours. Il est aussi très important de noter que les portefeuilles de stockages à froid (cold wallet) sont fait pour du stockage. Vus devez donc éviter de vous en servir pour faire vos emplettes habituelles sur la DeFi sous peine de lourdes pertes.
Depuis 2017, je ne cesse d'explorer l'univers du Bitcoin, de la blockchain des crypto monnaies, des NFT et plus récemment, celui du Web3. Après avoir fondé Au Coin du Bloc en 2021, je met à disposition mes connaissances et tente de vulgariser les aspects obscurs pour rendre abordable et compréhensible cet univers naissant dans lequel je crois fermement.