Skip to main content

Automatize a correção de vulnerabilidades em dependências Python com a Snyk

Escrito por

26 de fevereiro de 2020

0 minutos de leitura

Temos o prazer de anunciar melhorias no suporte a Python no Snyk Open Source, que permite aos desenvolvedores corrigir vulnerabilidades em dependências com a ajuda de pull requests de correção automatizados!

O Python Packaging Index (PyPI) teve mais de 14 bilhões de downloads em 2018, um número impressionante, seja qual for o parâmetro (devido a um erro no serviço de estatísticas do PyPI em meados do ano, o total real provavelmente é muito maior). Esse número reflete não só a ampla adoção do Python como linguagem de programação (hoje, a nº 2 segundo o GitHub), mas também o desafio de usar software de código aberto: muitos desses pacotes incluem dependências vulneráveis, diretas e indiretas, nos projetos. A Snyk relatou alguns exemplos no ano passado, incluindo um artigo sobre pacotes maliciosos.

Com essa melhoria, o Snyk Open Source ajuda desenvolvedores Python a criar aplicativos com mais segurança. Além de encontrar essas dependências vulneráveis, a solução também oferece etapas automatizadas para corrigi-las, tudo isso integrado aos fluxos de trabalho de desenvolvimento existentes. Para isso, a Snyk cria uma árvore de dependências com base no arquivo requirements.txt incluído em um projeto pip. Em seguida, essas dependências são verificadas no banco de dados de vulnerabilidades da Snyk, e qualquer novo problema corrigível encontrado gera automaticamente um pull request de correção.

Importe seus projetos Python

A Snyk oferece várias integrações para repositórios de código baseados em Git, incluindo GitHub, GitHub Enterprise, GitLab, Bitbucket Server e Bitbucket Cloud. Com elas, você pode testar, monitorar e corrigir facilmente vulnerabilidades de segurança e problemas de licença nos seus projetos Python, como parte dos fluxos de trabalho de gerenciamento de código e desenvolvimento.

Veja como isso funciona com um aplicativo Python de exemplo hospedado no GitHub.

Neste exemplo, já entramos na Snyk com nossas credenciais do GitHub. Por isso, a integração foi configurada automaticamente e agora aparece uma lista de todos os repositórios disponíveis.

Tela de seleção de repositório do Snyk exibindo repositórios do GitHub, com the-example-app.py selecionado para teste

Na tela Importar, selecione o projeto Python que você quer que a Snyk analise e clique em Adicionar repositórios selecionados. A Snyk analisa todos os repositórios selecionados em busca de arquivos de manifesto e importa uma cópia de cada arquivo como um arquivo separado.

A página Projetos será exibida. Quando a Snyk terminar de importar o projeto Python, uma mensagem de sucesso aparecerá no topo da página, solicitando que você atualize a página. Depois de atualizar, você verá seu projeto Python, identificado pelo logotipo do Python e listado junto aos outros projetos integrados.

Painel de projetos do Snyk mostrando repositórios do GitHub com quantidades altas, médias e baixas de vulnerabilidades.

Como mostram os números deste exemplo, a Snyk encontrou várias vulnerabilidades no projeto importado. Para conferir os detalhes, selecione o aplicativo Python na lista de Projetos para expandi-lo e clique no link requirements.txt exibido.

Agora você verá o relatório completo da análise do seu projeto.

Painel do projeto Snyk mostrando um arquivo de requisitos do Python com duas vulnerabilidades e recomendação para atualizar o Flask da versão 0.12.2 para a 0.12.3.

No topo da página, são exibidos vários metadados do projeto, incluindo o número de vulnerabilidades encontradas e a quantidade de caminhos pelos quais elas foram introduzidas.

Você também verá recomendações de correção, com as etapas sugeridas para resolver alguns dos problemas encontrados (esse também é um recurso totalmente novo; falaremos mais sobre ele em breve!). Neste caso, atualizar a dependência flask da versão 0.12.3 para a versão 0.12.3 corrige dois problemas de alta gravidade.

Painel de recomendações de correção mostrando a atualização do Flask 0.12.2 para o 0.12.3 para corrigir problemas de validação inadequada de entrada e negação de serviço

Pull requests de correção

Mais abaixo, você verá todas as vulnerabilidades encontradas nas dependências, junto com informações contextuais que ajudam a priorizar os problemas e iniciar a correção, se necessário.

Painel de vulnerabilidades que mostra um problema de negação de serviço de alta gravidade no Flask, com detalhes da correção e opções para abrir uma pull request de correção.

Os vários filtros à esquerda da página ajudam você a navegar pelos problemas encontrados. Por exemplo, você pode filtrar por gravidade para corrigir primeiro as vulnerabilidades de alta gravidade ou por maturidade do exploit — um indicador do quanto uma vulnerabilidade é realmente perigosa (saiba mais sobre maturidade do exploit aqui).

Para as vulnerabilidades que a Snyk consegue corrigir, você pode criar um pull request diretamente na plataforma: basta clicar em Corrigir esta vulnerabilidade.

Relatório de vulnerabilidade de segurança do gunicorn com um problema de contrabando de solicitações HTTP de gravidade média e recomendações de atualização de versão.

Com o suporte aprimorado a Python, pull requests para novas vulnerabilidades também são criados automaticamente, de acordo com as suas configurações (veja mais detalhes abaixo). Os pull requests abertos pela Snyk trazem informações contextuais para ajudar você a entender por que foram criados, quais alterações a correção aplicará às dependências e mais detalhes sobre a vulnerabilidade que será corrigida.

Pull request do GitHub criado pelo bot da Snyk, com correções para duas dependências vulneráveis do Python em requirements.txt.

Pull requests de teste

Todo novo pull request com alterações no arquivo requirements.txt é testado automaticamente para garantir que não introduza novas vulnerabilidades de segurança no projeto. Se alguma vulnerabilidade for encontrada, o pull request não passa no teste de segurança, e você pode decidir se quer continuar com a mesclagem.

Pull request do GitHub mostrando uma verificação de segurança com falha e sete vulnerabilidades, uma verificação de licença bem-sucedida e nenhum conflito de merge.

Você pode configurar todas essas automações. Tanto os pull requests de teste quanto os de correção podem ser desativados. Nos pull requests de teste, você também pode controlar as condições para reprovação.

Página de configurações do Snyk mostrando verificações de pull request ativadas, condições de falha e pull requests automáticos de correção com patches para dependências vulneráveis.

Segurança que prioriza desenvolvedores com a Snyk

Manter as dependências vulneráveis sob controle é uma das principais práticas recomendadas de segurança em Python. Mais fácil falar do que fazer, não é? A facilidade de incorporar código de terceiros aos projetos e a adoção cada vez maior do código aberto tornam o desafio de obter visibilidade e controle sobre esse código ainda mais complexo.

A Snyk foi criada para ajudar desenvolvedores a superar esse desafio com uma ferramenta fácil de usar, integrada nativamente aos fluxos de trabalho existentes, que automatiza a identificação e a correção de vulnerabilidades em dependências de código aberto.

A correção automatizada para Python está disponível em todos os planos do Snyk Open Source, inclusive no plano gratuito, que oferece análises ilimitadas de projetos de código aberto. Para experimentar, crie uma conta pelo link abaixo e comece a testar. Enquanto isso, estes recursos ajudam você a começar a proteger seus projetos Python:

Programe com segurança!

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.