Todos os dias, a quantidade de pacotes Javascript está a aumentar. É o resultado da atividade de uma comunidade que, por um lado, exige novas soluções e, por outro, as gera como forma de auto-desenvolvimento ou realização. Este grande crescimento abre novas portas e possibilidades, mas também traz perigos, dos quais todos os programadores têm de estar conscientes.
No final de novembro de 2018, a comunidade GitHub comunicou a existência de uma vulnerabilidade grave no fluxo de eventos - que ajuda a trabalhar com nó eventos de forma mais eficiente. Foi bastante popular, uma vez que o número de descarregamentos nesse período específico atingiu mais de 2,2 milhões por semana (em comparação com React com 3,7 mlns). Event-stream, bem como suas dependências, eram dependentes de outra biblioteca - mapa plano-vapor, que, por acaso, foi atualizado com um malware de bolso criptográfico. Permitia roubar chaves privadas e outros detalhes das contas dos utilizadores em máquinas onde o pacote estava incluído.
Eventualmente, flatmap-stream foi removido do NPM, o que criou problemas temporais com muitas outras bibliotecas. Em maio do mesmo ano, a comunidade encontrou um backdoor dentro do o getcookie que também fazia parte de muitas outras dependências. Tais exemplos podem ser multiplicados, o que demonstra que é importante prestar atenção às dependências instaladas em um pacote projeto, não só do Javascript mas também num contexto geral.
Confiar em soluções oficiais e em grandes comunidades
Na medida do possível, é importante confiar em soluções oficiais no seu projeto. Estas não são apenas menos vulneráveis devido a uma melhor processo de desenvolvimento. Uma grande comunidade, que normalmente vem com uma marca melhor, ajuda a identificar problemas muito mais rapidamente e, o que é mais importante, a encontrar boas soluções.
Utilizar tendências NPM

Fig. 1 Tendência do Webpack NPM.

Fig. 2. Tendência de NPM de fluxo de eventos.
Por vezes, o conhecimento de um estado atual do pacote pode não representar o seu passado. Uma rápida olhada no gráfico de tendências do npm pode mostrar uma tendência real de um pacote. Ele mostrará não apenas grandes picos, onde alguma vulnerabilidade pode ser encontrada, mas a condição geral de um determinado pacote (NOTA: grandes picos no google trends perto de 24 - 30 de dezembro representam a temporada de férias, o que pode não representar necessariamente um problema). Como exemplo, dê uma olhada na figura 1 - uma tendência representativa do download do Webpack por semana. Verá um crescimento estável sem quaisquer pontos de rutura, o que pode sugerir que o Webpack é um pacote estável e seguro de utilizar. Por outro lado, na figura 2, você encontrará uma grande queda em novembro, o que é um sinal claro de que algo errado pode ter acontecido nesse período (o que já sabemos que é verdade).
Auditoria de dependência
A melhor e mais confiável maneira de verificar o estado de suas dependências é executar um auditoria. Este comando está agora disponível nativamente tanto para o yarn como para o npm, embora exija as suas versões mais recentes. Ele envia uma lista de dependências atuais para um endpoint apropriado e retorna informações contendo suas vulnerabilidades atuais e outros detalhes de uso, incluindo referência à documentação. (figura3).

Fig. 3. Exemplo de resultado do comando npm audit. Fonte: https://docs.npmjs.com
Gerir dependências em Javascript não é uma tarefa fácil. A quantidade de soluções cresce a cada dia, portanto, lembre-se de escolher suas dependências com sabedoria e cuidado. Continue a auditar o seu projeto atual e actualize os seus pacotes regularmente.
Para saber mais sobre as dependências javascript e como resolver alguns dos seus problemas, consulte este artigo.
Fonte:
- https://github.com/dominictarr/event-stream/issues/116
- https://blog.npmjs.org/post/180565383195/details-about-the-event-stream-incident
- https://blog.npmjs.org/post/173526807575/reported-malicious-module-getcookies
- https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities
- https://docs.npmjs.com/cli/audit
- https://yarnpkg.com/lang/en/docs/cli/audit/