Dia 24 de Abril, talvez, 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”, 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á têm acesso a esse 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 esse fim.
Em 11 de Abril desse ano (2018) a npm inc adquiriu uma empresa chamada Lift. A 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 lá 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ário nenhuma configuração extra para começar a utilizá-lo, ele executa automaticamente a cada npm install. Mas, 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 a esta:
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 gente está sendo afetada.
Valeu galera!