Blog Formação DEV

Entendendo as vulnerabilidades do npm

Neste artigo entenderemos o que são as vulnerabilidades do npm, como podemos lidar com elas, e principalmente, as consequências de corrigir as essas vulnerabilidades.
Entendendo as vulnerabilidades do npm
Texto de: Letícia Garcez

Introdução

Se você trabalha com desenvolvimento de projetos com o gerenciador de pacotes npm, já deve ter se deparado com uma mensagem como a mensagem abaixo nos seus projetos:

Inicialmente, uma mensagem como essa, mostrando 24 vulnerabilidades pode assustar, mas será mesmo que precisamos nos preocupar com todas elas? É o que vamos descobrir neste artigo!

O que são as vulnerabilidades?

As vulnerabilidades mostradas após a instalação de pacotes são referentes a vulnerabilidades de segurança encontradas nas dependências dos projetos. Com o passar do tempo, é comum que este tipo de vulnerabilidade apareça, já que há quanto mais tempo um pacote está no ar, mais tempo existe para que problemas sejam encontrados neles.

Estas vulnerabilidades não implicam na funcionalidade do projeto, ou seja, a quantidade de vulnerabilidades indicadas não vai comprometer a compilação e a execução do seu código, porém as vulnerabilidades ainda estarão lá e eventualmente podem ser exploradas por alguém mal-intencionado. A abordagem a ser tomada aqui, então, é atualizar dependências, caso isso seja indispensável para o seu projeto.

Mas por que não atualizar as dependências sempre?

Sei que você deve estar se perguntando isso, afinal de contas sempre aprendemos que devemos utilizar as últimas versões das tecnologias, mas quando falamos em fazer uma atualização de versões de pacotes utilizados em uma aplicação já existente a coisa pode ser mais complicada do que parece.

Sempre que o npm encontra vulnerabilidades nas dependências, a abordagem padrão é sugerir a atualização, mas uma atualização feita “de qualquer jeito” pode quebrar completamente a sua aplicação ao invés de resolver um problema. Isso acontece porque novas versões de um pacote podem não ser compatíveis com a versão que você está utilizando, ou podem apresentar comportamentos diferentes do que você esperava, o que acaba impedindo a aplicação de ter o funcionamento esperado, ou muitas vezes, de funcionar mesmo. Isso é muito comum quando tentamos fazer uma atualização forçada em pacotes de um tutorial, por exemplo.

Além disso, as vulnerabilidades encontradas pelo gerenciador de pacotes raramente estão nos pacotes que você instalou, mas sim em dependências destes e fazer a atualização destas dependências sem atualizar o pacote que as utiliza pode também ser problemático.

Resumidamente, atualizar as dependências sem saber exatamente o que você está atualizando e as implicações dessas atualizações tem chances enormes de só te trazer problemas.

Como atualizar as dependências

Agora, você já está ciente do que são as vulnerabilidades, o que significa atualizá-las e mesmo assim você decidiu fazer a atualização das dependências. Como fazer?

Bom, o primeiro passo é rodar o comando npm audit para ter mais informações acerca das vulnerabilidades encontradas.

Algumas das vulnerabilidades mostrarão um aviso como o mostrado abaixo, dizendo que existe um fix available (correção disponível) através do comando npm audit fix.

Enquanto outros mostrarão que existe uma correção disponível através do comando npm audit fix --force.

Aqueles updates que podem ser feitos com o comando npm audit fix costumam ser seguros já que serão feitos respeitando as regras de update de versão especificadas no arquivo package.json. Já os updates que podem ser feitos com o comando npm audit fix —force trarão updates que estão fora do intervalo de versões especificado no package.json.

O procedimento mais seguro para a atualização dessas dependências seria atualizar as dependências que podem ser atualizadas com o comando npm audit fix primeiro e fazer alguns testes para verificar se não houve nenhuma mudança no comportamento da aplicação.

Depois disso, podemos verificar as dependências que podem ser atualizadas com o comando npm audit fix --force, mas antes de fazer qualquer atualização precisamos ver a versão do pacote que será instalada e verificar quais alterações serão necessárias na aplicação para garantir o funcionamento correto da mesma. Então é preciso avaliar se vale a pena ou não fazer essa atualização. Se você considerar que essa é uma atualização que deve ser feita, então é preciso atualizar a dependência e fazer as atualizações necessárias no código. Eu ainda recomendo a atualização de um pacote por vez, para que as alterações no código possam ser feitas com mais precisão.

Considerações finais

Neste artigo falamos sobre as vulnerabilidades no Node.js e como lidar com elas. Também vimos que essas vulnerabilidades não afetam a funcionalidade da aplicação, mas que podem representar riscos para a sua aplicação e que é necessário ter cautela para fazer a atualização de dependências que causam essas vulnerabilidades já que é possível que essas atualizações quebrem a aplicação.

Veja também

Sobre o autor
Cod3r

Cod3r

Com mais de 400 mil alunos, a Cod3r é uma das principais escolas de tecnologia do País. Um de seus produtos mais importantes é a Formação DEV, com objetivo de preparar os profissionais para o mercado.

Ótimo! Inscreveu-se com sucesso.

Bem-vindo de volta! Registou-se com sucesso.

Assinou com sucesso o Blog Formação DEV .

Sucesso! Verifique o seu e-mail para obter o link mágico para se inscrever.

As suas informações de pagamento foram atualizadas.

Seu pagamento não foi atualizado.