Chaque mois, Luker, directeur de la sécurité chez MetaMask, rend compte des dernières attaques crypto et des risques émergents à connaître.
Le rapport d'avril 2022 de l'équipe de sécurité MetaMask couvre l'étape de compatibilité CommonJS d'Endo pour notre chaîne de dépendances npm, la nouvelle notation de nommage de packages 'a'a de LavaMoat v6 qui réduit le temps d'exécution de metamask-extension d'environ 600x (de 10 minutes à moins d'une seconde), l'adoption par MetaMask Extension des protections de la chaîne d'approvisionnement LavaMoat v6, la compatibilité de lockdown() de LavaMoat avec React Native ouvrant la voie à MetaMask Mobile, ainsi qu'un avis de sécurité concernant la sauvegarde iCloud des données du vault MetaMask. Plongez dans les détails ci-dessous, mais d'abord...
À la une : Butler Lampson, père de la sécurité informatique basée sur les capacités
Butler Lampson est un informaticien américain qui a formalisé la manière dont les logiciels contrôlent l'accès aux ressources. Son modèle de matrice d'accès, développé au début des années 1970, a unifié les capacités et les listes de contrôle d'accès en un cadre unique — ce qui lui a valu le prix Turing en 1992. L'isolation basée sur les capacités qu'il a pionnée constitue le fondement théorique du sandboxing par compartiments qu'Endo et LavaMoat utilisent aujourd'hui pour protéger MetaMask.
Endo atteint la compatibilité avec les modules CommonJS et met en lumière les lacunes restantes dans le chargement des packages npm
Le support CommonJS d'Endo a franchi une étape importante en avril 2022. Des tests de bout en bout sur de vrais packages de l'écosystème npm — principalement sélectionnés parmi les dépendances MetaMask — ont mis en évidence des cas où le support CommonJS était insuffisant et ont contribué à orienter l'implémentation. Un test comparant plusieurs formes d'export depuis CommonJS importé en ESM à travers Endo, Node.js et une sélection de bundlers a permis de définir des objectifs et d'éviter les régressions.
Les changements les plus notables dans le support CommonJS d'Endo durant cette période ont inclus le câblage des exports vers import * et l'introduction d'un export par défaut implicite, l'amélioration du lexer pour détecter toutes les occurrences de require et le report des erreurs de packages manquants à l'exécution, la refactorisation de la gestion des exports pour faire de module.exports la valeur par défaut et identifier les exports nommés, ainsi que l'ajout du support pour les package.json imbriqués avec type:module et les tableaux de valeurs optionnelles dans les exports de package.json.
La progression est suivie dans l'epic de suivi CommonJS.
Endo prend désormais en charge le chargement correct des modules CommonJS. Tous les problèmes restants lors du chargement de vrais packages depuis npm se répartissent en quatre catégories : utilisation de fonctionnalités manquantes (comme require.resolve ou import.meta), modification des globaux et des intrinsèques, déclenchement de filtres protégeant contre l'injection d'imports ou de commentaires HTML, et mappage incorrect des exports et résolution du type de module par Endo.
La commande expérimentale endo run exécute des fichiers JS avec isolation par compartiments
Basée sur les outils existants utilisés pour câbler les tests de bout en bout d'Endo, une commande expérimentale endo run peut désormais exécuter un fichier JS avec des compartiments — similaire à node app.js mais avec le modèle d'isolation d'Endo appliqué.
Actuellement, tous les modules core de Node.js sont rendus disponibles pour require/import par la base de code et ses dépendances. Des travaux supplémentaires devraient ajouter le support des politiques de LavaMoat.
La notation de nommage de packages 'a'a de LavaMoat v6 réduit le temps d'exécution de metamask-extension de 600x, de 10 minutes à moins d'une seconde
LavaMoat v6 a été livré avec une nouvelle notation d'identifiant de package pour prévenir les problèmes d'usurpation d'identité et de réutilisation de noms de packages. La notation, baptisée 'a'a, est désormais utilisée comme clés dans les fichiers de politique.
Les performances de l'implémentation initiale étaient fortement impactées par des inefficacités dans Node.js lors de la recherche et de l'accès aux fichiers. Une première tentative d'amélioration des performances — limitée à deux cas de mémoïsation simple — a ramené le temps d'exécution dans le pire cas de 'a'a dans metamask-extension de 10 minutes à 30 secondes. Le coût des pics d'utilisation mémoire était trop élevé.
Une deuxième itération de diagnostics et d'améliorations des performances a permis de diviser par plus de 25 le temps et la RAM par rapport aux résultats de la première itération, grâce à un nouvel algorithme, à l'élimination de la récursion et à des améliorations locales des performances de résolution des modules Node.js.
Au total, l'amélioration du temps d'exécution a été d'environ 600x entre la première implémentation complète et la version actuelle.
MetaMask Extension adopte les protections de la chaîne d'approvisionnement LavaMoat v6
MetaMask Extension fonctionne désormais sous la protection de LavaMoat v6, avec le déploiement suivi dans la PR #14488.
lockdown() de LavaMoat atteint la compatibilité React Native, ouvrant la voie à MetaMask Mobile
L'étape fondamentale pour rendre LavaMoat opérationnel dans les applications React Native est l'exécution de la fonction SES lockdown(). La fonction lockdown() protège les logiciels contre les attaques de la chaîne d'approvisionnement en répertoriant les primordials en JavaScript et en gelant les prototypes, rendant ainsi peu probable qu'un acteur malveillant puisse effectuer une attaque par pollution de prototype.
Un compte-rendu détaillé des enseignements tirés lors de cette démarche se trouve dans le React Native Compatibility Tracker. Les éléments clés pour assurer la compatibilité sont :
Le résultat est une pull request dans le dépôt de l'application MetaMask Mobile. Les prochaines étapes consistent à exécuter des tests de bout en bout pour confirmer que lockdown() n'a pas compromis des fonctionnalités supplémentaires avant de passer à l'étape suivante : l'intégration de LavaMoat dans MetaMask Mobile.
La sauvegarde iCloud s'avère inclure les données du vault MetaMask chiffrées par mot de passe
Les utilisateurs Apple ayant activé la sauvegarde iCloud pour les données d'applications sauvegardent peut-être leur vault MetaMask chiffré par mot de passe sans s'en rendre compte. Si votre mot de passe n'est pas suffisamment robuste et que quelqu'un hameçonne vos identifiants iCloud, cela peut entraîner le vol de fonds. MetaMask a publié des conseils sur X avec les étapes décrivant comment contrôler ce paramètre sur leurs appareils.
Le rapport de sécurité crypto d'avril 2022 de MetaMask a couvert l'étape de compatibilité CommonJS d'Endo pour la chaîne de dépendances npm de MetaMask, l'amélioration des performances de 600x de LavaMoat v6 dans metamask-extension grâce à la nouvelle notation de nommage de packages 'a'a, ainsi que l'avis de sécurité concernant la sauvegarde iCloud des données du vault MetaMask. Consultez les éditions précédentes du rapport de sécurité crypto MetaMask pour découvrir d'autres menaces, tendances et conseils pour rester en sécurité dans l'écosystème.