Skip to main content

Plugin do Snyk para Maven: análise integrada de vulnerabilidades de segurança para desenvolvedores

Escrito por
Integrate security into the CI/CD with the Snyk Maven plugin

20 de abril de 2021

0 minutos de leitura

O Maven é o sistema de build mais usado no ecossistema Java há muitos anos. Criar sua aplicação com o Maven é fácil, pois ele cuida de muitas tarefas para você. Em diferentes fases do ciclo de vida do Maven, ele realiza tarefas como:

  • Baixar dependências

  • Compilar seu código Java

  • Executar testes unitários

  • Criar um artefato pronto para distribuição

  • Testes de integração

  • E muito mais 

Com o Maven, o ciclo de desenvolvimento acontece da mesma forma em todas as máquinas de todos os desenvolvedores da equipe, além de também ocorrer assim no pipeline de CI. Como o Maven já baixa as dependências necessárias e executa os testes, não seria ótimo integrar a análise de vulnerabilidades a esse ciclo de forma simples? É exatamente isso que o plugin do Snyk para Maven faz.

É essencial analisar as dependências do seu projeto em busca de vulnerabilidades de segurança conhecidas. O momento ideal para começar a verificar suas dependências é assim que você as importa! Por isso, criamos o plugin do Snyk para Maven: agora você pode analisar sua aplicação em busca de vulnerabilidades de segurança em bibliotecas de terceiros durante o ciclo de build, levando conhecimento especializado em segurança para as mãos dos desenvolvedores.

Se quiser ver o plugin em ação antes de continuar lendo, tenho um vídeo para você...

The Simplest way to Secure your Java Maven Project

O plugin do Snyk para Maven

O plugin do Snyk para Maven já está disponível publicamente no Maven Central. Basta configurá-lo no arquivo pom.xml. Abaixo, você encontra a configuração padrão do plugin.

<build>
  <plugins>
    <plugin>
      <groupId>io.snyk</groupId>
      <artifactId>snyk-maven-plugin</artifactId>
      <version>2.0.0</version>
      <inherited>false</inherited>
      <executions>
        <execution>
          <id>snyk-test</id>
          <goals>
            <goal>test</goal>
          </goals>
        </execution>
        <execution>
          <id>snyk-monitor</id>
          <goals>
            <goal>monitor</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <apiToken>${env.SNYK_TOKEN}</apiToken>
        <args>
          <arg>--all-projects</arg>
        </args>
      </configuration>
    </plugin>
  </plugins>
</build>

Como você pode ver, há dois objetivos diferentes: test e monitor. Depois de adicionar o plugin ao seu projeto, basta chamar mvn snyk:test ou mvn snyk:monitor. Por padrão, o objetivo snyk test é associado à fase test do ciclo de vida do Maven. Isso significa que o objetivo Snyk test é executado automaticamente após a conclusão da fase test do Maven. O objetivo Snyk monitor é associado à fase install e funciona da mesma forma.

Assim como acontece com qualquer outro plugin do Maven, você pode alterar esse comportamento. Na seção de execução, basta adicionar uma tag <phase>. Ela pode ser definida como uma fase existente, como test, package ou verify, ou como none. No exemplo abaixo, associei snyk-test à fase verify e snyk-monitor a none. Agora, mvn snyk:monitor continua disponível para execução manual, mas não será executado automaticamente como parte de uma fase do ciclo de build.

…
<executions>
   <execution>
       <phase>verify</phase>
       <id>snyk-test</id>
       <goals>
           <goal>test</goal>
       </goals>
   </execution>
   <execution>
       <phase>none</phase>
       <id>snyk-monitor</id>
       <goals>
           <goal>monitor</goal>
       </goals>
   </execution>
</executions>
... 

Se quiser ignorar a execução do objetivo Snyk no seu ciclo de vida, basta adicionar -Dsnyk.skip ao comando. Exemplo:

mvn package -Dsnyk.skip

Como funciona o novo plugin do Snyk para Maven?

Já existia um plugin do Snyk para Maven, mas ele usava uma lógica própria para determinar a árvore de dependências. Por isso, os resultados da CLI e do antigo plugin do Maven podiam ser um pouco diferentes.

Assim como o plugin do Gradle, o novo plugin do Snyk para Maven agora usa a Snyk CLI internamente. Ele baixa e atualiza automaticamente o binário apropriado da CLI, então não é necessário instalá-la antes. Você só precisa de uma conta gratuita do Snyk para obter o token de API.

Configurando o plugin do Snyk para Maven

Para configurar o plugin, você precisa definir o token de API para ativar a análise de segurança das dependências com o Snyk. Você encontra o token na seção Configurações gerais da sua conta do Snyk. Outra opção é criar um token específico para uma conta de serviço.

Página de configurações da conta Snyk, mostrando a seção de token da API e a opção Configurações gerais destacada no menu do usuário

No primeiro exemplo desta publicação, não incluí o token no arquivo pom. Em vez disso, criei uma variável de ambiente global chamada SNYK_TOKEN na minha máquina e fiz referência a ela.

Assim, não deixo meu token secreto no arquivo pom, o que é especialmente útil quando você publica seu código em um repositório de código aberto.

apiToken>${env.SNYK_TOKEN}</apiToken>

Na seção <args> da configuração, você pode informar qualquer flag que normalmente usaria na CLI. No meu exemplo, informo a flag --all-projects. Assim, todos os meus projetos, independentemente do ecossistema, são analisados de uma só vez. Isso é especialmente útil se você usa vários arquivos pom no projeto.

Além disso, se quiser, você também pode configurar alguns detalhes específicos da CLI. Por padrão, a CLI é atualizada automaticamente na primeira execução do dia. Mas, se quiser usar um binário ou uma versão específica da CLI, ou alterar a estratégia de atualização, você pode adicionar um objeto <cli> dentro de <configuration>. Todas as configurações possíveis estão documentadas no repositório do GitHub. No exemplo abaixo, defino <updatePolicy> como always. Com isso, o plugin verifica se há atualizações da CLI em todas as execuções, e não apenas uma vez por dia.

<configuration>
   ...
   <cli>
      <updatePolicy>always</updatePolicy>
   </cli>
</configuration>

Adicione segurança ao ciclo de vida do Maven

Integrar a análise do Snyk Open Source ao ciclo de build do Maven é simples e natural. Com o novo plugin do Snyk para Maven, essa integração é perfeita e pode ser executada da mesma forma em todas as máquinas, inclusive no pipeline de CI. Você não precisa mais chamar a CLI manualmente, e a configuração da análise do Snyk Open Source fica armazenada como parte do projeto. Menos uma preocupação para os desenvolvedores.

Para saber mais sobre o plugin, acesse nosso repositório no GitHub. E não se esqueça de criar uma conta gratuita do Snyk antes de usar essa ótima integração.

Confira também estes recursos, que recomendo muito:

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.