Cada mês, o Diretor de Segurança da MetaMask, Luker, reporta os ataques cripto mais recentes e os riscos emergentes que você precisa conhecer.
O relatório de abril de 2022 da equipe de Segurança da MetaMask aborda o marco de compatibilidade CommonJS do Endo para nossa cadeia de dependências npm, a nova notação de nomenclatura de pacotes 'a'a do LavaMoat v6 que reduziu o tempo de execução da metamask-extension em aproximadamente 600x (de 10 minutos para menos de 1 segundo), a adoção das proteções de cadeia de suprimentos do LavaMoat v6 pela MetaMask Extension, o lockdown() do LavaMoat alcançando compatibilidade com React Native para abrir caminho ao MetaMask Mobile, e um aviso sobre backup no iCloud para dados do vault da MetaMask. Confira os detalhes abaixo, mas primeiro...
Pioneiro STEM em destaque: Butler Lampson, pai da segurança computacional baseada em capacidades
Butler Lampson é um cientista da computação americano que formalizou como o software controla o acesso a recursos. Seu modelo de matriz de acesso, desenvolvido no início dos anos 1970, unificou capacidades e listas de controle de acesso em um único framework — e lhe rendeu o Prêmio Turing em 1992. O isolamento baseado em capacidades que ele pioneirou é o fundamento teórico para o sandboxing de compartimentos que o Endo e o LavaMoat utilizam para proteger a MetaMask hoje.
Endo alcança compatibilidade com módulos CommonJS e revela lacunas restantes no carregamento de pacotes npm
O suporte CommonJS do Endo atingiu um marco em abril de 2022. Testes de ponta a ponta em pacotes reais do ecossistema npm — em sua maioria selecionados das dependências da MetaMask — revelaram casos em que o suporte CommonJS era insuficiente e ajudaram a impulsionar a implementação. Um teste comparando múltiplos formatos de exportação de CommonJS importado em ESM no Endo, Node.js e uma seleção de bundlers ajudou a definir metas e evitar regressões.
As mudanças mais notáveis no suporte CommonJS do Endo durante esse período incluíram: a conexão de exports com import * e a introdução de um export padrão implícito; a melhoria do lexer para detectar todas as ocorrências de require e adiar erros de pacotes ausentes para o tempo de execução; a refatoração do tratamento de exports para tornar module.exports o padrão e identificar exports nomeados; e a adição de suporte para package.json aninhado com type:module e arrays de valores opcionais em exports do package.json.
O progresso é acompanhado no epic de rastreamento CommonJS.
O Endo agora suporta o carregamento correto de módulos CommonJS. Todos os problemas restantes ao carregar pacotes reais do npm se enquadram em quatro categorias: uso de recursos ausentes (como require.resolve ou import.meta), modificação de globais e intrínsecos, acionamento de filtros que protegem contra injeção de imports ou comentários HTML, e mapeamento incorreto de exports e resolução de tipo de módulo pelo Endo.
Comando experimental endo run executa arquivos JS com isolamento por compartimento
Com base nas ferramentas existentes usadas para conectar os testes de ponta a ponta do Endo, um comando experimental endo run agora pode executar um arquivo JS com compartimentos — semelhante ao node app.js, mas com o modelo de isolamento do Endo aplicado.
Atualmente, todos os módulos principais do Node.js são disponibilizados para require/import pela base de código e suas dependências. Trabalhos futuros devem adicionar suporte a políticas do LavaMoat.
A nomenclatura de pacotes 'a'a do LavaMoat v6 reduz o tempo de execução da metamask-extension em 600x, de 10 minutos para menos de 1 segundo
O LavaMoat v6 foi lançado com uma nova notação de identificador de pacotes para evitar problemas de personificação e reutilização de nomes de pacotes. A notação, chamada de 'a'a, agora é usada como chave nos arquivos de política.
O desempenho da implementação inicial foi fortemente impactado por ineficiências no Node.js ao localizar e acessar arquivos. Uma primeira tentativa de melhoria de desempenho — limitada a dois casos de memoização simples — reduziu o tempo de execução no pior caso da notação 'a'a na metamask-extension de 10 minutos para 30 segundos. Porém, o custo dos picos de uso de memória era muito alto.
Uma segunda iteração de diagnósticos e melhorias de desempenho entregou mais de 25x menos tempo e uso de RAM em comparação com os resultados da primeira iteração, por meio de um novo algoritmo, eliminação de recursão e melhorias locais de desempenho na resolução de módulos do Node.js.
No total, a melhoria no tempo de execução foi de aproximadamente 600x entre a primeira implementação completa e a versão atual.
MetaMask Extension adota as proteções de cadeia de suprimentos do LavaMoat v6
A MetaMask Extension agora opera sob as proteções do LavaMoat v6, com o rollout-+ rastreado no PR #14488.
lockdown() do LavaMoat alcança compatibilidade com React Native, abrindo caminho para o MetaMask Mobile
O passo fundamental para tornar o LavaMoat operacional em aplicações React Native é executar a função SES lockdown(). A função lockdown() protege o software contra ataques à cadeia de suprimentos ao listar os primordiais em JavaScript e congelar protótipos, tornando improvável que um agente malicioso realize um ataque de poluição de protótipo.
Um relato detalhado das descobertas feitas durante esse trabalho está no React Native Compatibility Tracker. Os principais fatores para alcançar a compatibilidade são: permitir que o Metro execute o bundle SES rodando arquivos .cjs, adicionar opções específicas de lockdown, remover plugins do Babel e remover o polyfill de Promise. Outros problemas são específicos da aplicação MetaMask Mobile, como as dependências do Sentry e do EthereumJS.
O resultado é um pull request no repositório da aplicação MetaMask Mobile. Os próximos passos incluem a execução de testes de ponta a ponta para confirmar que o lockdown() não quebrou funcionalidades adicionais antes de avançar para a próxima etapa: integrar o LavaMoat ao MetaMask Mobile.
Backup no iCloud encontrado incluindo dados do vault da MetaMask criptografados por senha
Usuários Apple que habilitaram o backup no iCloud para dados de aplicativos podem estar fazendo backup do vault da MetaMask criptografado por senha sem perceber. Se sua senha não for suficientemente forte e alguém obtiver suas credenciais do iCloud por phishing, isso pode resultar em fundos roubados. A MetaMask publicou orientações no X com passos detalhando como controlar essa configuração em seus dispositivos.
O Relatório de Segurança Cripto de abril de 2022 da MetaMask abordou o marco de compatibilidade CommonJS do Endo para a cadeia de dependências npm da MetaMask, a melhoria de desempenho de 600x do LavaMoat v6 na metamask-extension por meio da nova notação de nomenclatura de pacotes 'a'a, e o aviso sobre backup no iCloud para dados do vault da MetaMask. Navegue pelas edições anteriores do relatório de segurança cripto da MetaMask para conhecer mais ameaças, tendências e dicas para se manter seguro em todo o ecossistema.