Navegando pelo Cenário de Segurança dos MetaMask Snaps

Este blog explora o modelo de confiança do MetaMask Snaps, detalhando problemas de segurança comuns e melhores práticas para desenvolvedores no ecossistema web3.

5 min de leitura
Navegando pelo Cenário de Segurança dos MetaMask Snaps

MetaMask Snaps é um sistema de código aberto que permite aos usuários estender com segurança as funcionalidades da MetaMask, oferecendo novas experiências de carteira. Em sua essência, um Snap é um programa JavaScript que opera dentro da MetaMask em um ambiente isolado.

Neste blog, exploraremos o cenário de segurança do MetaMask Snaps. Como auditores de segurança blockchain da Consensys Diligence, somos especializados em segurança de contratos inteligentes. A Consensys Diligence é uma empresa de segurança blockchain com um serviço abrangente de auditoria de contratos inteligentes para ajudar projetos em toda a web3 a criar dapps seguros.

Entendendo o modelo de confiança do MetaMask Snap

Todo desenvolvedor de Snaps precisa compreender o modelo de confiança inerente ao MetaMask Snaps. Esse modelo define os limites de confiança entre os diferentes atores. A mensagem principal a ser lembrada é que os usuários finais confiam na MetaMask, mas não confiam nos dapps.

Formalizamos e resumimos o modelo de confiança no diagrama abaixo. Esse diagrama ilustra os diferentes limites de confiança que os desenvolvedores devem ter em mente ao desenvolver Snaps:

Três principais limites de confiança para dapps web3, usuários e MetaMask

Primeiro, há um limite de confiança entre o usuário e o dapp. Os usuários nunca confiam nos dapps. De fato, os dapps podem ser maliciosos ou comprometidos. Eles podem fazer os usuários acreditarem que estão assinando um determinado payload quando, na verdade, estão assinando outra coisa.

Segundo, há um limite de confiança em torno da MetaMask e suas extensões. Embora os usuários não confiem nos dapps, eles confiam na MetaMask. A MetaMask é a fonte da verdade para o usuário. O payload exibido e assinado dentro da MetaMask, seja por meio de seu módulo principal ou de Snaps, é o que importa.

Terceiro, há também um limite de confiança entre o módulo principal da MetaMask e o Snap. Os desenvolvedores de Snaps podem interagir com o módulo principal da MetaMask por meio da API de Snaps. Essa API implementa um sistema de permissões, o que significa que os desenvolvedores precisam solicitar permissões antes de acessar recursos restritos da API. No entanto, com as permissões adequadas, os Snaps podem realizar ações críticas, como acessar a entropia raiz da MetaMask, assinar dados ou se comunicar com APIs externas.

Em essência, o princípio orientador para os usuários finais no ecossistema MetaMask é simples, porém profundo: Os usuários finais devem confiar apenas nas informações e interações que ocorrem dentro do contexto da MetaMask e do MetaMask Snap, conhecido como Trust Module.

Decodificando problemas comuns no MetaMask Snaps

O modelo de confiança da MetaMask permite uma abordagem de auditoria estruturada e ajuda os auditores a identificar problemas de segurança. Durante nossas auditorias de Snaps, identificamos diferentes categorias de problemas. Ainda assim, ficamos curiosos sobre outras categorias potenciais. Por isso, realizamos uma análise abrangente de 40 Snaps auditados por 9 empresas de auditoria. Criamos uma classificação e categorizamos os problemas de acordo com ela. A seguir, destacamos algumas categorias interessantes com exemplos. Observe que essa lista não é exaustiva.

Validação de entrada do usuário:

  1. Injeção de Markdown e caracteres de controle: Envolve o risco de código ou comandos indesejados serem injetados por meio de markdown ou caracteres de controle nas entradas do usuário.

  2. Sanitização e validação de entrada do usuário:- Verificação de tipo/confusão de tipo e problemas de parsing

  • API não rejeita parâmetros RPC inválidos: Esse problema ocorre quando a API não rejeita parâmetros inválidos, como IDs de chain incorretos, checksums de endereço ou estruturas de taxas.

  • Validação inadequada de URI: Esse problema pode ocorrer ao usar expressões regex permissivas na validação de URIs, por exemplo.

Consentimento do usuário e problemas de interface:

  1. Quebra do padrão de UX estabelecido pela MetaMask: Esse problema surge quando os aplicativos se desviam dos padrões de experiência do usuário estabelecidos pela MetaMask.- Não solicitar ao usuário acesso à conta: A MetaMask sempre solicita ao usuário antes de conectar qualquer conta ao dapp. Os desenvolvedores de Snaps devem seguir o mesmo padrão.

  • Enumeração de contas: Uma preocupação de privacidade em que o aplicativo pode enumerar ou listar contas de usuários sem o consentimento adequado.

  1. Não solicitar consentimento do usuário:- Ao assinar payloads: Refere-se a situações em que o aplicativo realiza ações relacionadas a assinaturas sem aprovação explícita do usuário.

  • Exibição de chave privada sem opção de visibilidade de senha: chaves privadas são exibidas sem o uso de um componente de clique para revelar acompanhado de um texto de aviso. Isso pode ser problemático se o usuário estiver em um ambiente público, por exemplo.

  1. Diálogos de snap opacos: São diálogos que carecem de transparência ou clareza.- Diálogo de assinatura de transação com informações ausentes: Um caso em que informações essenciais são omitidas nos diálogos de assinatura de transação, ou as informações apresentadas ao usuário não são legíveis por humanos.

  • Problemas de imprecisão no arredondamento de taxas: Refere-se a imprecisões ou falta de precisão nos cálculos e exibições de taxas.

  • Exibição da origem: O Snap não exibe a origem de uma ação. Isso pode induzir o usuário a pensar que a ação foi iniciada por um dapp quando, na verdade, foi por outro dapp.

Problemas de dependências:

  1. Dependências vulneráveis/não confiáveis.

  2. Ataques à cadeia de suprimentos: Uma dependência pode ser comprometida, seja por vetores de ataque diretos ou indiretos.

  3. Dependências desatualizadas: Depender de dependências desatualizadas pode ter implicações ruins para a segurança, pois essas dependências podem conter vulnerabilidades.

Problemas de permissão e autorização:

  1. Permissões desnecessárias: Conceder permissões em excesso leva à diminuição da segurança.

  2. Acesso a permissões de baixo nível: Gerenciamento inadequado da entropia das chaves raiz da MetaMask para Ethereum, por exemplo.

  3. Vazamento de material criptográfico:- Dapp solicita chave privada: As chaves privadas nunca devem sair da MetaMask!

  • Gerenciamento de contas: O snap deve solicitar ao usuário antes de conectar qualquer conta na primeira conexão.

Atualmente, estamos refinando os resultados de nossa análise e identificando novos insights. Em breve, haverá mais novidades. Fique ligado :)

Principais aprendizados para desenvolvedores de Snap

Esteja ciente de que você está desenvolvendo um módulo de confiança! Os usuários confiam na MetaMask, mas não no dapp. O usuário deve confirmar cada ação e deve ter todas as informações disponíveis para tomar uma decisão informada. As chaves nunca saem da MetaMask. Consequentemente, como desenvolvedor de Snaps, você pode:

  1. Solicitar permissões mínimas: Os Snaps devem solicitar acesso apenas às funcionalidades ou dados estritamente necessários para sua operação, a fim de minimizar a superfície de ataque.

  2. Validar e sanitizar entradas não confiáveis: Evite ataques de injeção ou execução de código não confiável. Dada a capacidade do Snap de estender a funcionalidade da carteira do usuário, garantir que todas as entradas sejam seguras e livres de exploits é essencial para proteger tanto a integridade da carteira quanto os ativos do usuário.

  3. Gerenciar a cadeia de suprimentos: Selecione e atualize as dependências com cuidado para evitar vulnerabilidades.

Ter esses princípios e os problemas comuns subjacentes em mente durante o desenvolvimento torna o futuro dos Snaps muito mais seguro para o próximo bilhão de usuários.

A Consensys Diligence ajudou uma ampla gama de projetos em todo o ecossistema blockchain a garantir que seus protocolos estejam prontos para o lançamento e construídos para proteger os usuários. A Consensys Diligence tem prazer em verificar seu Snap em busca dessas e de outras vulnerabilidades em uma auditoria personalizada. Entre em contato e solicite um orçamento!

Martin Ortner (tintinweb)

Valentin Quelquejay

Martin e Valentin, profissionais de segurança da Consensys Diligence, estão na vanguarda da pesquisa de segurança de Snaps, trabalhando diligentemente para aprimorar a segurança da plataforma.

Traduzido por IA. Pode conter erros. Por favor, verifique sempre as informações.

Avalie a tradução