Informe de auditoría instantánea de MetaMask para Polkadot

Resumen de gestión

Polkadot se puso en contacto con Sayfer Security para realizar una auditoría de seguridad en la aplicación Metamask Snap de Polkadot en agosto de 2023.

Antes de evaluar los servicios anteriores, realizamos una reunión inicial con el equipo técnico y recibimos una descripción general del sistema y los objetivos de esta investigación.

Durante el período de investigación de 2 semanas, descubrimos 5 vulnerabilidades en el código base del complemento.

En conclusión, se deben implementar varias correcciones después del informe, pero la postura de seguridad del sistema es competente.

Metodología de Riesgo

En Sayfer, estamos comprometidos a ofrecer pruebas de penetración de la más alta calidad a nuestros clientes. Es por eso que hemos implementado un modelo integral de evaluación de riesgos para evaluar la gravedad de nuestros hallazgos y brindar a nuestros clientes las mejores recomendaciones posibles para la mitigación.

Nuestro modelo de evaluación de riesgos se basa en dos factores clave: IMPACTO y PROBABILIDAD. El impacto se refiere al daño potencial que podría resultar de un problema, como pérdidas financieras, daños a la reputación o un sistema no operativo. La probabilidad se refiere a la probabilidad de que ocurra un problema, teniendo en cuenta factores como la complejidad del ataque y la cantidad de atacantes potenciales.

Al combinar estos dos factores, podemos crear una comprensión integral del riesgo que plantea un problema en particular y brindar a nuestros clientes una evaluación clara y procesable de la gravedad del problema. Este enfoque nos permite priorizar nuestras recomendaciones y garantizar que nuestros clientes reciban el mejor asesoramiento posible sobre cómo proteger su negocio.

El riesgo se define de la siguiente manera:

Vulnerabilidades por Riesgo

Alta – Amenaza directa a los procesos clave del negocio.
Medio – Amenaza indirecta a los procesos comerciales clave o amenaza parcial a los procesos comerciales.
Baja – No existe amenaza directa. La vulnerabilidad puede explotarse utilizando otras vulnerabilidades.
Informativo – Este hallazgo no indica vulnerabilidad, pero establece un comentario que notifica sobre fallas de diseño e implementación incorrecta que podría causar un problema a largo plazo.

Gravedad
# de problemas
Alta
0
Medio
2
Baja
2
Informativo
1

Enfoque

Introducción

Chainsafe se puso en contacto con Sayfer para realizar pruebas de penetración en la aplicación Metamask Snap de Polkadot.

Este informe documenta la investigación realizada por Sayfer dirigida a los recursos seleccionados definidos bajo el alcance de la investigación. En particular, este informe muestra la revisión de la postura de seguridad para las dos aplicaciones MetaMask Snap y la infraestructura y las implementaciones de procesos que las rodean.

Nuestro ciclo de vida del proyecto de pruebas de penetración:

01

Descripción general del alcance

02

Resumen técnico

03

Validación del alcance

04

Modelo de amenaza

05

Evaluación de seguridad

06

Evaluacion de seguridad

Descripción general del alcance

Durante nuestra primera reunión y luego de entender las necesidades de la empresa, definimos como alcance del proyecto el alcance de la aplicación que reside en las siguientes URL:

Broche de lunares
Compromiso de auditoría: 61787c6d2193e7ec6dee6cf3ecfae4b855717092
Correcciones de compromiso:

Nuestras pruebas se realizaron en agosto de 2023.

¡No dejes que sea demasiado tarde!

Comienza tu auditoría con Sayfer

Validación del alcance

Comenzamos asegurándonos de que el alcance que nos definió el cliente fuera técnicamente lógico. Decidir qué alcance es el adecuado para un sistema determinado es parte de la discusión inicial. Obtener el alcance correcto es clave para obtener el máximo valor comercial de la investigación.

Modelo de amenaza

Durante nuestras reuniones iniciales con el cliente definimos los activos más importantes que posee la aplicación.

Definimos que la mayor amenaza actual al sistema son los fondos robados de los usuarios.

¡No dejes que sea demasiado tarde!

Comienza tu auditoría con Sayfer

Metodología de Evaluación de Seguridad

usos sayfer OWASP WSTG como nuestro estándar técnico al revisar aplicaciones web. Después de obtener una comprensión profunda del sistema, decidimos qué pruebas OWASP se requieren para evaluar el sistema.

Evaluacion de seguridad

Después de comprender y definir el alcance, realizar modelos de amenazas y evaluar las pruebas correctas necesarias para verificar completamente la aplicación en busca de fallas de seguridad, realizamos nuestra evaluación de seguridad.

Descripción de la tabla de problemas

Título del problema

ID DECIR-??: Una identificación para facilitar la comunicación sobre cada vulnerabilidad
Estado Abierto/Fijo/Reconocido
Riesgo Representa el factor de riesgo del problema. Para obtener más descripción, consulte la Vulnerabilidades por Riesgo .
Impacto en el negocio El principal riesgo de la vulnerabilidad a nivel empresarial.
Destino La URL o el archivo en el que se detectó este problema. Los problemas sin ubicación no tienen una ubicación particular y se refieren al producto en su conjunto.

Descripción

Aquí proporcionamos una breve descripción del problema y cómo se formó, los pasos que seguimos para encontrarlo o explotarlo, junto con una prueba de concepto (si está presente) y cómo este problema puede afectar al producto o a sus usuarios.

Mitigación

Opciones de resolución sugeridas para este problema y enlaces a sitios recomendados para una mayor solución.

Evaluación de seguridad

Se realizaron las siguientes pruebas mientras se auditaba el sistema.

Recopilación de información

Recopilación de información Nombre de la prueba
WSTG-INFO-01 Llevar a cabo un reconocimiento de descubrimiento de motores de búsqueda para detectar fugas de información
WSTG-INFO-02 Servidor web de huellas dactilares
WSTG-INFO-03 Revise los metarchivos del servidor web para detectar fugas de información
WSTG-INFO-04 Enumerar aplicaciones en el servidor web
WSTG-INFO-05 Revisar el contenido de la página web para detectar fugas de información
WSTG-INFO-06 Identificar los puntos de entrada de la aplicación
WSTG-INFO-07 Asignar rutas de ejecución a través de la aplicación
WSTG-INFO-08 Marco de aplicaciones web de huellas dactilares
WSTG-INFO-09 Aplicación web de huellas dactilares
WSTG-INFO-10 Arquitectura de aplicaciones de mapas

Pruebas de gestión de configuración e implementación

Pruebas de gestión de configuración e implementación Nombre de la prueba
WSTG-CONF-01 Configuración de infraestructura de red de prueba
WSTG-CONF-02 Configuración de la plataforma de aplicaciones de prueba
WSTG-CONF-03 Manejo de extensiones de archivo de prueba para información confidencial
WSTG-CONF-04 Revise la copia de seguridad antigua y los archivos sin referencia en busca de información confidencial
WSTG-CONF-05 Enumerar interfaces de administración de aplicaciones e infraestructura
WSTG-CONF-06 Probar métodos HTTP
WSTG-CONF-07 Probar la seguridad de transporte estricta de HTTP
WSTG-CONF-08 Probar la política de dominios cruzados de RIA
WSTG-CONF-09 Permiso de archivo de prueba
WSTG-CONF-10 Prueba de adquisición de subdominio
WSTG-CONF-11 Prueba de almacenamiento en la nube

Pruebas de gestión de identidad

Pruebas de gestión de identidad Nombre de la prueba
WSTG-IDNT-01 Definiciones de roles de prueba
WSTG-IDNT-02 Proceso de registro de usuario de prueba
WSTG-IDNT-03 Proceso de aprovisionamiento de cuenta de prueba
WSTG-IDNT-04 Pruebas de enumeración de cuenta y cuenta de usuario adivinable
WSTG-IDNT-05 Prueba de política de nombre de usuario débil o no aplicada

Pruebas de autenticación

Pruebas de autenticación Nombre de la prueba
WSTG-ATHN-01 Prueba de credenciales transportadas a través de un canal cifrado
WSTG-ATHN-02 Prueba de credenciales predeterminadas
WSTG-ATHN-03 Prueba de mecanismo de bloqueo débil
WSTG-ATHN-04 Prueba para eludir el esquema de autenticación
WSTG-ATHN-05 Prueba para recordar contraseña vulnerable
WSTG-ATHN-06 Prueba de debilidades de caché del navegador
WSTG-ATHN-07 Prueba de política de contraseña débil
WSTG-ATHN-08 Prueba de respuesta de pregunta de seguridad débil
WSTG-ATHN-09 Prueba de funcionalidades de cambio o restablecimiento de contraseña débil
WSTG-ATHN-10 Prueba de autenticación más débil en canal alternativo

Pruebas de autorización

Pruebas de autorización Nombre de la prueba
WSTG-ATHZ-01 Prueba de inclusión de archivos transversales de directorios
WSTG-ATHZ-02 Pruebas para eludir el esquema de autorización
WSTG-ATHZ-03 Pruebas de escalada de privilegios
WSTG-ATHZ-04 Pruebas de referencias de objetos directos inseguros

Pruebas de gestión de sesiones

Pruebas de gestión de sesiones Nombre de la prueba
WSTG-SESS-01 Prueba del esquema de gestión de sesiones
WSTG-SESS-02 Prueba de atributos de cookies
WSTG-SESS-03 Prueba de Fijación de Sesión
WSTG-SESS-04 Prueba de variables de sesión expuestas
WSTG-SESS-05 Pruebas de falsificación de solicitudes entre sitios
WSTG-SESS-06 Prueba de funcionalidad de cierre de sesión
WSTG-SESS-07 Tiempo de espera de la sesión de prueba
WSTG-SESS-08 Prueba de desconcierto de sesión
WSTG-SESS-09 Prueba de secuestro de sesión

Pruebas de validación de datos

Pruebas de validación de datos Nombre de la prueba
WSTG-INPV-01 Pruebas de secuencias de comandos de sitios cruzados reflejadas
WSTG-INPV-02 Pruebas de secuencias de comandos entre sitios almacenadas
WSTG-INPV-03 Prueba de manipulación de verbos HTTP
WSTG-INPV-04 Pruebas de contaminación de parámetros HTTP
WSTG-INPV-05 Pruebas de inyección SQL
WSTG-INPV-06 Prueba de inyección LDAP
WSTG-INPV-07 Pruebas de inyección XML
WSTG-INPV-08 Pruebas de inyección de SSI
WSTG-INPV-09 Prueba de inyección XPath
WSTG-INPV-10 Pruebas de inyección IMAP SMTP
WSTG-INPV-11 Pruebas de inyección de código
WSTG-INPV-12 Prueba de inyección de comandos
WSTG-INPV-13 Prueba de inyección de cadenas de formato
WSTG-INPV-14 Pruebas de vulnerabilidad incubada
WSTG-INPV-15 Pruebas de contrabando de división HTTP
WSTG-INPV-16 Prueba de solicitudes entrantes HTTP
WSTG-INPV-17 Prueba de inyección de encabezado de host
WSTG-INPV-18 Prueba de inyección de plantilla del lado del servidor
WSTG-INPV-19 Pruebas de falsificación de solicitudes del lado del servidor

Manejo de errores

Manejo de errores Nombre de la prueba
WSTG-ERRH-01 Pruebas para el manejo inadecuado de errores
WSTG-ERRH-02 Prueba de rastros de pila

Criptografía

Criptografía Nombre de la prueba
WSTG-CRYP-01 Pruebas de seguridad de capa de transporte débil
WSTG-CRYP-02 Pruebas para Padding Oracle
WSTG-CRYP-03 Pruebas de información confidencial enviada a través de canales no cifrados
WSTG-CRYP-04 Pruebas de cifrado débil

Pruebas de lógica de negocios

Pruebas de lógica de negocios Nombre de la prueba
WSTG-BUSL-01 Prueba de validación de datos de lógica empresarial
WSTG-BUSL-02 Capacidad de prueba para falsificar solicitudes
WSTG-BUSL-03 Comprobaciones de integridad de la prueba
WSTG-BUSL-04 Prueba de temporización del proceso
WSTG-BUSL-05 Prueba Número de veces que se puede usar una función Límites
WSTG-BUSL-06 Pruebas de elusión de flujos de trabajo
WSTG-BUSL-07 Pruebe las defensas contra el mal uso de la aplicación
WSTG-BUSL-08 Carga de prueba de tipos de archivos inesperados
WSTG-BUSL-09 Carga de prueba de archivos maliciosos

Pruebas del lado del cliente

Pruebas del lado del cliente Nombre de la prueba
WSTG-CLNT-01 Pruebas para Cross Site Scripting basado en DOM
WSTG-CLNT-02 Prueba de ejecución de JavaScript
WSTG-CLNT-03 Prueba de inyección de HTML
WSTG-CLNT-04 Prueba de redirección de URL del lado del cliente
WSTG-CLNT-05 Pruebas de inyección de CSS
WSTG-CLNT-06 Pruebas de manipulación de recursos del lado del cliente
WSTG-CLNT-07 Probar el intercambio de recursos de origen cruzado
WSTG-CLNT-08 Prueba de intermitencia entre sitios
WSTG-CLNT-09 Pruebas de secuestro de clics
WSTG-CLNT-10 Prueba de WebSockets
WSTG-CLNT-11 Prueba de mensajería web
WSTG-CLNT-12 Probar el almacenamiento del navegador
WSTG-CLNT-13 Pruebas para la inclusión de secuencias de comandos en sitios cruzados

Prueba de API

Prueba de API Nombre de la prueba
WSTG-APIT-01 Probando GraphQL

Ordenar auditoría de Sayfer





    Este sitio está protegido por reCAPTCHA y Google Política de Privacidad y Términos de Servicio aplican.

    Conclusiones de la evaluación de seguridad

    Las URL RPC se definen como wsRpcUrl mientras usa HTTP

    ID DECIR-01
    Estado Abierto
    Riesgo Medio
    Impacto en el negocio Es difícil determinar el impacto sin una demostración funcional. Si el cambio es erróneo, puede romper el ajuste; de ​​lo contrario, se trata de un simple problema de documentación/nombramiento de variables.
    Destino paquetes/snap/src/configuration/predefinido.ts:11,22,33

    Descripción

    Las URL RPC de protocolos individuales se cambiaron en la última versión del complemento. Se utiliza HTTP (http://) en lugar de WebSocket (wss://).

    Esto es inesperado, porque el documentación oficial de Polkadot indica solo direcciones de websocket en sus recursos. Además, en muchos lugares del código, los nombres de las variables todavía contienen el prefijo ws, como wsRpcurl.

    predefinidos.ts:

    wsRpcUrl: 'https: /
    
    wsRpcUrl: 'https: /kusama-rpc.polkadot.io/'
    {...}
    wsRpcUrl: 'https: /westend-rpc.polkadot.io/'
    {...}
    wsRpcUrl: 'https: /rpc.polkadot.io/'
    

    Mitigación

    Asegúrese de que se supone que se utiliza el protocolo HTTP. Si es así, cambie la documentación oficial para reflejar esto y modifique los nombres de las variables relevantes.

     

    conformaciones Las funciones clave no se gestionan cuando se rechazan

    ID DECIR-02
    Estado Abierto
    Riesgo Medio
    Impacto en el negocio Si el usuario rechaza la transacción, no se devolverá nada, lo que terminará con un error de JavaScript, un error genérico. indefinido mensaje, o nada en absoluto. Esto puede provocar un comportamiento indefinido o inesperado.
    Destino – paquetes/snap/src/rpc/exportSeed.ts:14
    – paquetes/snap/src/rpc/substrate/sign.ts:33,53

    Descripción

    Para las funciones clave de Snap (como mostrar la clave privada o firmar un mensaje), se muestran cuadros de diálogo para que el usuario confirme si sabe lo que está aceptando. Si el usuario confirma la transacción, se ejecuta. Lo contrario, cuando el usuario rechaza la transacción, no se maneja en absoluto.

    exportSeed (SnapsGlobalObject), observe que no hay ningún bloque más

    if (confirmation) {
        const bip44Node = (await snap.request({
        method: "snap_getBip44Entropy",
        params: { coinType: kusamaCoinType },
    })) as JsonBIP44CoinTypeNode;
    

    signPayloadJSON(SnapsGlobalObject, ApiPromise, SignerPayloadJSON)

    if (confirmation) {
        const extrinsic = api.registry.createType('ExtrinsicPayload', payload, { version: payload.version });
        return extrinsic.sign(keyPair);
    }
    

    signPayloadRaw (SnapsGlobalObject, ApiPromise, SignerPayloadRaw)

    if (confirmation) {
        const signedBytes = keyPair.sign(hexToU8a(payload.data));
        return {
        signature: u8aToHex(signedBytes)
    };
    

    Desafortunadamente, dado que las pruebas automatizadas no funcionaron, no pudimos verificar ni confirmar definitivamente este escenario.

    Mitigación

    Maneja el más caso, donde el usuario rechaza la transacción, en cuyo caso se debe mostrar un error apropiado.

     

    No hay diálogo de confirmación al enviar

    ID DECIR-03
    Estado Abierto
    Riesgo Baja
    Impacto en el negocio Sin un diálogo de confirmación, existe el riesgo de que un usuario potencial ejecute por error una transacción enviando fondos a la cuenta equivocada.
    Destino – paquetes/snap/src/rpc/send.ts:7-34

    Descripción

    Al firmar mensajes o mostrar la clave privada, el complemento muestra un cuadro de diálogo que le pregunta al usuario si está seguro de querer continuar. Sin embargo, no se muestra ningún diálogo de confirmación al realizar el envío.

    Mitigación

    Implementar un cuadro de diálogo pidiendo al usuario que confirme la transacción.

     

    habilitarPolkadotSnap Devuelve un error al utilizar el valor predeterminado nombre de red

    ID DECIR-04
    Estado Abierto
    Riesgo Baja
    Impacto en el negocio Incumplimiento de los supuestos comerciales de que Westend es la red predeterminada.
    Destino – paquetes/adaptador/src/index.ts:27-29

    Descripción

    Se ha observado que a pesar de seleccionar Westend como red predeterminada en complemento/src/configuration/predefinido.ts, si el adaptador ejecuta su única función expuesta, enablePolkadotSnap(), sin especificar config.networkName, se devolverá un error.

    Esto es inconsistente con las suposiciones de Snap, descritas entre otras en el archivo README.md del adaptador, que indica que especificar una configuración anulará la predeterminada.

    paquetes/snap/src/configuration/predefinido.ts; líneas 13-22, 35

    
    export const westendConfiguration: SnapConfig = {
        addressPrefix: 42,
        networkName: "westend",
        unit: {
            decimals: 12,
            image: "https: /svgshare.com/i/L2d.svg",
            symbol: "WND",
        },
        wsRpcUrl: "wss: /westend-rpc.polkadot.io/",
    };
    [ .]
    export const defaultConfiguration: SnapConfig = westendConfiguration;
    

    paquetes/snap/src/configuration/predefinido.ts; líneas 27-29

    if (!config.networkName) {
    throw new Error("Configuration must at least define network type");
    }
    
    

    Mitigación

    A juzgar por la documentación y por el código en predefinido.ts, este error no debería devolverse y debería utilizarse Westend. Por el contrario, Westend no debe establecerse como predeterminado y modificar la documentación para reflejarlo.

     

    Demostración que no funciona

    ID DECIR-05
    Estado Abierto
    Riesgo Informativo
    Impacto en el negocio Tener una demostración funcional puede ayudar a los usuarios a probar la funcionalidad de Snap y ayudar a los auditores a mejorar enormemente sus pruebas.
    Destino

    Descripción

    Según la documentación, el comando yarn install & yarn run demo should run a working demo de Snap, permitiéndole instalarlo y utilizar las diversas funciones. Desafortunadamente, durante la instalación, la consola del navegador arrojó un error. Por lo tanto, la verificación de Snap como un “organismo vivo” fue imposible}

    Mitigación

    Sugerimos llevar Snap a un estado utilizable y luego realizar pruebas en profundidad en transacciones reales con la red Polkadot.

    Puedes encontrar más información al respecto en nuestro Blog

    El blog de Sayfer se centra en web3, seguridad e investigación de vulnerabilidades. Creemos que en la industria de la ciberseguridad es crucial mantenerse actualizado sobre las últimas tendencias y avances. En la actualidad, nuestro equipo de investigadores experimentados disfruta investigando tecnologías blockchain y web3 de vanguardia.
    Contáctenos

    Mantenerse en contacto

    Destino
    Tel Aviv, Israel
    Correo electrónico
    Mensajeros
    No dude en ponerse en contacto con nosotros, ¡estaremos encantados de responderle!





      Este sitio está protegido por reCAPTCHA y Google Política de Privacidad y Términos de Servicio aplican.
      Ir al contenido