Skip to main content

Código malicioso encontrado no pacote npm event-stream, baixado 8 milhões de vezes nos últimos 2,5 meses

Escrito por
How much do you really know about the npm package registry

27 de novembro de 2018

0 minutos de leitura

Foi encontrado um pacote malicioso chamado flatmap-stream no event-stream, um pacote npm amplamente utilizado. O problema foi divulgado em uma issue aberta no GitHub contra o repositório do código-fonte.

O pacote event-stream facilita a criação e o uso de streams e é muito popular, com cerca de 2 milhões de downloads por semana. Desde que foi incluído, em setembro de 2018, o pacote secundário malicioso foi baixado quase 8 milhões de vezes.

Adicionamos o pacote malicioso ao nosso banco de dados de vulnerabilidades. Se o Snyk monitora seu projeto e identificarmos a dependência maliciosa (seja event-stream@3.3.6 ou qualquer versão do flatmap-stream), você receberá um alerta de rotina do Snyk.

Se seus projetos não são monitorados pelo Snyk e você quer verificar se usam esse pacote, clique aqui para testar seus repositórios com o Snyk ou use nossa CLI para testar os projetos localmente.

Veja como os acontecimentos se desenrolaram:

Embora popular, o pacote npm event-stream não é mantido ativamente. Na verdade, fazia alguns anos que o pacote não era atualizado, com exceção de algumas alterações cosméticas no README e da biblioteca maliciosa em questão.

Ao que tudo indica, o atacante, que usa o nome right9ctrl no GitHub, ofereceu ajuda para manter a biblioteca. O mantenedor original, Dominic Tarr — provavelmente querendo ajudar os usuários — aceitou e concedeu a right9ctrl permissão para publicar. Vale lembrar que transferir a propriedade é uma prática relativamente comum no mundo do código aberto, usada para ajudar a manter projetos quando os autores originais não podem ou não querem mais fazer isso.

Infelizmente, o novo proprietário adicionou uma biblioteca maliciosa chamada flatmap-stream como dependência do pacote event-stream. Com isso, ela foi baixada e executada por todos os usuários do pacote event-stream que usavam a versão maliciosa 3.3.6. A biblioteca maliciosa chegou a quase 8 milhões de downloads.

Como adicionar bibliotecas é uma prática comum, é fácil entender por que essa nova biblioteca não foi revisada com muito cuidado. Além disso, ela parece cumprir a funcionalidade prometida (processar um stream flat map). Por fim, o código malicioso da biblioteca foi ofuscado para escapar da detecção (e decodificado posteriormente, revelando o código malicioso).

A dependência maliciosa passou despercebida por 2,5 meses, até que um usuário, Ayrton Sparling, percebeu uma dependência suspeita e a denunciou em 20 de novembro. A dependência, que continha código ofuscado, foi rapidamente identificada como maliciosa. A notícia ganhou maior repercussão hoje (26 de novembro). O Snyk adicionou imediatamente a vulnerabilidade ao nosso banco de dados e a comunicou ao grupo de trabalho de segurança da Node Foundation, que está analisando o caso. O npm também respondeu ao incidente e retirou da publicação a biblioteca maliciosa flatmap-stream, assim como a versão problemática 3.3.6 do event-stream.

Quanto às ações maliciosas, parece que o código se concentrava em roubar bitcoins de aplicativos, redirecionando para a carteira do atacante qualquer bitcoin minerado, em vez de enviá-lo ao destino previsto. Saiba mais na página do comunicado de segurança do Snyk.

O que você deve fazer?

Sua prioridade imediata deve ser verificar se você está usando a biblioteca maliciosa em questão. Nesse caso, futuras compilações do seu aplicativo falharão, mas os aplicativos já implantados provavelmente conterão — e talvez estejam executando — o código malicioso.

Se o Snyk monitora seu projeto, você receberá um alerta de rotina caso seu aplicativo contenha esse pacote malicioso.

Se, por outro lado, você ainda não monitora seus projetos com o Snyk, pode fazer um teste pontual: clique aqui para testar seus repositórios ou use nossa CLI para testar os projetos localmente.

Fui afetado. O que devo fazer agora?

Primeiro, remova o pacote malicioso do seu aplicativo. Para isso, volte para a versão 3.3.4 do event-stream.

Se seu aplicativo usou a biblioteca maliciosa e lida com bitcoins, verifique a atividade dos últimos 3 meses para identificar se algum bitcoin minerado ou transferido não chegou à sua carteira.

Se seu aplicativo não lida com bitcoins, mas é especialmente sensível, recomendamos verificar a atividade dos últimos 3 meses em busca de ações suspeitas, principalmente dados enviados pela rede a destinos não previstos. Acreditamos que é improvável que o código faça algo além de roubar bitcoins, mas a análise completa ainda está em andamento.

Comece a resolver desafios de capture the flag

Aprenda a resolver desafios de capture the flag assistindo sob demanda ao nosso workshop virtual introdutório.

Leia mais

Blog

Modelos de ponta encontraram as vulnerabilidades. Só o atacante encontrou as cadeias.

A análise estática encontrou as falhas, mas só os testes de ataque em aplicações ativas provaram como elas poderiam ser encadeadas para causar invasões. Uma comparação entre Evo COS, Claude Security e Claude Code Security.

feature insights context
Blog

Os ataques autônomos já chegaram. A defesa precisa acompanhar o ritmo.

Os atacantes autônomos estão reduzindo o tempo disponível para a defesa. Saiba como a descoberta, a correção, a validação e a prevenção contínuas ajudam as equipes de segurança a acompanhar esse ritmo.

Blog

Seu backlog de vulnerabilidades não é mais uma dívida técnica — é uma superfície de ataque

Um backlog crescente de vulnerabilidades é mais do que uma dívida técnica: ele é uma superfície de ataque. Entenda por que suposições de risco desatualizadas, atacantes automatizados e descobertas encadeadas exigem uma nova abordagem.