Nós realmente evitamos uma grande ameaça
(xeiaso.net)- O recente ataque à cadeia de suprimentos no ecossistema de pacotes NPM poderia, na prática, ter causado danos muito maiores
- O invasor usou o código malicioso apenas para alterar endereços de carteiras de criptomoedas ao explorar bibliotecas populares
- O ataque foi realizado por meio de e-mails de phishing sofisticados para roubar as credenciais de autenticação em dois fatores de desenvolvedores
- Se tivesse sido usado de forma mais letal, como para roubo de chaves de API, havia potencial para danos massivos
- O caso reforça a percepção de que todas as dependências são potencialmente arriscadas e destaca a importância de entender toda a árvore de dependências
Visão geral do ataque e preocupações
- Recentemente, pacotes populares no NPM, um dos maiores ecossistemas de pacotes, foram expostos a um ataque
- Exemplos de função: tratamento de cores no terminal, mapeamento de nomes de cor para RGB, decoradores de depuração de funções, utilitários para identificar valores semelhantes a arrays etc.
- Essas dependências comuns são amplamente usadas e, quando código entra nelas, há grande chance de ele ser implantado imediatamente em ambientes de produção
- Se tivessem incluído proxy malicioso, roubo de chaves de API ou outros ataques graves, o resultado poderia ter sido muito pior
- Na prática, esse malware apenas adulterava endereços de pagamento em carteiras online (como a MetaMask)
A sofisticação do ataque de phishing
- O ponto de partida do ataque foi um e-mail de phishing muito bem elaborado
- Usava o nome de usuário do NPM para passar uma impressão personalizada
- Induzia confiança com a mensagem de que era preciso “alterar a senha e as credenciais de autenticação de dois fatores por segurança”
- O conteúdo foi montado de forma que um usuário comum poderia cair facilmente, em combinação com particularidades da operação do NPM
- Indicava um prazo específico para criar urgência e levar a pessoa, em meio à correria, a clicar no link de phishing sem atenção
- Usava um domínio
.helpsemelhante ao domínio oficial do NPM
- A parte mais perceptível era o uso de "npmjs.help" em vez do domínio oficial
- Hoje em dia, vários novos gTLDs (Generic Top Level Domains) são amplamente usados em blogs e documentações, então isso também pode parecer natural
Danos potenciais do ataque
- O e-mail de phishing podia roubar as credenciais de autenticação em dois fatores do usuário e, depois, permitir a publicação de novos pacotes com código malicioso inserido
- Bibliotecas muito usadas como is-arrayish, color-string, color-name estavam entre os alvos
- Se o malware tivesse ido além de simplesmente interceptar criptomoedas e evoluído para roubo de chaves de API, poderia ter causado consequências fatais
- Por exemplo, poderia haver exposição em massa de chaves de API da OpenAI, AWS etc., gerando danos duradouros e em larga escala
- Na prática, a maioria das bibliotecas infectadas era usada principalmente em ferramentas de linha de comando, então o objetivo de roubo de criptomoedas era relativamente limitado
Alvo no ecossistema Web3 e estratégia do invasor
- Este ataque parece ter tido como alvo principal usuários de Web3 (como quem faz pagamentos pelo navegador)
- Ao mirar bibliotecas genéricas sem relação direta com Web3, o invasor evitou a rápida identificação e bloqueio por parte do ecossistema Web3
- Ex.: mesmo inspecionando cuidadosamente bibliotecas integradas ao MetaMask, seria difícil prever um ataque vindo de um utilitário relacionado à cor de texto
Lições para o ecossistema de desenvolvimento
- Este caso reforça que qualquer pacote de dependência pode, de fato, ser malicioso
- Há limites práticos para controlar ou monitorar totalmente a árvore de dependências o tempo todo
- Também sugere que, sob fluxos rápidos de deploy em produção e pressão de tempo, a revisão de segurança pode inevitavelmente ficar em segundo plano
- Daqui para frente, cresce a importância de entender a composição completa das dependências do projeto e gerenciá-las com mais cautela
Encerramento e aviso
- Este conteúdo não busca culpar nem responsabilizar ninguém em particular; o importante é reconhecer que qualquer pessoa pode ser exposta a ataques de phishing
- Como a situação pode mudar após a publicação deste post, se houver dúvidas ou possível erro no conteúdo, é necessário verificar diretamente
Tags:
1 comentários
Comentário no Hacker News
O ataque à cadeia de suprimentos do nx no npm foi uma bala que muitas empresas não conseguiram desviar; bastava instalar o plugin nx do VS Code para ele verificar automaticamente a versão mais recente do nx no npm, e, se houvesse credenciais importantes em uma sessão do GitHub (por exemplo, login na conta corporativa pelo GH CLI) ou em arquivos
.env, tudo teria sido vazado; isso era algo impossível de evitar mesmo com bom controle de pinagem de dependências ou atualizações de segurança; mudanças mais profundas são necessárias nesse ecossistema; para mais detalhes, veja o aviso oficial de segurançagit pushEscapamos por muito pouco de uma situação realmente crítica; é difícil acreditar que um atacante com acesso a esses pacotes tenha colocado apenas uma ferramenta para roubo de criptomoedas; se fosse uma oportunidade dessas, eu imagino que valeria a pena investir mais uma semana e embutir exploits mais sofisticados; há API keys, adição de chaves públicas SSH, vazamento de IPs de servidores, perfis de navegador ou tokens de sessão no dispositivo do desenvolvedor, até mesmo dados de cartão da Amazon no meu desktop; há coisa demais para roubar; mesmo que o invasor não use isso diretamente, tudo poderia ser facilmente vendido em fóruns da dark web; às vezes me pergunto se os cibercriminosos realmente competentes já não estão empregados em empresas de tecnologia estáveis e bem remuneradas, e por isso só sobram ataques simples como esse
Para mim, procrastinar virou técnica de sobrevivência; como espero os outros fazerem o beta test primeiro, no passado usei só o Microsoft Office 2000 por 12 anos na empresa, e vivi 10 anos em paz sem problemas de upgrade nem retreinamento; e tenho o hábito de nunca clicar em links de email
Para startups pequenas isso pode ser difícil, mas acho que um player grande como o npm deveria registrar preventivamente o domínio npm em todas as versões de TLD, como "npm.io", "npm.sh", "npm.help" etc.; o fato de o atacante ter conseguido o domínio "npm.help" tornou esse ataque ainda mais eficaz
no-reply-aws@amazon.comparano-reply@tax-and-invoicing.us-east-1.amazonaws.com; como é um endereço que você nunca viu antes, ele praticamente parece um phishing, mas dizem que é oficial, então a situação fica confusa; até o email de aviso prévio parece phishing, então eu não abro o PDF anexo até receber a fatura de verdade; as empresas dizem aos clientes para tomar cuidado com phishing, mas ao mesmo tempo criam confusão desnecessáriaE se alguém combinar algo extremamente meticuloso (no estilo Jia Tan) com a nossa segurança frouxa em plugins de editor, shell userland e afins? Ferramentas para desenvolvedores rodam com privilégios de superusuário, mas são justamente as menos auditadas; eu mesmo não consigo auditar uma por uma tudo de elisp, neovim, vscode e até ferramentas simples de userland; no melhor cenário, pego algo do nixpkgs; basta alguém lançar um plugin melhor para VSCode e esperar 1 ou 2 anos; GG
Carteiras como MetaMask foram alvo, mas ouvi dizer que o MetaMask é relativamente bem protegido contra esse tipo de ataque graças a um módulo de isolamento chamado LavaMoat; eu realmente gostaria de ver uma análise detalhada do nível real de proteção; pessoalmente não tenho relação com o MetaMask, mas tenho curiosidade sobre a eficácia desse tipo de resposta de segurança (que costuma ser mais lenta do que os ataques reais); deixo como referência este artigo relacionado
Sobre a frase "a verdade é que, no fim, você vai cair em um ataque de phishing desses algum dia", eu acho que comigo provavelmente não; tenho o hábito de jamais inserir credenciais em links de emails que eu mesmo não solicitei (por exemplo, redefinição de senha); acho que é uma habilidade de segurança que todo mundo precisa dominar em 2025
Ao contrário da descrição da matéria de que "todo o malware apenas trocava endereços de carteiras de criptomoedas", o motivo de o MetaMask não ter sido afetado foi:
Grandes repositórios abertos de pacotes precisam de soluções de segurança muito mais fortes, ou então de pelo menos um conjunto central de pacotes confiáveis e auditados; o mesmo vale para ecossistemas como Python e Rust, que também funcionam muito na base da confiança
A afirmação de que "não há como impedir isso" aparece sempre nos ecossistemas que sofrem invasões com mais frequência