
Ce blog explore le modèle de confiance de MetaMask Snaps, détaillant les problèmes de sécurité courants et les bonnes pratiques pour les développeurs dans l'écosystème web3.

MetaMask Snaps est un système open-source qui permet aux utilisateurs d'étendre en toute sécurité les fonctionnalités de MetaMask, offrant de nouvelles expériences de portefeuille. Dans son essence, un Snap est un programme JavaScript fonctionnant à l'intérieur de MetaMask dans un environnement isolé.
Dans ce blog, nous allons explorer le paysage de sécurité de MetaMask Snaps. En tant qu'auditeurs de sécurité blockchain chez Consensys Diligence, nous sommes spécialisés dans la sécurité des smart contracts. Consensys Diligence est une entreprise de sécurité blockchain proposant un service complet d'audit de smart contracts pour aider les projets à travers le web3 à construire des dapps sécurisées.
Tout développeur Snaps doit comprendre le modèle de confiance inhérent à MetaMask Snaps. Ce modèle de confiance délimite les frontières de confiance entre les différents acteurs. Le message clé à retenir est que les utilisateurs finaux font confiance à MetaMask mais ne font pas confiance aux dapps.
Nous avons formalisé et résumé le modèle de confiance dans le diagramme ci-dessous. Ce diagramme illustre les différentes frontières de confiance que les développeurs doivent garder à l'esprit lors du développement de Snaps :
Premièrement, il existe une frontière de confiance entre l'utilisateur et la dapp. Les utilisateurs ne font jamais confiance aux dapps. En effet, les dapps peuvent être malveillantes ou compromises. Elles peuvent amener les utilisateurs à croire qu'ils signent un certain payload alors qu'en réalité, ils signent autre chose.
Deuxièmement, il existe une frontière de confiance autour de MetaMask et de ses extensions. En effet, bien que les utilisateurs ne fassent pas confiance aux dapps, ils font confiance à MetaMask. MetaMask est la source de vérité pour l'utilisateur. Le payload affiché et signé dans MetaMask, que ce soit via son module principal ou via les Snaps, est ce qui compte.
Troisièmement, il existe également une frontière de confiance entre le module principal de MetaMask et le Snap. En effet, les développeurs de Snaps peuvent interagir avec le module principal de MetaMask via l'API Snaps. Cette API implémente un système de permissions, ce qui signifie que les développeurs doivent demander des permissions avant d'accéder aux fonctionnalités restreintes de l'API. Pourtant, avec les permissions appropriées, les Snaps peuvent effectuer des actions critiques telles qu'accéder à l'entropie racine de MetaMask, signer des données ou communiquer avec des API externes.
En substance, le principe directeur pour les utilisateurs finaux dans l'écosystème MetaMask est simple mais profond : Les utilisateurs finaux ne devraient avoir à faire confiance qu'aux informations et interactions qui se produisent dans le contexte de MetaMask et MetaMask Snap, connu sous le nom de Trust Module.
Le modèle de confiance de MetaMask permet une approche d'audit structurée et aide les auditeurs à identifier les problèmes de sécurité. Au cours de nos audits de Snaps, nous avons identifié différentes catégories de problèmes. Nous étions curieux d'explorer d'autres catégories potentielles. Ainsi, nous avons mené une analyse approfondie portant sur 40 Snaps audités par 9 cabinets d'audit. Nous avons créé une classification et catégorisé les problèmes selon cette classification. Ci-dessous, nous mettons en évidence quelques catégories intéressantes accompagnées d'exemples. Notez que cette liste n'est pas exhaustive.
Injection de Markdown et de caractères de contrôle : Cela implique le risque d'injection de code ou de commandes indésirables via du markdown ou des caractères de contrôle dans les entrées utilisateur.
Assainissement et validation des entrées utilisateur :- Problèmes de vérification/confusion de types et d'analyse syntaxique
API ne rejetant pas les paramètres RPC invalides : Ce problème survient lorsque l'API ne parvient pas à rejeter des paramètres invalides tels que des chain IDs incorrects, des checksums d'adresses ou des structures de frais.
Validation incorrecte des URI : Ce problème peut survenir lors de l'utilisation d'expressions regex trop permissives lors de la validation des URI, par exemple.
Non-respect des patterns UX établis par MetaMask : Ce problème apparaît lorsque les applications s'écartent des patterns d'expérience utilisateur établis par MetaMask.- Ne pas demander à l'utilisateur l'accès au compte : MetaMask demande toujours à l'utilisateur avant de connecter un compte à la dapp. Les développeurs de Snaps doivent suivre le même pattern.
Énumération de comptes : Un problème de confidentialité où l'application pourrait énumérer ou lister les comptes utilisateur sans consentement approprié.
Ne pas demander le consentement de l'utilisateur :- Lors de la signature de payloads : Cela fait référence aux cas où l'application effectue des actions liées aux signatures sans approbation explicite de l'utilisateur.
Affichage de clé privée sans option de visibilité du mot de passe : les clés privées sont affichées sans utiliser un composant « cliquer pour révéler » accompagné d'un texte d'avertissement. Cela peut être problématique si l'utilisateur se trouve dans un environnement public, par exemple.
Dialogues de Snap opaques : Ce sont des dialogues qui manquent de transparence ou de clarté.- Dialogue de signature de transaction avec des informations manquantes : Un cas où des informations essentielles sont omises dans les dialogues de signature de transaction, ou les informations présentées à l'utilisateur ne sont pas lisibles par un humain.
Problèmes d'imprécision dans l'arrondi des frais : Cela concerne les inexactitudes ou le manque de précision dans les calculs et l'affichage des frais.
Affichage de l'origine : Le Snap n'affiche pas l'origine d'une action. Cela peut amener l'utilisateur à croire que l'action a été initiée par une dapp alors qu'elle provenait en réalité d'une autre dapp.
Dépendances vulnérables/non fiables.
Attaques de la chaîne d'approvisionnement : Une dépendance peut être compromise, que ce soit par des vecteurs d'attaque directs ou indirects.
Dépendances obsolètes : S'appuyer sur des dépendances obsolètes peut avoir de mauvaises implications en matière de sécurité, car ces dépendances peuvent contenir des vulnérabilités.
Permissions superflues : Accorder trop de permissions entraîne une diminution de la sécurité.
Accès aux permissions de bas niveau : Gestion incorrecte de l'entropie des clés racines MetaMask pour Ethereum, par exemple.
Fuite de matériel cryptographique :- Demande de clé privée par la dapp : Les clés privées ne doivent jamais quitter MetaMask !
Gestion des comptes : Le snap doit demander à l'utilisateur avant de connecter un compte lors de la première connexion.
Nous affinons actuellement les résultats de notre analyse et identifions de nouvelles perspectives. La suite arrive bientôt. Restez connectés :)
Gardez à l'esprit que vous développez un module de confiance ! Les utilisateurs font confiance à MetaMask, mais pas à la dapp. L'utilisateur doit confirmer chaque action et doit disposer de toutes les informations nécessaires pour prendre une décision éclairée. Les clés ne quittent jamais MetaMask. Par conséquent, en tant que développeur Snaps, vous pouvez :
Demander des permissions minimales : Les Snaps ne doivent demander l'accès qu'aux fonctionnalités ou données spécifiquement nécessaires à leur fonctionnement afin de minimiser la surface d'attaque.
Valider et assainir les entrées non fiables : Évitez les attaques par injection ou l'exécution de code non fiable. Étant donné la capacité du Snap à étendre les fonctionnalités du portefeuille d'un utilisateur, s'assurer que toutes les entrées sont sécurisées et exemptes d'exploits est essentiel pour protéger à la fois l'intégrité du portefeuille et les actifs de l'utilisateur.
Gérer la chaîne d'approvisionnement : Sélectionnez et mettez à jour soigneusement les dépendances pour éviter les vulnérabilités.
Garder ces principes et les problèmes courants sous-jacents à l'esprit pendant le développement rend l'avenir des Snaps bien plus sûr pour le prochain milliard d'utilisateurs.
Consensys Diligence a aidé un large éventail de projets à travers l'écosystème blockchain à s'assurer que leurs protocoles sont prêts pour le lancement et conçus pour protéger les utilisateurs. Consensys Diligence se fera un plaisir de vérifier votre Snap pour ces vulnérabilités et bien d'autres dans le cadre d'un audit personnalisé. Contactez-nous et obtenez un devis !
Martin Ortner (tintinweb)
Valentin Quelquejay
Martin et Valentin, professionnels de la sécurité chez Consensys Diligence, sont à la pointe de la recherche en sécurité des Snaps, travaillant avec diligence pour renforcer la sécurité de la plateforme.
Traduit par IA. Peut contenir des erreurs. Veuillez toujours vérifier les informations.