Skip to main content

Como analisar a segurança do JHipster com o Snyk

Escrito por
Blog illustrations fipster feature

8 de outubro de 2020

0 minutos de leitura

O JHipster é uma plataforma de código aberto muito conhecida, que permite gerar, desenvolver e implantar rapidamente aplicações web modernas e microsserviços. Com a CLI do JHipster, você pode escolher os frameworks e as plataformas que quer usar nas suas aplicações.

É fácil combinar diferentes frameworks. Por exemplo, você pode usar Java com Spring Boot no back-end, um banco de dados MongoDB e Angular ou React no front-end. Combine tudo isso com seu framework de testes favorito e uma aplicação completa com código boilerplate será gerada na hora.

Ilustração de um homem barbudo, usando óculos azuis e gravata-borboleta, ao lado da palavra “Hipster” em letras cursivas

Crie aplicações com segurança integrada

Criar a estrutura de uma aplicação e usar vários ecossistemas ao mesmo tempo traz muitas dependências de cada um deles. É essencial acompanhar a integridade dessas dependências. Mais importante ainda, você precisa receber um alerta se alguma das muitas dependências que usa tiver um problema de segurança.


JHipster security scanning with Snyk

Analise seu projeto JHipster pela linha de comando

Vamos usar o scanner de vulnerabilidades gratuito do Snyk para testar as dependências da aplicação. Como você já usou o npm para instalar o JHipster, basta executar este comando para instalar o Snyk na sua máquina.

npm i -g snyk

Primeiro, você precisa se autenticar. Para usar os recursos de análise, é necessário ter uma conta gratuita no Snyk. Se você digitar snyk auth, a CLI abrirá um navegador para você criar uma conta gratuita ou fazer login. Se já tiver uma conta no Snyk, você também pode usar sua chave de API snyk auth <api key> ou defini-la como variável de ambiente SNYK_TOKEN.

Sempre que quiser analisar seu projeto, basta executar o seguinte comando.

snyk test --all-projects

Recomendamos usar a opção all-projects, pois pode haver mais de um projeto na pasta. Ela faz com que o Snyk procure vários arquivos de manifesto no diretório atual e nos subdiretórios.

Se você acabou de criar uma pequena aplicação monolítica com o JHipster, talvez tenha na pasta um arquivo de manifesto Java para o back-end e um arquivo de manifesto Node.js para o front-end. Vamos analisar os dois.

Com os resultados da análise, você descobre se incluiu bibliotecas vulneráveis e se há uma maneira simples de corrigi-las. Mesmo que ainda não exista uma atualização direta disponível, talvez seja possível atualizar a biblioteca manualmente. Veja alguns exemplos de como fazer isso no Maven.

Saída do terminal listando vulnerabilidades em dependências Java, incluindo desserialização de dados não confiáveis e negação de serviço, com orientações para atualização.

Analise suas dependências no fluxo de CI/CD

Ao executar jhipster ci-cd, você tem várias opções de pipeline de CI. Seria ótimo analisar as dependências como parte desse pipeline também. Neste exemplo, vamos usar o Snyk para isso. Basta ter uma conta gratuita no Snyk para usar a chave de API.

A seguir, vamos mostrar como integrar a CLI aos diferentes pipelines que o JHipster pode criar para você. É a mesma CLI que usamos recentemente na nossa máquina local, e ela gera um resultado semelhante.

Além disso, provavelmente você vai querer monitorar as dependências depois de compilar o binário. Como novas vulnerabilidades podem ser descobertas ao longo do tempo, seria ótimo monitorar suas dependências continuamente. Veja como fazer isso com o snyk monitor no seu pipeline.

Jenkins

Ao selecionar um pipeline do Jenkins, um novo arquivo src/main/docker/jenkins.yml será gerado. Você pode executar esse contêiner do Docker com docker-compose -f src/main/docker/jenkins.yml up.

Ao usar o Jenkins, você tem duas opções. Pode instalar o plugin do Snyk pela interface do Jenkins e configurá-lo para usá-lo no pipeline.

Outra opção é analisar sua aplicação com o binário da CLI do Snyk e declarar isso no Jenkinsfile gerado pelo gerador jhipster ci-cd.

Adicione as etapas a seguir ao Jenkinsfile para baixar a versão mais recente da CLI do Snyk e usá-la na análise.

Observação: você precisa adicionar o token de API do Snyk da sua conta gratuita como variável de ambiente SNYK_TOKEN.

Mascote do Jenkins usando smoking e gravata-borboleta, segurando um pergaminho branco sobre um fundo circular vermelho
Jenkinsfile
// Not required if you install the Snyk CLI on your Agent
stage('Download Latest Snyk CLI') {
   sh """
       curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
       chmod +x snyk
   """
}

// Run snyk test to check for vulnerabilities and fail the build if any are found
// Consider using --severity-threshold=<low|medium|high> for more granularity (see snyk help for more info).
stage('Snyk Test using Snyk CLI') {
   sh './snyk test --all-projects'
}

// Run snyk monitor to create a snapshot and let it monitor by Snyk
// Consider using --severity-threshold=<low|medium|high> for more granularity (see snyk help for more info).
stage('Snyk Monitor using Snyk CLI') {
   sh './snyk monitor --all-projects'
}

O Jenkinsfile contém três tarefas:

  • baixar o binário mais recente da CLI do Snyk

  • Snyk Test — analisar sua aplicação e exibir as vulnerabilidades

  • Snyk Monitor — criar um snapshot do estado atual e enviá-lo ao Snyk para monitoramento contínuo

Para o Snyk Test e o Snyk Monitor, você pode adicionar --severity-threshold=<low|medium|high> para receber alertas apenas sobre vulnerabilidades a partir de uma determinada gravidade.

GitHub Actions

O GitHub Actions é provavelmente uma das formas mais populares de criar um pipeline quando você usa o GitHub como repositório. Ao escolher “Github Actions” no gerador jhipster ci-cd, o JHipster gera um arquivo .github/workflow/github-ci.yml para você. Os arquivos YAML nessa pasta de workflows são identificados e executados pelo GitHub como uma “action” a cada push.

Ícone do fluxo de trabalho do GitHub Actions com símbolos conectados de iniciar, marca de seleção e status pendente

Há várias maneiras de integrar o Snyk a esse fluxo.

GitHub Actions separadas

Você pode criar GitHub Actions separadas para usar os recursos do Snyk Test. Para isso, crie um arquivo YAML separado na pasta de workflows. A action será executada em paralelo ao pipeline criado pelo JHipster.

Você precisa inserir uma action específica para cada ecossistema. Confira exemplos de actions neste repositório.

Integre os testes do Snyk ao pipeline gerado

Você também pode integrar o Snyk ao pipeline gerado pelo JHipster como uma etapa adicional.

Primeiro, você precisa adicionar o token de API do Snyk às variáveis de ambiente. Você pode incluí-lo na seção env do seu script.

env:
   ...
   SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}

Como você não quer expor seu token ao mundo, adicione-o aos secrets em Settings †’ Secrets †’ New secret.

Página de configurações do repositório do GitHub exibindo a seção Secrets, com um segredo SNYK_TOKEN existente e opções para atualizá-lo ou removê-lo.

Ao adicionar as etapas abaixo, você vai:

  • baixar o binário mais recente da CLI

  • testar sua aplicação com o Snyk Test

  • monitorar o snapshot atual com o Snyk Monitor

    • - name: Install Snyk CLI
       run: |
         curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
         chmod +x snyk
      - name: Snyk Test
       run: ./snyk test --all-projects
      - name: Snyk Monitor
       run: ./snyk test --all-projects

Como alternativa, você pode instalar o binário usando o npm. No entanto, o npm precisa estar instalado no pipeline. Isso já acontece se você escolheu um front-end baseado em JavaScript. Nesse caso, você pode substituir a etapa Install Snyk CLI pelo seguinte:

- name: Install Snyk
 run: npm install -g snyk
- name: Snyk Test
 run: snyk test --all-projects
- name: Snyk Monitor
 run: snyk test --all-projects

Para o Snyk Test e o Snyk Monitor, você pode adicionar --severity-threshold=<low|medium|high> para receber alertas apenas sobre vulnerabilidades a partir de uma determinada gravidade.

Travis CI

O JHipster gera um arquivo .travis se você escolher essa opção no gerador jipster ci-cd. É fácil integrar o Snyk: basta adicionar o seguinte à seção script:

Ilustração de um trabalhador da construção civil usando capacete amarelo com um T vermelho, óculos de segurança e bigode vermelho
script:
...
# Dependency scanning with Snyk
# add Snyk API token as environment variable SNYK_TOKEN
- curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
- chmod +x snyk
- ./snyk test --all-projects
- ./snyk monitor --all-projects

…

Você precisa adicionar sua chave de API do Snyk como variável de ambiente SNYK_TOKEN. Para o Snyk Test e o Snyk Monitor, você pode adicionar --severity-threshold=<low|medium|high> para receber alertas apenas sobre vulnerabilidades a partir de uma determinada gravidade.

Circle CI

No Circle CI, você tem duas opções. Pode configurar sua instância do Circle CI para usar o Snyk Orb, conforme descrito na documentação de integração. Ou pode analisar usando a versão mais recente da CLI, adicionando o seguinte ao arquivo config.yml criado para você pelo JHipster ci-cd.

Logo da CircleCI em preto e branco
       steps:
...
# Dependency scanning with Snyk.
# add Snyk API token as environment variable SNYK_TOKEN
 - run:
     name: install-snyk
     command: |
       curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
       chmod +x snyk
 - run: # run snyk test
     name: snyk test
     command: './snyk test --all-projects'
 - run: # run snyk monitor
     name: snyk monitor
     command: './snyk monitor --all-projects'
...

Você precisa adicionar sua chave de API do Snyk como variável de ambiente SNYK_TOKEN. Para o Snyk Test e o Snyk Monitor, você pode adicionar --severity-threshold=<low|medium|high> para receber alertas apenas sobre vulnerabilidades a partir de uma determinada gravidade.

GitLab CI

No GitLab CI, também podemos incorporar a CLI do Snyk para analisar seus projetos no pipeline de CI. No arquivo .gitlab-ci.yml gerado pelo JHipster ci-cd, você pode adicionar o exemplo a seguir ao final do arquivo para analisar e monitorar seus projetos.

Logo do GitLab CI com o ícone de raposa laranja e o texto “GitLab CI” em cinza
# Dependency scanning with Snyk
# add Snyk API token as environment variable SNYK_TOKEN
dependency_scanning:
 stage: release
 script:
   # Download latest CLI version
   - curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
   - chmod +x snyk
   # SNYK_TOKEN environment variable should be present and containing the api key
   # run snyk test to break build if needed and snyk monitor to monitor this snapshot
   - ./snyk test --all-projects
   - ./snyk monitor --all-projects

Mais uma vez, você precisa adicionar sua chave de API do Snyk como variável de ambiente SNYK_TOKEN. Para o Snyk Test e o Snyk Monitor, você pode adicionar --severity-threshold=<low|medium|high> para receber alertas apenas sobre vulnerabilidades a partir de uma determinada gravidade.

Conclusão

É claro que é importante verificar se suas bibliotecas de terceiros têm problemas de segurança. Há muitos exemplos de situações que se tornaram sérias porque uma biblioteca vulnerável não foi substituída por uma versão corrigida. A análise com o Snyk ajuda você a evitar esse problema, tanto na sua máquina durante o desenvolvimento quanto no pipeline de CI.

Como você pode ver, é muito fácil analisar as dependências do seu projeto JHipster. Para conferir os exemplos de código dos pipelines de CI descritos neste post, consulte este projeto de exemplo do JHipster. Desenvolva com agilidade usando o JHipster e mantenha a segurança com o Snyk.

Comece a resolver desafios de capture the flag

Aprenda a resolver desafios de capture the flag assistindo sob demanda ao nosso workshop virtual introdutório.

Leia mais

Blog

Modelos de ponta encontraram as vulnerabilidades. Só o atacante encontrou as cadeias.

A análise estática encontrou as falhas, mas só os testes de ataque em aplicações ativas provaram como elas poderiam ser encadeadas para causar invasões. Uma comparação entre Evo COS, Claude Security e Claude Code Security.

feature insights context
Blog

Os ataques autônomos já chegaram. A defesa precisa acompanhar o ritmo.

Os atacantes autônomos estão reduzindo o tempo disponível para a defesa. Saiba como a descoberta, a correção, a validação e a prevenção contínuas ajudam as equipes de segurança a acompanhar esse ritmo.

Blog

Por que agentes de programação com IA continuam criando falhas de controle de acesso

Agentes de programação com IA podem gerar uma lógica de autorização que compila e passa pela revisão, mas permite que um tenant acesse os dados de outro. Saiba por que é difícil detectar falhas de controle de acesso e como evitá-las.