Segurança

17 dez, 2018

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

visualizações
Publicidade

Descobriu-se que um pacote npm amplamente utilizado, event-stream, contém um pacote malicioso denominado flatmap-stream. Isso foi divulgado por meio de uma questão do GitHub levantada contra o repositório de origem.

O pacote event-stream facilita a criação e o trabalho com fluxos e é muito popular, obtendo cerca de 2 milhões de downloads por semana. O pacote filho mal-intencionado foi baixado quase 8 milhões de vezes desde sua inclusão em setembro de 2018.

Se o seu projeto está sendo monitorado por uma ferramenta de detecção por vulnerabilidades em dependências, como o Snyk você será notificado via alertas de rotina.

Veja como os eventos se desdobraram

O pacote npm event-stream, embora popular, não é mantido ativamente. Na verdade, o pacote não foi atualizado por alguns anos, exceto por algumas alterações estéticas do README – e pela biblioteca maliciosa em questão.

O invasor presumido, cujo controle do GitHub está correto, ofereceu-se para ajudar a manter a biblioteca. O mantenedor original, Dominic Tarr – provavelmente com o objetivo de ajudar seus usuários – concordou, concedendo direitos de publicação right9ctrl. É importante notar que a transferência de propriedade é uma prática bastante comum no mundo do código aberto, usada para ajudar a manter projetos quando os autores originais não são mais capazes ou estão dispostos a fazê-lo.

Infelizmente, este novo proprietário começou a adicionar uma biblioteca maliciosa chamada flatmap-stream ao pacote event-stream como uma dependência, levando ao seu download e invocação por cada usuário do pacote event-stream (usando a versão 3.3.6). O download da biblioteca maliciosa atingiu quase 8 milhões de downloads até o momento.

Como a adição de bibliotecas é uma prática comum, é fácil ver como a nova biblioteca não foi revisada com muito cuidado. Além disso, a biblioteca parece ter realizado a funcionalidade prometida (manipulando um flat map stream). Por último, o código malicioso dentro da biblioteca foi ofuscado para evitar a detecção (foi posteriormente decodificado para revelar o código malicioso).

A dependência maliciosa permaneceu sem ser detectada por dois meses e meio, até que um usuário, Ayrton Sparling, notou e relatou uma dependência estranha no dia 20 de novembro. A dependência – que continha código ofuscado – foi rapidamente entendida como maliciosa, cuja notícia se tornou mais conhecida (26 de novembro).

O npm também respondeu ao incidente e publicou o flatmap-stream como uma dependência maliciosa do event-stream.

Quanto às ações maliciosas em si, parece que o código focou em roubar bitcoins da aplicação, redirecionando quaisquer bitcoins extraídos para a carteira do atacante (em vez do alvo pretendido). O código malicioso pôde verificar se o pacote copay-dash foi instalado e, em seguida, tentar roubar os bitcoins armazenados nele.

O que você deveria fazer?

Sua prioridade imediata deve ser verificar se você está usando a biblioteca maliciosa em questão. Em caso afirmativo, futuras compilações do seu aplicativo falharão, mas quaisquer aplicativos implantados anteriormente provavelmente conterão (e estarão potencialmente executando) o código mal-intencionado.

A sugestão é sempre monitorar as dependências open-source de um projeto, seja por código malicioso ou por bugs de segurança. De acordo com um estudo da Universidade Carnegie Mellon, para cada mil linhas de código em software comercial, existem entre 20 a 30 bugs. E como os bugs são criados, as vulnerabilidades inevitavelmente surgem.

Eu sou afetado, o que devo fazer a seguir?

Você deve primeiro eliminar o pacote malicioso do seu aplicativo, o que pode ser feito revertendo para a versão 3.3.4 do event-stream.

Se o seu aplicativo usou a biblioteca maliciosa e lida com o bitcoin, inspecione sua atividade nos últimos 3 meses para ver se algum bitcoin extraído ou transferido não entrou na sua carteira. Se o seu aplicativo não lidar com o bitcoin, mas for especialmente sensível, recomendamos que você inspecione sua atividade nos últimos 3 meses em busca de qualquer atividade suspeita, principalmente dados enviados na rede para destinos não intencionais. Acredita-se ser improvável que o código faça algo além do roubo de bitcoin, mas a análise completa ainda está em andamento.

***

fontes: https://snyk.io/