Como proteger aplicações JavaScript diretamente pela CLI
Gideon Idoko
24 de outubro de 2023
0 minutos de leituraSegundo o relatório State of Open Source Security 2022 da Snyk, um projeto médio de JavaScript tem 49 vulnerabilidades, incluindo problemas comuns como dependências inseguras, cross-site scripting (XSS), validação de entrada fraca e cross-site request forgery (CSRF). E, considerando o uso generalizado do JavaScript, medidas de segurança robustas são cada vez mais importantes para proteger suas aplicações contra ataques cibernéticos. Embora implementar essas medidas durante o desenvolvimento seja essencial, também é importante começar cedo — e fazer isso pela CLI facilita o processo.
Por isso, este artigo mostra como proteger suas aplicações JavaScript usando a Snyk CLI.
O que é a Snyk CLI?
A Snyk CLI é uma ferramenta poderosa que analisa e monitora aplicações, contêineres e infraestrutura como código (IaC) em busca de vulnerabilidades de segurança. Como se integra perfeitamente ao seu fluxo de desenvolvimento, você pode executá-la localmente ou no pipeline de integração e entrega contínuas (CI/CD). Assim, é possível lidar proativamente com questões de segurança desde o início do processo de desenvolvimento.
Ao analisar seu projeto JavaScript com a Snyk CLI, ela verifica as dependências do projeto em um vasto banco de dados de vulnerabilidades de segurança e informa os problemas encontrados. Além disso, apresenta recomendações para corrigi-los. Isso pode envolver atualizar um pacote vulnerável para uma versão segura ou usar alternativas sem vulnerabilidades.
Benefícios de usar a Snyk CLI durante o desenvolvimento
Com a Snyk CLI, você pode melhorar a segurança, a confiabilidade e a velocidade de lançamento dos seus projetos. Veja alguns dos principais benefícios:
Análise de segurança do código e das dependências: A Snyk CLI analisa sua base de código e suas dependências em busca de vulnerabilidades conhecidas e fornece detalhes sobre os problemas de segurança, incluindo níveis de gravidade e correções recomendadas.
Detecção antecipada de vulnerabilidades: Com a Snyk CLI, você detecta vulnerabilidades no início do ciclo de desenvolvimento e pode corrigi-las mais cedo, com menos custo e esforço.
Orientações para corrigir vulnerabilidades: Além de identificar vulnerabilidades, a Snyk CLI sugere atualizações para dependências vulneráveis ou bibliotecas alternativas, facilitando a correção dos problemas encontrados.
Suporte a requisitos de conformidade e boas práticas: Além de ajudar você a seguir as boas práticas, os relatórios gerados pela Snyk CLI permitem realizar auditorias de segurança e avaliar a conformidade.
Suporte a linguagens e ecossistemas: Com suporte a várias linguagens, a Snyk CLI pode testar uma ampla variedade de projetos, como Java, Python, .NET, Ruby, PHP e muitos outros, sendo uma ótima opção para equipes poliglotas.
Experiência voltada para desenvolvedores: Os comandos intuitivos de terminal da Snyk CLI facilitam a integração das verificações de segurança ao fluxo de desenvolvimento. Além da CLI, você também pode usar a Snyk no seu IDE por meio de plugins e extensões.
Como instalar a Snyk CLI
Há várias maneiras de instalar a Snyk CLI na sua máquina, desde usar os executáveis independentes disponíveis até gerenciadores de pacotes, como o Homebrew no macOS e o Scoop no Windows.
No entanto, a maneira mais fácil de instalar a Snyk CLI para sua aplicação JavaScript é fazer uma instalação global com npm ou Yarn, já que você provavelmente já tem o Node.js instalado. Certifique-se de usar a versão 12 ou posterior do Node.js e execute o comando a seguir para instalar a Snyk CLI como um pacote npm global:
Como alternativa, você pode fazer a instalação global com Yarn executando yarn global add snyk. Para mais informações, consulte o guia de instalação da Snyk CLI.
Como corrigir vulnerabilidades em JavaScript com a Snyk CLI
Agora que você instalou a Snyk CLI, explore os recursos disponíveis testando um projeto JavaScript de exemplo.
Configure localmente um projeto JavaScript de exemplo
Para ajudar você a configurar rapidamente um projeto para testar com a Snyk CLI, disponibilizamos este repositório do GitHub com um projeto JavaScript de exemplo e todos os arquivos de manifesto necessários. O projeto é uma API simples de citações que usa Lodash e Express como dependências. A API de citações tem um endpoint GET /, que retorna uma lista de citações, e um endpoint GET /random, que retorna uma citação aleatória.
O projeto usa Docker para conteinerização e Kubernetes como parte da infraestrutura. A maneira mais fácil de configurar Docker e Kubernetes na sua máquina local é instalar o Docker Desktop e ativar o Kubernetes nas configurações:

Para configurar o projeto JavaScript de exemplo, clone o repositório na sua máquina local:
Em seguida, acesse o diretório do projeto e instale as dependências:
O código JavaScript do projeto está no arquivo server.js. Execute npm start para iniciar a aplicação na porta 3000:

Agora, crie e inicie um contêiner para a aplicação executando o seguinte comando do Docker:
Isso cria uma imagem Docker vulnnode a partir do Dockerfile, executa a imagem e expõe o contêiner na porta 4000.
Por fim, crie um recurso do Kubernetes para a aplicação:
Este código usa o arquivo de manifesto kube.yml e disponibiliza a aplicação na porta 5000. Agora está tudo configurado e você pode começar a analisar o projeto.
Autentique sua máquina
A Snyk CLI precisa estar vinculada a uma conta Snyk. Por isso, você deve autenticar sua máquina antes de usá-la. Se ainda não tiver uma conta, crie uma conta gratuita na Snyk para acompanhar as etapas. Depois de entrar na sua conta, abra o terminal e autentique a Snyk CLI com este comando:
Uma página da web será aberta no navegador. Clique no botão Authenticate para autenticar sua Snyk CLI.
Se esse método de autenticação não funcionar, você pode usar seu token de API diretamente. Acesse Configurações da conta > Geral > Token de API e copie o token. Em seguida, autentique-se com ele no terminal:
Agora, você deve receber uma mensagem informando que sua conta foi autenticada e que a CLI está pronta para uso. Confira os comandos da Snyk CLI que ajudarão você a testar seu projeto JavaScript.
snyk test
O comando snyk test verifica se há problemas de segurança e licenciamento em softwares de código aberto. Ele analisa as dependências do projeto para identificar vulnerabilidades conhecidas e informa detalhes sobre elas, como tipos, descrições, caminhos dos arquivos vulneráveis e etapas para corrigi-las.
Ao executar snyk test , a Snyk CLI tenta detectar automaticamente os arquivos de manifesto que contêm dependências, como o arquivo package.json do projeto configurado, e testá-las. Observação: a Snyk procura dependências locais para verificar se há vulnerabilidades. Por isso, baixamos as dependências do projeto durante a configuração.
Para analisar o projeto, execute o comando de teste no mesmo diretório:
Você verá uma saída semelhante a esta:

A Snyk testou as dependências do projeto, encontrou alguns problemas e os relatou com uma descrição, incluindo o ID e a gravidade do problema, além de um link para saber mais.
Todos os problemas são agrupados na seção Problemas a corrigir com atualização. Isso significa que a atualização das bibliotecas relacionadas elimina uma ou mais vulnerabilidades. Mais adiante, você verá em detalhes como corrigir esses problemas.
Os problemas encontrados no teste também podem aparecer agrupados nas seguintes seções:
Problemas corrigíveis com patch significa que não há uma atualização disponível para corrigir o problema, mas você pode usar um patch como alternativa.
Problemas sem atualização ou patch direto significa que não há uma atualização nem um patch disponível para corrigir o problema. Você pode manter a dependência ou substituí-la por uma alternativa.
Observação: se preferir receber a saída em um arquivo JSON, basta adicionar a flag --json-file-output=./path/to/file.json ao comando da Snyk CLI.
Em um pipeline de CI/CD, você pode executar snyk test para interromper o pipeline se o projeto tiver vulnerabilidades, ou seja, quando o código de saída do comando de teste for diferente de 0.
snyk monitor
Ao executar o comando snyk monitor, ele captura um snapshot do projeto e envia os dados à Snyk. É importante entender que snyk monitor não substitui snyk test, pois seu principal objetivo é criar um snapshot e acompanhá-lo ao longo do tempo. Essa é uma ferramenta valiosa para usar antes de implantar em produção. Além disso, a Snyk mantém você informado: envia notificações pelo canal de contato de sua preferência sempre que identifica uma nova vulnerabilidade ou correção relevante para seu projeto.
Para garantir que o snapshot seja salvo no local correto, recomendamos especificar informações adicionais, como a organização (--org) e o nome do projeto (--project-name).
Para ver o snyk monitor em ação, execute o seguinte comando:
Substitua <YOUR_ORG> pela organização onde você quer salvar o snapshot do projeto. Depois de executar o comando, você receberá um link para o snapshot na resposta, como neste exemplo:

Acesse o link para ver o snapshot no seu painel da Snyk:

snyk ignore
Há situações em que não existe um patch ou uma atualização para corrigir uma vulnerabilidade, ou em que você acredita que ela não pode ser explorada na sua aplicação. Nesses casos, você pode instruir a Snyk a ignorar a vulnerabilidade por um período determinado. Com o comando snyk ignore, você gerencia problemas conhecidos ou falsos positivos que talvez não possam ser corrigidos de imediato ou não sejam relevantes no contexto do seu projeto.
Ao usar snyk ignore, você precisa identificar o problema pelo ID da vulnerabilidade, que pode ser obtido na saída do comando snyk test. Por exemplo, a vulnerabilidade de negação de serviço por expressão regular (ReDoS) associada à versão atual do pacote Lodash do projeto tem o ID SNYK-JS-LODASH-1018905. Para ignorá-la, execute:
A flag --expiry especifica por quanto tempo o problema deve ser ignorado, e a flag --reason informa o motivo. Esse comando cria um arquivo de políticas .snyk no diretório raiz com informações sobre a vulnerabilidade. Assim, ela não será sinalizada em futuras execuções de snyk test.
snyk container
A Snyk CLI tem dois comandos para contêineres (test e monitor) que testam e monitoram imagens de contêineres locais ou remotas, como imagens Docker, em busca de vulnerabilidades conhecidas. A sintaxe dos dois comandos é:
Como você criou a imagem durante a configuração com o nome vulnnode, teste-a usando:
Você verá uma saída semelhante a esta:

Mais adiante neste artigo, você verá como corrigir esses problemas. Assim como no comando snyk monitor, você pode monitorar e capturar snapshots da imagem do contêiner vulnnode com o seguinte comando:
snyk iac
Com IaC, recursos de nuvem, redes e configurações não são definidos manualmente: eles são gerenciados e provisionados por meio de código. O comando snyk iac identifica vulnerabilidades de segurança nos arquivos de configuração. Assim, você pode corrigir configurações incorretas antes que representem um risco à segurança.
Analise o arquivo IaC do Kubernetes com o seguinte comando:
Você verá uma saída semelhante a esta:

Agora que você analisou o projeto JavaScript, veja como corrigir alguns dos problemas identificados.
Como corrigir problemas de segurança no seu projeto JavaScript
Ao executar o comando snyk test, a Snyk CLI indica na saída que os problemas identificados podem ser corrigidos atualizando express da versão 4.17.1 para a 4.18.2 e lodash da versão 4.17.4 para a 4.17.21. Atualize as versões no seu package.json e reinstale usando npm install.
Depois de reinstalar, execute snyk test novamente. Você verá uma saída como esta:

E é só isso que você precisa fazer para corrigir as vulnerabilidades do projeto. Observação: se você conectar seu repositório Git à Snyk pelo app.snyk.io, a Snyk criará automaticamente novas pull requests com atualizações de dependências que corrigem problemas de segurança no arquivo de manifesto package.json.
No comando de teste snyk container, os problemas detectados são causados pelo aplicativo na imagem e pela imagem base usada:

A imagem base atual tem um problema crítico, quatro de alta gravidade e três de média gravidade. É recomendável corrigir rapidamente os problemas críticos e de alta gravidade, pois eles podem afetar seriamente seu aplicativo se forem explorados.
Para corrigir os problemas do contêiner, você pode atualizar a imagem base no Dockerfile para uma das opções sugeridas, como node:20.5-bookworm-slim:
Observação: se você conectar seu repositório Git à Snyk pelo app.snyk.io, a Snyk criará automaticamente novas pull requests com atualizações no Dockerfile que corrigem os problemas de segurança, para você mesclar.
Recrie a imagem do contêiner usando o comando a seguir:
Execute o teste do contêiner novamente. Desta vez, você verá uma saída como esta:

Essa correção elimina os problemas críticos e de alta gravidade. Os 28 problemas restantes são todos de baixa prioridade, então você pode continuar trabalhando normalmente.
Por fim, no comando snyk iac test, os problemas detectados são causados por algumas configurações que não foram incluídas no arquivo de manifesto kube.yml:

Os problemas aqui são de média prioridade. Tente corrigir dois deles usando a solução recomendada pela Snyk CLI. Abra o arquivo kube.yml e atualize o contêiner:
Execute snyk iac test kube.yml novamente. Você deverá ver o seguinte:

Com isso, restaram dois problemas de média gravidade, que podem ser ignorados.
Para concluir
Neste artigo, você aprendeu como proteger seus aplicativos JavaScript: faça uma análise para identificar vulnerabilidades usando a Snyk CLI.
Gosta do terminal? Agora você pode usar a Snyk CLI para proteger facilmente seu código, seus aplicativos, contêineres e arquivos de IaC. A Snyk CLI é uma grande aliada dos desenvolvedores: ajuda a proteger os projetos contra possíveis ameaças e se integra perfeitamente ao fluxo de trabalho de desenvolvimento que você já usa. Cadastre-se grátis hoje mesmo.
Comece a proteger seus aplicativos JavaScript
Encontre e corrija vulnerabilidades em JavaScript gratuitamente com o Snyk.
Não é necessário informar um cartão de crédito.
Ou cadastre-se com o Azure AD Docker ID Bitbucket
Ao usar o Snyk, você concorda em cumprir nossas políticas, incluindo os Termos de Serviço e a Política de Privacidade.



