Desenvolvimento

29 mai, 2018

Npm audit, checagem de segurança agora por padrão no Cli

Publicidade

Dia 24 de abril talvez foi para alguns apenas um dia qualquer; mas não para nós! Nesse dia, a npm inc anunciou a versão 6 do nosso estimado npm. Dentre as muitas novidades, tais como: melhoria de performance, otimização para ci com o comando “npm ci” e resolução automática de conflitos, o que mais me chamou a atenção foi o novo comando “npm audit”.

Quem já atualizou o npm para a versão 5.10.0 (mesmo sendo adicionado para a versão 6 eles adicionaram um update na versão 5 adicionando essa melhoria), já tem acesso a essa nova funcionalidade, que traz uma grande melhoria para o ambiente Node, possibilitando verificações de segurança direto no console do npm.

De onde vem o audit

A Node Security Platform, também conhecida como NSP, é uma plataforma responsável por descobrir vulnerabilidades em códigos, assim como a Snyk que é outra ferramenta muito conhecida para essa finalidade.

Em 11 de dbril deste ano, a npm inc adquiriu uma empresa chamada Lift, responsável por manter a Node Security Platform. A aquisição da NSP possibilitou ao npm o lançamento do audit, permitindo verificar e corrigir falhas de segurança diretamente pelo npm cli (menos um módulo para instalar).

Quem quiser testar direto o nsp cli fora do npm, pode ir no site da NSP, adicionar um repositório do GitHub, ou baixar o nsp cli via npm e rodar dentro de um projeto. O que ele faz é passar o código por uma bateria de testes baseada nas ameaças atuais e reportar essas ameaças, inclusive nas dependências. Às vezes utilizamos alguma dependência que possui falhas de segurança e não sabemos, por isso esse tipo de ferramenta é indispensável para nossos projetos.

Como o audit funciona

O audit é um novo comando que vem por padrão na versão do npm 5.10.0 ou superior, que abstrai o nsp dentro do npm. Não é necessária nenhuma configuração extra para começar a utilizá-lo; ele executa automaticamente a cada npm install. Porém, se você quiser rodar a ferramenta de forma isolada, basta executar o seguinte comando na raiz do seu projeto:

$ npm audit

Se o seu projeto possuir alguma falha de segurança, a saída será similar à essa:

A saída também mostrará as ameaças uma a uma, incluindo sua severidade e a possível correção:

(Coloquei só uma porque ia ficar gigante colocar todo o output, mas vocês pegaram a ideia, né?)

No exemplo acima, o npm audit informa que o pacote randomatic, dependência do fill-range, que é dependência do nodemon tem uma falha:

  • “Cryptographically Weak PRNG” (nem ideia do que é isso, mas pelo nome já dá medo).

A resposta também inclui a severidade da ameaça, que nesse caso é “Low”, mas poderia ser “Moderate”, “High” ou “Critical”.

O próprio audit já sugere um update nessa dependência, pois ele verificou internamente, e essa dependência tem um patch pra isso.

Após executar o fix, ele ainda informa que tenho 12 problemas, mas que aquele foi corrigido.

O que fazer quando não tem um patch para a ameaça?

Caso não exista ainda um fix, é um bom momento para abrir uma issue ou pull request para o pacote que você está usando. Provavelmente mais pessoas estão sendo afetadas.

Valeu, galera!