Saltar al contenido

Navegando el panorama de seguridad de MetaMask Snaps

Este blog explora el modelo de confianza de MetaMask Snaps, detallando problemas de seguridad comunes y mejores prácticas para desarrolladores en el ecosistema web3.

5 min de lectura
Navegando el panorama de seguridad de MetaMask Snaps

MetaMask Snaps es un sistema de código abierto que permite a los usuarios ampliar de forma segura la funcionalidad de MetaMask, ofreciendo nuevas experiencias de wallet. En esencia, un Snap es un programa JavaScript que opera dentro de MetaMask en un entorno aislado.

En este blog exploraremos el panorama de seguridad de MetaMask Snaps. Como auditores de seguridad blockchain de Consensys Diligence, nos especializamos en seguridad de contratos inteligentes. Consensys Diligence es una firma de seguridad blockchain con un servicio integral de auditoría de contratos inteligentes para ayudar a proyectos de todo el ecosistema web3 a construir dapps seguras.

Entendiendo el modelo de confianza de MetaMask Snap

Todo desarrollador de Snaps necesita comprender el modelo de confianza inherente a MetaMask Snaps. Este modelo delimita los límites de confianza entre los distintos actores. El mensaje clave a recordar es que los usuarios finales confían en MetaMask, pero no en las dapps.

Formalizamos y resumimos el modelo de confianza en el diagrama a continuación. Este diagrama representa los diferentes límites de confianza que los desarrolladores deben tener en cuenta al desarrollar Snaps:

Tres límites de confianza principales para las dapps web3, los usuarios y MetaMask

En primer lugar, existe un límite de confianza entre el usuario y la dapp. Los usuarios nunca confían en las dapps. De hecho, las dapps pueden ser maliciosas o estar comprometidas. Pueden hacer creer a los usuarios que están firmando un determinado payload cuando en realidad están firmando otra cosa.

En segundo lugar, existe un límite de confianza en torno a MetaMask y sus extensiones. Si bien los usuarios no confían en las dapps, sí confían en MetaMask. MetaMask es la fuente de verdad para el usuario. Lo que importa es el payload que se muestra y se firma dentro de MetaMask, ya sea a través de su módulo principal o de Snaps.

En tercer lugar, también existe un límite de confianza entre el módulo principal de MetaMask y el Snap. Los desarrolladores de Snaps pueden interactuar con el módulo principal de MetaMask a través de la API de Snaps. Esta API implementa un sistema de permisos, lo que significa que los desarrolladores deben solicitar permisos antes de acceder a las funciones restringidas de la API. Sin embargo, con los permisos adecuados, los Snaps pueden llevar a cabo acciones críticas como acceder a la entropía raíz de MetaMask, firmar datos o comunicarse con APIs externas.

En esencia, el principio rector para los usuarios finales en el ecosistema MetaMask es simple pero profundo: Los usuarios finales solo deben tener que confiar en la información y las interacciones que ocurren dentro del contexto de MetaMask y MetaMask Snap, conocido como el Trust Module.

Descifrando los problemas más comunes en MetaMask Snaps

El modelo de confianza de MetaMask permite un enfoque de auditoría estructurado y ayuda a los auditores a identificar problemas de seguridad. Durante nuestras auditorías de Snaps, identificamos diferentes categorías de problemas. Sentíamos curiosidad por otras categorías potenciales, por lo que realizamos un análisis exhaustivo de 40 Snaps auditados por 9 firmas de auditoría. Creamos una clasificación y categorizamos los problemas según esta clasificación. A continuación destacamos algunas categorías interesantes junto con algunos ejemplos. Cabe señalar que esta lista no es exhaustiva.

Validación de entradas del usuario:

  1. Inyección de Markdown y caracteres de control: Esto implica el riesgo de que se inyecte código o comandos no deseados a través de markdown o caracteres de control en las entradas del usuario.

  2. Saneamiento y validación de entradas del usuario:- Problemas de verificación de tipos/confusión de tipos y de análisis

  • API que no rechaza parámetros RPC inválidos: Este problema ocurre cuando la API no rechaza parámetros inválidos como IDs de cadena incorrectos, checksums de direcciones o estructuras de comisiones.

  • Validación incorrecta de URI: Este problema puede ocurrir cuando se utilizan expresiones regex demasiado permisivas al validar URIs, por ejemplo.

Problemas de consentimiento del usuario e interfaz de usuario:

  1. Ruptura del patrón de UX establecido por MetaMask: Este problema surge cuando las aplicaciones se desvían de los patrones de experiencia de usuario establecidos por MetaMask.- No solicitar al usuario acceso a la cuenta: MetaMask siempre solicita confirmación al usuario antes de conectar cualquier cuenta a la dapp. Los desarrolladores de Snaps deben seguir el mismo patrón.

  • Enumeración de cuentas: Una preocupación de privacidad en la que la aplicación podría enumerar o listar las cuentas del usuario sin el consentimiento adecuado.

  1. No solicitar el consentimiento del usuario:- Al firmar payloads: Esto se refiere a los casos en que la aplicación realiza acciones relacionadas con firmas sin la aprobación explícita del usuario.

  • Mostrar la clave privada sin opción de visibilidad de contraseña: las claves privadas se muestran sin utilizar un componente de clic para revelar acompañado de un texto de aviso. Esto puede ser problemático si el usuario se encuentra en un entorno público, por ejemplo.

  1. Diálogos de Snap opacos: Son diálogos que carecen de transparencia o claridad.- Diálogo de firma de transacción con información faltante: Un caso en el que se omite información esencial en los diálogos de firma de transacciones, o la información presentada al usuario no es legible por humanos.

  • Problemas de imprecisión en el redondeo de comisiones: Esto se refiere a inexactitudes o falta de precisión en los cálculos y visualizaciones de comisiones.

  • Mostrar el origen: El Snap no muestra el origen de una acción. Esto puede llevar al usuario a creer que la acción fue iniciada por una dapp cuando en realidad provino de otra.

Problemas de dependencias:

  1. Dependencias vulnerables/no confiables.

  2. Ataques a la cadena de suministro: Una dependencia puede verse comprometida, ya sea a través de vectores de ataque directos o indirectos.

  3. Dependencias desactualizadas: Depender de dependencias desactualizadas puede tener malas implicaciones de seguridad, ya que estas dependencias podrían contener vulnerabilidades.

Problemas de permisos y autorización:

  1. Permisos superfluos: Otorgar demasiados permisos reduce la seguridad.

  2. Acceso a permisos de bajo nivel: Gestión inadecuada de la entropía de las claves raíz de MetaMask para Ethereum, por ejemplo.

  3. Filtración de material criptográfico:- La dapp solicita la clave privada: ¡Las claves privadas nunca deben salir de MetaMask!

  • Gestión de cuentas: El Snap debe solicitar confirmación al usuario antes de conectar cualquier cuenta en la primera conexión.

Actualmente estamos refinando los resultados de nuestro análisis e identificando nuevos hallazgos. Pronto habrá más novedades. ¡Estén atentos! :)

Conclusiones clave para los desarrolladores de Snaps

¡Ten en cuenta que estás desarrollando un módulo de confianza! Los usuarios confían en MetaMask, pero no en la dapp. El usuario debe confirmar cada acción y debe tener toda la información disponible para tomar una decisión informada. Las claves nunca salen de MetaMask. En consecuencia, como desarrollador de Snaps, puedes:

  1. Solicitar permisos mínimos: Los Snaps solo deben solicitar acceso a las funcionalidades o datos específicos necesarios para su funcionamiento, con el fin de minimizar la superficie de ataque.

  2. Validar y sanear las entradas no confiables: Evita los ataques de inyección o la ejecución de código no confiable. Dada la capacidad del Snap para ampliar la funcionalidad de la wallet del usuario, garantizar que todas las entradas sean seguras y estén libres de exploits es fundamental para proteger tanto la integridad de la wallet como los activos del usuario.

  3. Gestionar la cadena de suministro: Selecciona y actualiza las dependencias con cuidado para evitar vulnerabilidades.

Tener en cuenta estos principios y los problemas comunes subyacentes durante el desarrollo hace que el futuro de los Snaps sea mucho más seguro para los próximos mil millones de usuarios.

Consensys Diligence ha ayudado a una amplia gama de proyectos en todo el ecosistema blockchain a garantizar que sus protocolos estén listos para el lanzamiento y diseñados para proteger a los usuarios. Consensys Diligence estará encantada de revisar tu Snap en busca de estas y otras vulnerabilidades en una auditoría personalizada. ¡Contáctanos y solicita un presupuesto!

Martin Ortner (tintinweb)

Valentin Quelquejay

Martin y Valentin, profesionales de seguridad en Consensys Diligence, están a la vanguardia de la investigación de seguridad de Snaps, trabajando diligentemente para mejorar la seguridad de la plataforma.

Traducido por IA. Puede contener errores. Por favor, verifique siempre la información.

Califica la traducción

Este artículo fue escrito por: