Aller au contenu
Boring Security
Profil
Meilleures Pratiques

Tout sur les contrats proxy

Traduit parZaiku
PARTAGER

Peut-être avez-vous déjà entendu parler des contrats proxy, et on vous a peut-être dit qu'ils sont dangereux ou que vous « ne pouvez pas leur faire confiance ». Qui utiliserait un contrat proxy et pourquoi ? Cela va-t-il à l'encontre de l'éthique du web3 ? Est-ce vraiment si dangereux ? Dans cet article, nous cherchons à répondre à ces questions et à partager d'autres informations importantes concernant les contrats proxy, ainsi qu'à expliquer comment vous devriez les considérer et les traiter en tant qu'utilisateur normal du web3. C’est parti !

Mais d’abord, qu’est-ce qu’un contrat proxy ?

Normalement, les contrats sur le réseau Ethereum ne peuvent pas être modifiés, ce qui signifie qu'ils ne peuvent pas être mis à jour une fois déployés. Après tout, les blockchains sont généralement définies comme un « registre public immuable », mais les développeurs peuvent contourner ces limitations en utilisant le modèle de contrat proxy. Un contrat proxy envoie (ou délègue) toutes ses fonctionnalités à un autre smart contract, appelé contrat d'implémentation.

Le contrat d'implémentation (le contrat qui contient tout le code qui « effectue les actions ») peut ensuite être remplacé ou « mis à niveau » suivant les besoins. Les développeurs déploient simplement une nouvelle version du contrat d'implémentation sur la blockchain et mettent à jour le contrat proxy pour envoyer toutes les demandes reçues au deuxième contrat d'implémentation (voir le schéma ci-dessous). Un exemple d'une telle demande pourrait être le transfert d'un actif comme un token ou un NFT.

Une bonne analogie pour un contrat proxy serait l'achat d'un terrain. Le terrain agit comme le contrat proxy, déléguant toutes les fonctions utiles à la maison elle-même, où les propriétaires sont libres de changer le toit, de rénover la cuisine, etc… Cependant, peu importe l’ampleur des rénovations ou si vous mettez une toute nouvelle maison sur la propriété, l'adresse ne change pas !

ProxyHouse.jpg

Projets utilisant des contrats proxy

Les contrats proxy sont-ils dangereux ? Devriez-vous investir dans des projets NFT qui utilisent des contrats proxy ? Qu'en est-il des marketplaces, des tokens ou même des protocoles DeFi ? Avant de répondre à ces questions, examinons quelques exemples de contrats proxy:

10KTF - Ce smart contract est peut-être l'un des contrats NFT les plus notables utilisant ce modèle de contrat proxy pour permettre la mise à niveau. Ils peuvent mettre à jour leurs contrats pour ajouter des fonctionnalités comme la délégation de portefeuille, faire respecter des redevances ou l'intégration de nouveaux standards.

USDC - L'un des plus importants stablecoins, l’USDC, utilise également le modèle de contrat proxy. En fait, ils expliquent leurs raisons et leur mise en œuvre dans un article de blog de 2020 intitulé « Mise à niveau d’un token ERC-20 à plusieurs milliards ». Ils ont exprimé leurs préoccupations avec cette phrase percutante tirée de l'article cité ci-dessus : « La capitalisation boursière de l'USDC avait atteint 1,4 milliard de dollars au moment de la mise à niveau et nos carrières étaient en jeu — personne ne voulait entrer dans l'histoire comme le développeur qui a brûlé un milliard de dollars. »

Blur - Blur est une marketplace NFT qui utilise des contrats proxy dans pratiquement tous ses smart contracts déployés, à l'exception du contrat du token $BLUR. Cela peut être dangereux, car les utilisateurs ont déjà approuvé des actifs via l'adresse proxy, et maintenant un nouveau contrat d'implémentation a la capacité de retirer ces actifs des portefeuilles des utilisateurs. Si le nouveau contrat d'implémentation de Blur comporte des bugs, des centaines de milliers de NFTs approuvés via le contrat proxy de Blur seraient en danger. Des personnes mal intentionnées pourraient voler les NFT des portefeuilles de ces utilisateurs, ce qui signerait la fin du marché des NFT. Ce scénario apocalyptique est tout de même hautement improbable. Des garde-fous comme les fonctions de coupe-circuit, les audits de contrats et les hackers éthiques interviendraient probablement pour stopper une attaque avant qu'elle ne se produise.

Compound Finance - Bien qu'il soit difficile de savoir quelle gouvernance entoure la mise à jour de Blur et 10KTF, puisqu'il s'agit d'entreprises privées, on peut dire sans risque que ce processus est probablement moins rigoureux (et certainement moins transparent !) que ceux des DAO plus matures. Un exemple notable est Compound Finance, une plateforme de prêt DeFi avec plus d'un milliard de dollars en valeur totale bloquée (TVL). Elle est reconnue pour son approche extrêmement orientée sur la sécurité. Son processus de gouvernance, par exemple, n'autorise pas de mise à jour du protocole sans un préavis d'au moins une semaine, et le code même permet de s’assurer de cela.

Pourquoi des projets les utilisent ?

Bien qu'il existe de nombreuses raisons pour lesquelles les contrats proxy sont utilisés, les principales sont :

  • Mise à niveau: C'est la raison principale. Le contrat d'implémentation peut être mis à jour sans affecter le contrat proxy ou les utilisateurs. Les projets ne veulent pas perdre d'utilisateurs en leur demandant de réapprouver des actifs déjà existants, de migrer des fonds, etc… Les utilisateurs ne sont pas impactés par les mises à jour des contrats d'implémentation, car le contrat proxy ne stocke que l'adresse du contrat d'implémentation, et non son code. Les utilisateurs peuvent donc continuer à interagir avec le contrat proxy comme d'habitude, même si le contrat d'implémentation a été mis à jour. 
     
  • Cacher des fonctionnalités futures: Peut être que l'équipe de projet planifie d'ajouter des fonctionnalités au contrat au fil du temps, mais ne sont pas encore prêt à les rendre publique immédiatement. Grâce aux contrats proxy, ils peuvent simplement déployer ces fonctionnalités au fur et à mesure, sans avoir à créer des méthodes de remplacement pointant vers d'autres contrats. Les contrats proxy permettent ainsi de publier de manière soudaine de nouvelles fonctionnalités pour les projets blockchain.
     
  • Prévoir l'avenir: Même si cela a déjà été évoqué, personne ne sait ce que l'avenir réserve. Peut-être qu'un nouveau type d'actif ou de NFT nécessitera d’être gérer d’une façon particulière sur Blur. De nouvelles fonctionnalités peuvent également être développées. Par exemple, les Cryptopunks ont été lancés avant la norme ERC-721 et dépendent d'un « contrat d'encapsulation » tiers pour être échangés sur des plateformes comme Opensea. Cela est dû au fait que la norme ERC-721 n'existait pas lors de leur lancement. Les projets crypto souhaitent en général éviter d'avoir plusieurs versions de contrat, car cela fragmente la liquidité pour la DeFi et complique la provenance des NFTs. S'ils avaient utilisé un contrat proxy, Cryptopunks auraient pu, en théorie, simplement le mettre à jour pour tenir compte de ce changement ! 

La plupart de ces raisons semblent être différentes façons de dire la même chose, mais les différences sont subtiles. Pour certains projets, avoir exactement la même adresse de contrat n'est pas toujours nécessaire; leurs utilisateurs peuvent interagir avec le contrat à travers une interface utilisateur spécifique ou un site web. À moins que leurs utilisateurs n'utilisent des signets sur les smart contracts (une stratégie de sécurité que nous enseignons dans notre cours NFT Security 101), ils ne s'en rendraient probablement pas compte ! Mais d’autres projets pourraient avoir besoin de préserver la provenance et l’uniformité de leur tokens!

Comment savoir si un contrat est un contrat proxy ?

Il existe deux façons de savoir si un contrat est un contrat proxy. Bien sûr, il existe toutes sortes d'outils d'analyse blockchain, mais nous recommandons Etherscan pour la plupart des gens.

Méthode 1 : Tout d'abord, accédez au contrat sur Etherscan. Pour cet exemple, nous allons utiliser un contrat proxy que nous utilisons souvent quand nous prenons des exemples lors de nos cours NFT Security 102, Helix.
Allez dans l'onglet Contract. Vous verrez deux boutons que vous ne verrez pas sur la plupart des contrats : les boutons « Write as Proxy » et « Read as Proxy ».

writeasproxy.png

Une capture d'écran d'un contrat identifié par l'équipe d'Etherscan comme étant un Proxy vérifié.

Utilisez le bouton « Write as Proxy » pour interagir avec des contrats proxy si jamais vous en avez besoin.

Méthode 2: L'autre manière de reconnaître un proxy est lorsque Etherscan indique qu'il s'agit d'un proxy, mais que le développeur n'a pas explicitement choisi de rendre les boutons mentionnés précédemment disponibles sur Etherscan. À la place, il y aura une petite bannière en haut de la page du contrat, qui ressemble à ceci, indiquant que le contrat « peut » être un contrat proxy :

maybeproxy.png

Un contrat que Etherscan considère comme étant un proxy, mais que le développeur n'a pas confirmé ni soumis à Etherscan en tant que tel.

Les risques liés à l’utilisation des contrats proxy

Maintenant que vous savez qu'il s'agit d'un contrat proxy, quels sont les risques ? Nous avons déjà évoqué certains d'entre eux dans la section « Projets utilisant des contrats proxy », mais énumérons-les ci-dessous :

  1. Le portefeuille de déploiement/admin du développeur pourrait être compromis, permettant une mise à jour malveillante: Il existe de nombreux exemples de certains des développeurs les plus compétents, y compris l'un des développeurs principaux le plus infâmes du protocole Bitcoin, LukeDashJr, ayant vu leur portefeuille compromis. Des personnes malveillantes peuvent utiliser une adresse de déploiement de contrat proxy pour détruire l'ensemble d’une collection, ou pire encore.

     

  2. Le développeur pourrait devenir malintentionné et déployer une mise à jour malveillante: Bien que la plupart des développeurs malintentionné aient tendance à simplement voler les fonds et s'enfuir (ce que l'on appelle des « rugpulls » dans le monde de la crypto-monnaie), ils pourraient causer encore plus de dommages en déployant une mise à jour malveillante d’un contrat proxy. Ils pourraient voler tous les actifs qui lui sont approuvés en utilisant un contrat d'implémentation de drainage, ou ils pourraient ajouter des fonctions telles qu'une fonction admin appelé « burn », ce qui pourrait même voler des tokens qui ont déjà été "envoyés" aux portefeuilles des utilisateurs!
     

  3. Les développeurs pourraient mettre à jour un contrat et introduire un bug: Récemment, Sushiswap a déployé une version buggée de son contrat. Des attaquants ont utilisé le bug pour vider 3,3 millions de dollars des portefeuilles de figures connues de la crypto-monnaie et d'utilisateurs réguliers de Sushiswap qui utilisaient la plateforme à ce moment-là. Bien que Sushiswap n'utilisait PAS de contrat proxy, cela aurait été bien pire s'ils en avaient utilisé. Une mise à jour de contrat buggée aurait voulu dire que quiconque ayant déjà donné une approbation sur Sushiswap aurait été vulnérable à ce bug ! Les hackers auraient pu voler des fonds à quiconque ayant effectué par le passé des approbations de tokens sur Sushiswap. Cela aurait probablement été la plus grande exploitation de faille de DeFi en 2023, si tel avait été le cas !
     

Pour une plateforme d'échange, ne pas utiliser le modèle de contrat proxy est pertinent ; cela permet aux utilisateurs et aux institutions qui sont un peu plus prudents d'attendre que de potentiels problèmes rencontrés par les nouveaux utilisateurs après une mise à jour soient résolus. Utiliser un contrat proxy pour mettre à niveau le contrat d'implémentation signifie que tous les utilisateurs sont soumis à de nouveaux risques pour chaque token qu'ils ont précédemment approuvé, à moins qu'ils ne révoquent cette approbation.

Recommendations

En plus de comprendre les risques associés à l'utilisation des contrats proxy, voici quelques règles générales à suivre lorsque vous en rencontrez un dans la nature :

  1. Soyez particulièrement prudent avec les contrats NFT qui demandent des approbations pour des actifs en dehors de leur écosystème. (Mais ne vous stressez pas trop si ce n'est pas le cas.)

Par exemple, vous faites partie d'un projet NFT qui a déployé un contrat proxy pour sa collection. Si cette même collection demande ensuite une approbation pour vos ApeCoin ou Wrapped Ethereum, cela doit être considéré comme présentant un risque plus élevé. Blur est souvent cité comme un exemple « incontournable » de cela, comme nous l'avons mentionné plus tôt, car Blur n'utilise que des contrats proxy. 

  1. Lorsque vous approuvez des NFTs ou des tokens ERC-20, surtout pour des marketplaces ou des « exchanges », vérifiez si quelque chose est un contrat proxy avant de procéder.

Chaque fois que j'utilise une nouvelle marketplace ou un DEX, j'aime vérifier cela et essayer de comprendre s'ils ont expliqué pourquoi ils utilisent un contrat proxy ou comment ils protègent et audite de nouveaux déploiements avant de mettre à jour de nouvelles implémentations.

  1. Révoquez les approbations des proxy inutilisés ou inactifs (ou de tous les contrats d'ailleurs) en utilisant des services comme Revoke.cash ou Approvals.xyz

Les projets inactifs, en particulier ceux avec des fondateurs anonymes, pourraient essayer d'utiliser vos approbations contre vous en déployant un nouveau contrat d'implémentation permettant de prendre le contrôle des tokens approuvés. Pour éviter cette possibilité, gardez toujours vos approbations « propres », n'oubliez pas de fixer des plafonds de dépenses pour les approbations et effectuez des audits réguliers pour révoquer de votre portefeuille les approbations inutiles !

Conclusion

Les contrats proxy ne sont pas tous mauvais, et honnêtement, dans la plupart des projets, en particulier ceux qui les utilisent à des fins avéré, au sein de leur propre écosystème ou tokens, c'est un moyen parfaitement sensé d'assurer la viabilité à long terme de leur projet ! Cela aidera à rester à jour avec les nouvelles normes ERC, les tendances et à pouvoir intégrer de manière fluide de nouvelles fonctionnalités comme la délégation de portefeuille. Cependant, leur utilisation réduit la prévisibilité et l'immuabilité, qui est si importante et à laquelle les utilisateurs de blockchain se sont habitués au fil des ans. 

En fin de compte, la décision d'utiliser ou non des contrats proxy revient à l'utilisateur et à ce avec quoi il se sent à l'aise. Dans la plupart des cas, les contrats proxy sont un moyen parfaitement sensé d'assurer la viabilité à long terme d'un projet. Cependant, dans les cas impliquant des « exchanges » ou des marketplaces (Blur, Opensea, etc…), où les mises à niveau devraient être rares, l'utilisation de contrats proxy peut ne pas être appropriée

Avez-vous des questions ou souhaitez-vous en savoir plus sur la sécurité Web3 et rester à jour sur les informations de sécurité les plus récentes, les escroqueries et les tactiques ? Rejoignez-nous sur notre serveur Discord à l'adresse https://discord.gg/boringsecurity .

Articles