Chaque mois, Luker, directeur de la sécurité chez MetaMask, fait le point sur les dernières attaques crypto et les risques émergents à connaître.
L'édition de mai 2022 a couvert le lancement du programme de bug bounty MetaMask sur HackerOne, l'implémentation par Endo de import.meta et __dirname pour améliorer la compatibilité des dépendances MetaMask, ainsi qu'un prototype de snap de génération de clés distribuées illustrant la signature par calcul multipartite dans MetaMask Flask. Plongez dans les détails ci-dessous, mais d'abord...
À la une : Adi Shamir, co-inventeur de RSA et créateur du partage de secret
Adi Shamir est un cryptographe israélien qui a co-inventé l'algorithme RSA en 1977 aux côtés de Ron Rivest et Leonard Adleman — le premier cryptosystème à clé publique véritablement opérationnel, ce qui a valu au trio le prix Turing en 2002. En 1979, il a publié « How to Share a Secret », introduisant le partage de secret de Shamir : un schéma qui divise un secret en parts dont seul un nombre seuil est nécessaire pour reconstituer l'original. Cette propriété est fondamentale pour les travaux sur la génération de clés distribuées présentés dans ce rapport.
MetaMask lance son programme de bug bounty sur HackerOne
MetaMask a lancé son programme de bug bounty sur HackerOne en juin 2022, ouvrant un canal officiel permettant aux chercheurs en sécurité de signaler des vulnérabilités dans les produits MetaMask.
Endo implémente import.meta et __dirname, améliorant la compatibilité des dépendances MetaMask
Suite aux avancées d'avril 2022 sur la prise en charge CommonJS d'Endo, les résultats des tests de bout en bout ont montré que les principaux obstacles restants pour l'exécution des modules populaires étaient la prise en charge de import.meta.url et de __dirname.
Une réunion entre Agoric, MetaMask et Moddable le 3 mai 2022 a abouti à un accord sur le moment du processus d'importation de modules où import.meta doit être traité. Le concept importMetaHook a été introduit dans la spécification Compartment. Le hook n'est appelé que si l'analyse statique indique que le module accède à import.meta — car Node.js y attache une fonction resolve dont la création est coûteuse, il est préférable de n'invoquer le hook que lorsque ses résultats sont susceptibles d'être utilisés.
L'implémentation de import.meta est terminée (issue de spécification, PR d'implémentation). Il reste à implémenter le passage de import.meta.url dans les modules d'Endo par défaut. L'implémentation de __dirname est également terminée (PR), après plusieurs itérations pour garantir l'exactitude et la prise en charge des chemins Windows.
De plus, la prise en charge des fichiers package.json imbriqués modifiant l'hypothèse de type de module par défaut pour les fichiers .js a été ajoutée, afin que le compartment-mapper gère les packages aux structures complexes conçues pour prendre en charge à la fois les spécifications CommonJS et ES module (source).
La prise en charge du comportement __esModule est en suspens. Deux tentatives d'implémentation ont toutes deux abouti à de moins bons résultats dans les tests de bout en bout. Une troisième approche — placer la logique de prise en charge dans ThirdPartyModuleInstance au sein de SES — est jugée controversée. La fonctionnalité est suivie dans l'issue #927.
Le prototype de snap de génération de clés distribuées illustre la signature MPC dans MetaMask Flask
Des progrès ont été réalisés sur les capacités de calcul multipartite (MPC). Notre équipe a repris des liaisons WebAssembly (WASM) issues d'une preuve de concept antérieure et a créé un prototype de snap, utilisable dans MetaMask Flask, qui illustre la génération de clés distribuées (DKG) et la signature de messages. Le snap prend en charge l'export et l'import de parts de clés, en plus de la génération de clés et de la sauvegarde des preuves pour la signature de messages.
En coulisses, le package s'appuie sur une implémentation de GG2020 (Gennaro et Goldfeder 2020, article), un protocole qui prend en charge une phase en ligne non interactive permettant aux participants de participer de manière asynchrone sans avoir besoin d'être connectés simultanément, et permettant une détection efficace des parties qui abandonnent.
Les prochaines étapes comprennent l'ajout de la prise en charge du chiffrement pour snap_manageState afin d'éliminer le chiffrement manuel des parts de clés dans le code du snap, suivi de l'ajout de la prise en charge de la signature des transactions. Le prototype est suivi dans le dépôt tss-snap (initialement publié sous le nom ecdsa-wasm).
Le rapport de sécurité crypto de MetaMask pour mai 2022 a couvert l'implémentation par Endo de import.meta et __dirname pour la chaîne de compatibilité des modules MetaMask, ainsi que le prototype de snap de génération de clés distribuées illustrant la signature par calcul multipartite dans MetaMask Flask. Consultez les éditions précédentes du rapport de sécurité crypto MetaMask pour découvrir davantage de menaces, de tendances et de conseils pour rester en sécurité dans l'écosystème.