Skip to main content

Snyk Code CLI agora em beta pública

Escrito por

Frank Fischer

21 de setembro de 2021

0 minutos de leitura

A missão da Snyk é fazer com que as ferramentas de Teste de Segurança de Aplicações Estáticas (SAST) funcionem para desenvolvedores em todo o pipeline de DevOps. O Snyk Code analisa o código em tempo real e com alta precisão — diretamente nas ferramentas e nos fluxos de trabalho que os desenvolvedores já usam. Por exemplo, os plugins de IDE para IntelliJ, PyCharm, WebStorm e Visual Studio Code facilitam a programação, a análise e a correção antes mesmo de o código chegar ao controle de versão. E, com a interface web, os desenvolvedores podem analisar código legado ou fazer uma revisão de código.

Além de tudo isso, é com satisfação que anunciamos que o Snyk Code agora faz parte da interface de linha de comando da Snyk (Snyk CLI) em beta pública. Agora você pode integrar facilmente o Snyk Code ao processo de CI/CD, com a flexibilidade de iniciar uma análise e trabalhar com os resultados de forma automatizada.

A Snyk oferece uma CLI para interagir com qualquer componente da plataforma Snyk. O Snyk Code amplia a funcionalidade da CLI existente. Este artigo é um guia para começar. Para uma explicação mais aprofundada, recomendamos que você consulte a documentação do Snyk Code CLI.

Como lembrete, o suporte à CLI está em beta por enquanto. Experimente e envie seu feedback para nos ajudar a melhorar ainda mais.

Instalação e configuração do Snyk CLI

O Snyk CLI é um aplicativo Node.js e, por isso, pode ser executado em qualquer sistema compatível com Node.js. Além disso, é fácil de instalar e configurar.

Você pode instalá-lo com o npm executando: npm install -g snyk

Para conhecer outras formas de instalação e saber mais sobre a instalação pelo npm, consulte a documentação completa do Snyk Code CLI.

Depois da instalação, o próximo passo é autenticar. Para isso, execute: snyk auth.

Isso iniciará o processo de autenticação e armazenará um token de identificação para você usar com a CLI daqui em diante.

Dica profissional: A CLI verifica se há atualizações sempre que é executada. Se houver uma atualização, ela notificará você e mostrará o comando necessário. Para garantir que você está usando a versão mais recente, também é possível atualizar manualmente com npm update -g snyk.

Como testar um projeto ou uma pasta

Para iniciar uma análise do Snyk Code pela CLI, use: snyk code test [my-folder-path]

Se você não informar o parâmetro de caminho, a CLI analisará a pasta atual. E sim, ela percorrerá a árvore de diretórios e analisará o conteúdo. Há muitos outros comandos e parâmetros disponíveis, que você encontra na nossa documentação.

Se você já usa a CLI, observe que esta versão beta não oferece suporte ao comando monitor para o Snyk Code.

Observação: A CLI agrupa e envia à Snyk os arquivos de código-fonte compatíveis para análise. Portanto, embora os dados em trânsito e em repouso sejam criptografados, o código-fonte sairá do seu ambiente. Antes de executar a CLI em um repositório, verifique se você está de acordo com isso.

Opções de formato dos resultados

A CLI pode apresentar os resultados de três maneiras. A primeira, e uma boa forma de começar a usar a CLI, é simplesmente executá-la. Ela retornará um relatório em um formato legível.

Testing . ...

 ✗ [Medium] Cross-Site Request Forgery (CSRF) 
     Path: app.js, line 16 
     Info: Consider using csurf middleware for your Express app to protect against CSRF attacks.

 ✗ [Medium] Use of Hard-coded Credentials 
     Path: index.js, line 10 
     Info: Do not hardcode credentials in code. Found hardcoded credential used in mysql.createConnection.

 ✗ [Medium] Allocation of Resources Without Limits or Throttling 
     Path: app.js, line 46 
     Info: This endpoint handler performs a file system operation and does not use a rate-limiting mechanism. It may enable the attackers to perform Denial-of-service attacks. Consider using a rate-limiting middleware such as express-limit.

 ✗ [Medium] Allocation of Resources Without Limits or Throttling 
     Path: index.js, line 15 
     Info: This endpoint handler performs a file system operation and does not use a rate-limiting mechanism. It may enable the attackers to perform Denial-of-service attacks. Consider using a rate-limiting middleware such as express-limit.

 ✗ [Medium] Allocation of Resources Without Limits or Throttling 
     Path: index.js, line 21 
     Info: This endpoint handler performs a file system operation and does not use a rate-limiting mechanism. It may enable the attackers to perform Denial-of-service attacks. Consider using a rate-limiting middleware such as express-limit.

 ✗ [Medium] Allocation of Resources Without Limits or Throttling 
     Path: createDummyData.js, line 16 
     Info: This endpoint handler performs a file system operation and does not use a rate-limiting mechanism. It may enable the attackers to perform Denial-of-service attacks. Consider using a rate-limiting middleware such as express-limit.

 ✗ [Medium] Use of Hard-coded Credentials 
     Path: index.js, line 11 
     Info: Do not hardcode passwords in code. Found hardcoded password used in mysql.createConnection.

 ✗ [High] Path Traversal 
     Path: index.js, line 25 
     Info: Unsanitized input from an HTTP parameter flows into fs.readFile, where it is used as a path. This may result in a Path Traversal vulnerability and allow an attacker to read arbitrary files.

 ✗ [High] SQL Injection 
     Path: index.js, line 39 
     Info: Unsanitized input from an HTTP parameter flows into get, where it is used in an SQL query. This may result in an SQL Injection vulnerability.

✔ Test completed

Organization:      undefined
Test type:         Static code analysis
Project path:      .

9 Code issues found
2 [High]  7 [Medium] 

O nível de gravidade é indicado por cores, e o resultado traz uma explicação da vulnerabilidade e a correção recomendada.

Dica profissional: Como o Snyk Code é extremamente rápido, escolha qualquer projeto (ou repositório de código aberto clonado) e execute uma análise para verificar se está tudo funcionando.

Em seguida, a CLI oferece o formato de dados SARIF, que pode ser gerado com snyk code test --sarif:

{
  "$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json",
  "version": "2.1.0",
  "runs": [
    {
      "tool": {
        "driver": {
          "name": "SnykCode",
          "semanticVersion": "1.0.0",
          "version": "1.0.0",
          "rules": [
            {
              "id": "javascript/UseCsurfForExpress",
              "name": "UseCsurfForExpress",
              "shortDescription": {
                "text": "Cross-Site Request Forgery (CSRF)"
              },
              "defaultConfiguration": {
                "level": "warning"
              },
              "help": {
                "markdown": "\n## Details\nCross-site request forgery is an attack in which a malicious third party takes advantage of a user's authenticated credentials (such as a browser cookie) to impersonate that trusted user and perform unauthorized actions. The web application server cannot tell the difference between legitimate and malicious requests. This type of attack generally begins by tricking the user with a social engineering attack, such as a link or popup that the user inadvertently clicks, causing an unauthorized request to be sent to the web server. Consequences vary: At a standard user level, hackers can change passwords, transfer funds, make purchases, or connect with contacts; from an administrator account, hackers can then make changes to or even take down the app itself.\n\n### Best practices for prevention\n* Use development frameworks that defend against CSRF, using a nonce, hash, or some other security device to the URL and/or to forms.\n* Implement secure, unique, hidden tokens that are checked by the server each time to validate state-change requests.\n* Never assume that authentication tokens and session identifiers mean a request is legitimate.\n* Understand and implement other safe-cookie techniques, such as double submit cookies.\n* Terminate user sessions when not in use, including automatic timeout.\n* Ensure rigorous coding practices and defenses against other commonly exploited CWEs, since cross-site scripting (XSS), for example, can be used to bypass defenses against CSRF.\n\n## References\n\n* [Express Documentation - Implement CSRF Protection](https://expressjs.com/en/resources/middleware/csurf.html)\n* [Node Security Checklist - CSRF](https://blog.risingstack.com/node-js-security-checklist/#csrf)",
                "text": ""
              },
              "properties": {
                "tags": [
                  "javascript",
                  "maintenance",
                  "express",
                  "server",
                  "CSRF"
                ],
                "categories": [
                  "Security"
                ],
                "exampleCommitFixes": [
                  {
                    "commitURL": "https://github.com/eclipse/orion.client/commit/ad8f3bce33a1ea9d1e2144e6c42f075ad25829d6?diff=split#diff-16594450dc1f06f7d9cf4a47859cfa52L175",
                    "lines": [
                      {
                        "line": "}",
                        "lineNumber": 172,
                        "lineChange": "none"
                      },
...

Essa saída é detalhada e contém tudo — e até um pouco mais — do que você vê na interface do Snyk Code. Ela inclui até exemplos de correções e a pontuação de prioridade.

Dica profissional: Pegue uma xícara de café e explore o arquivo SARIF. Como ele está em JSON, não é tão difícil de entender. O arquivo contém muitas informações e prometo que você terá várias ideias de como usá-las nos seus processos ou para coletar estatísticas.

Por fim, a CLI fornece um código de saída que pode ser usado para controlar, por exemplo, um processo de CI/CD. Veja quais códigos de saída esperar:

  • 3: falha, nenhum projeto compatível encontrado

  • 2: falha, tente executar o comando novamente

  • 1: ação necessária, vulnerabilidades encontradas

  • 0: sucesso, nenhuma vulnerabilidade encontrada

Ao usar o parâmetro --severity-threshold=<low|medium|high> na chamada, você pode filtrar os resultados por nível de gravidade.

Experimente o Snyk Code CLI em beta

A CLI é uma ferramenta poderosa, e queremos convidar todas as pessoas a participar da beta pública. Basta ter a versão mais recente do Snyk CLI instalada, ativar o Snyk Code na sua organização e experimentar. Como esta é uma versão beta, adoraríamos que você nos ajudasse usando a ferramenta e enviando seu feedback.

E, se você ainda não conhece a Snyk, o primeiro passo é criar uma conta com o Snyk Code ativado! Cadastre-se gratuitamente hoje mesmo.

Comece a jogar Capture the Flag

Aprenda a resolver desafios de Capture the Flag assistindo à gravação sob demanda do nosso workshop virtual introdutório.

Leia mais

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.

illustration hero ai
Blog

O furacão da IA chegou

A IA está acelerando tanto a criação de software quanto os ataques cibernéticos. As lideranças devem proteger agentes e código desde o início, aplicar controles em tempo de execução e validar as defesas de forma independente.

feature insights context
Blog

A prevenção é essencialmente um problema resolvido?

A prevenção em código gerado por agentes está resolvida do ponto de vista arquitetural — mas escolher controles que protejam a segurança sem desacelerar o desenvolvimento continua sendo um desafio.