Cada mes, el director de seguridad de MetaMask, Luker, informa sobre los últimos ataques cripto y los riesgos emergentes que debes conocer.
El informe de abril de 2022 del equipo de seguridad de MetaMask abarca el hito de compatibilidad con CommonJS de Endo para nuestra cadena de dependencias npm, la nueva notación de nomenclatura de paquetes 'a'a de LavaMoat v6 que reduce el tiempo de ejecución de metamask-extension aproximadamente 600 veces (de 10 minutos a menos de 1 segundo), la adopción por parte de MetaMask Extension de las protecciones de cadena de suministro de LavaMoat v6, la compatibilidad de lockdown() de LavaMoat con React Native para abrir el camino hacia MetaMask Mobile, y un aviso sobre copias de seguridad en iCloud para los datos del vault de MetaMask. Descubre los detalles a continuación, pero primero...
Pionero STEM destacado: Butler Lampson, padre de la seguridad informática basada en capacidades
Butler Lampson es un científico informático estadounidense que formalizó el modo en que el software controla el acceso a los recursos. Su modelo de matriz de acceso, desarrollado a principios de los años 70, unificó las capacidades y las listas de control de acceso en un único marco, lo que le valió el Premio Turing en 1992. El aislamiento basado en capacidades que él impulsó es el fundamento teórico del sandboxing por compartimentos que Endo y LavaMoat utilizan hoy para proteger MetaMask.
Endo alcanza la compatibilidad con módulos CommonJS y detecta las brechas restantes en la carga de paquetes npm
El soporte de CommonJS de Endo alcanzó un hito en abril de 2022. Las pruebas de extremo a extremo sobre paquetes reales del ecosistema npm —seleccionados principalmente entre las dependencias de MetaMask— pusieron de manifiesto casos en los que el soporte de CommonJS era insuficiente y contribuyeron a impulsar la implementación. Una prueba que compara múltiples formas de exportación de CommonJS importado en ESM a través de Endo, Node.js y una selección de bundlers ayudó a establecer objetivos y evitar regresiones.
Los cambios más destacados en el soporte de CommonJS de Endo durante este período incluyeron la conexión de exports con import * y la introducción de una exportación predeterminada implícita, la mejora del lexer para detectar todas las ocurrencias de require y posponer los errores de paquetes faltantes al tiempo de ejecución, la refactorización del manejo de exports para establecer module.exports como predeterminado e identificar las exportaciones con nombre, y la incorporación de soporte para package.json anidado con type:module y arrays de valores opcionales en las exportaciones de package.json.
El progreso se registra en el epic de seguimiento de CommonJS.
Endo ahora admite la carga correcta de módulos CommonJS. Todos los problemas restantes al cargar paquetes reales desde npm se agrupan en cuatro categorías: uso de funcionalidades no disponibles (como require.resolve o import.meta), modificación de variables globales e intrínsecos, activación de filtros que protegen contra la inyección de imports o comentarios HTML, y mapeo incorrecto de exportaciones y resolución del tipo de módulo por parte de Endo.
El comando experimental run de Endo ejecuta archivos JS con aislamiento por compartimentos
Basándose en las herramientas existentes utilizadas para conectar las pruebas de extremo a extremo de Endo, un comando experimental endo run puede ahora ejecutar un archivo JS con compartimentos —similar a node app.js, pero con el modelo de aislamiento de Endo aplicado.
Actualmente, todos los módulos del núcleo de Node.js están disponibles para require/import por parte del código base y sus dependencias. El trabajo futuro debería añadir soporte para las políticas de LavaMoat.
La nomenclatura de paquetes 'a'a de LavaMoat v6 reduce el tiempo de ejecución de metamask-extension 600 veces, de 10 minutos a menos de 1 segundo
LavaMoat v6 se lanzó con una nueva notación de identificación de paquetes para prevenir problemas derivados de la suplantación de identidad y la reutilización de nombres de paquetes. La notación, denominada 'a'a, se utiliza ahora como clave en los archivos de política.
El rendimiento de la implementación inicial se vio gravemente afectado por ineficiencias en Node.js al buscar y acceder a archivos. Un primer intento de mejora del rendimiento —limitado a dos casos de memoización simple— redujo el tiempo de ejecución en el peor caso de 'a'a en metamask-extension de 10 minutos a 30 segundos. Sin embargo, el coste de los picos en el uso de memoria era demasiado elevado.
Una segunda iteración de diagnóstico y mejoras de rendimiento logró reducir el tiempo y la RAM en más de 25 veces respecto a los resultados de la primera iteración, gracias a un nuevo algoritmo, la eliminación de la recursión y mejoras locales de rendimiento en la resolución de módulos de Node.js.
En total, la mejora en el tiempo de ejecución fue de aproximadamente 600 veces entre la primera implementación completa y la versión actual.
MetaMask Extension adopta las protecciones de cadena de suministro de LavaMoat v6
MetaMask Extension ahora opera bajo las protecciones de LavaMoat v6, con el despliegue registrado en el PR #14488.
lockdown() de LavaMoat alcanza compatibilidad con React Native, abriendo el camino hacia MetaMask Mobile
El paso fundamental para hacer operativo LavaMoat en aplicaciones React Native es ejecutar la función lockdown() de SES. La función lockdown() protege el software contra ataques a la cadena de suministro enumerando los primordiales de JavaScript y congelando los prototipos, lo que dificulta que un actor malicioso pueda llevar a cabo un ataque de contaminación de prototipos.
Un análisis detallado de los hallazgos obtenidos durante este proceso se encuentra en el React Native Compatibility Tracker. Los aspectos clave para lograr la compatibilidad son: permitir que Metro ejecute el bundle de SES ejecutando archivos .cjs, añadir opciones específicas de lockdown, eliminar plugins de Babel y eliminar el polyfill de Promise. Otros problemas son específicos de la aplicación MetaMask Mobile, como las dependencias de Sentry y EthereumJS.
El resultado es una pull request al repositorio de la aplicación MetaMask Mobile. Los próximos pasos incluyen ejecutar pruebas de extremo a extremo para confirmar que lockdown() no ha roto funcionalidades adicionales antes de avanzar a la siguiente etapa: integrar LavaMoat en MetaMask Mobile.
Se detecta que la copia de seguridad de iCloud incluye datos del vault de MetaMask cifrados con contraseña
Los usuarios de Apple que tienen activada la copia de seguridad en iCloud para los datos de las aplicaciones podrían estar respaldando su vault de MetaMask cifrado con contraseña sin saberlo. Si tu contraseña no es lo suficientemente segura y alguien obtiene tus credenciales de iCloud mediante phishing, esto puede derivar en el robo de fondos. MetaMask publicó orientaciones en X con los pasos para controlar esta configuración en sus dispositivos.
El informe de seguridad cripto de MetaMask de abril de 2022 cubrió el hito de compatibilidad con CommonJS de Endo para la cadena de dependencias npm de MetaMask, la mejora de rendimiento 600 veces mayor de LavaMoat v6 en metamask-extension gracias a la nueva notación de nomenclatura de paquetes 'a'a, y el aviso sobre copias de seguridad en iCloud para los datos del vault de MetaMask. Consulta las ediciones anteriores del informe de seguridad cripto de MetaMask para conocer más amenazas, tendencias y consejos para mantenerte seguro en todo el ecosistema.