Skip to main content

Correções automatizadas para vulnerabilidades em dependências .NET

Escrito por

17 de novembro de 2021

0 minutos de leitura

Temos o prazer de anunciar o suporte aprimorado a aplicativos .NET no Snyk Open Source, que permite aos desenvolvedores corrigir vulnerabilidades em dependências .NET com orientações práticas e pull requests automatizados!

Na data em que este artigo foi escrito, o NuGet, gerenciador de pacotes para .NET mantido pela Microsoft e padrão de fato do ecossistema, contava com 276.266 pacotes únicos, baixados, em média, mais de um bilhão de vezes por semana! Em 2020, ficando atrás apenas do npm, o NuGet registrou o maior crescimento anual em número de pacotes adicionados.

Esses números refletem a popularidade do framework .NET, mas também um dos principais desafios enfrentados pelas equipes de desenvolvimento .NET: gerenciar e reduzir os riscos de segurança causados por vulnerabilidades conhecidas nesses pacotes. Muitas vezes, essas vulnerabilidades estão em dependências transitivas, ou seja, pacotes adicionados por outros pacotes. Isso reduz a visibilidade e dificulta a correção necessária.

Os novos recursos do Snyk Open Source facilitam não apenas a identificação precisa de vulnerabilidades nas dependências .NET diretas e transitivas, mas também a correção automática dessas vulnerabilidades.

Segurança .NET no Snyk Open Source

A identificação e a correção de vulnerabilidades em dependências .NET no Snyk Open Source são viabilizadas por dois processos essenciais: a análise precisa da árvore de dependências e a correlação dessas informações com o Snyk Intel, o banco de dados de vulnerabilidades da Snyk, referência no mercado.

Análise de dependências

No ecossistema .NET, há vários níveis de dependências: algumas são evidentes para o desenvolvedor, enquanto outras ficam completamente ocultas.

Para identificar corretamente as vulnerabilidades de um aplicativo .NET, é preciso resolver essas dependências com precisão.

Resolvemos as dependências de maneiras diferentes na CLI da Snyk e nos sistemas de gerenciamento de código-fonte (SCM), como Azure Repos, GitHub etc. Por exemplo, na CLI, dependendo de como você gerencia as dependências do projeto — com PackageReference ou packages.config, por exemplo —, analisamos o arquivo obj/project.assets.json no primeiro caso e o diretório de pacotes no segundo. Essa abordagem oferece alta precisão.

A análise de projetos pela integração com SCM exige um processo diferente, pois os arquivos gerados mencionados acima não estão disponíveis. Para contornar isso, seguimos o algoritmo de resolução de dependências do NuGet para construir uma árvore de dependências. Vale destacar que as dependências de runtime (fornecidas pelo ambiente, também conhecidas como metapacotes) são resolvidas com mais precisão na CLI se a máquina host usar um SDK de runtime semelhante ao do servidor que executa o aplicativo.

Inteligência sobre vulnerabilidades

Depois de determinar a árvore de dependências, o Snyk Open Source correlaciona a lista de dependências com o Snyk Intel. Com uma lista abrangente de vulnerabilidades .NET (440% maior que a do próximo banco de dados disponível publicamente), o Snyk Intel oferece informações precisas e práticas para agilizar a correção, incluindo as versões dos pacotes afetadas e a versão para a qual é preciso atualizar. No total, o Snyk Intel contém mais de 700 vulnerabilidades .NET, das quais 63% são críticas ou de alta gravidade.

O pacote UbracoForms é um exemplo interessante. Usado para criar formulários e questionários em aplicativos, o UbracoForms já foi baixado centenas de milhares de vezes. Embora a versão mais recente do pacote, a 8.8.0, não tenha vulnerabilidades, as versões anteriores contêm uma vulnerabilidade crítica de execução remota de código (RCE).

Página da Snyk Vulnerability Database mostrando uma vulnerabilidade crítica de execução remota de código, com classificação 9,8, no pacote NuGet UmbracoForms.Core.

O Snyk Open Source usa essas informações para calcular a correção necessária, que aparece tanto nas orientações de correção quanto nos pull requests de correção acionados automaticamente.

Vamos ver isso mais de perto.

Orientações de correção .NET no Snyk Open Source

A Snyk se integra a SCMs baseados em Git, incluindo GitHub, GitHub Enterprise, Azure Repos, GitLab, Bitbucket Server e Bitbucket Cloud. Assim, você pode importar seus projetos com facilidade e, em seguida, encontrar e corrigir as vulnerabilidades e os problemas de licença identificados, tudo dentro do seu fluxo de desenvolvimento habitual.

Importar um projeto é simples. Basta acessar a página Projects, clicar em Add project no canto superior direito e selecionar o tipo de projeto que você quer importar (GitHub, Bitbucket etc.) e o repositório que contém o projeto. Para esta demonstração, vou importar este aplicativo de exemplo, que foi criado intencionalmente com vulnerabilidades.

Quando o projeto é importado, a Snyk o analisa automaticamente em busca de problemas. Neste exemplo, o Snyk Code identificou um problema no meu código personalizado (1), enquanto o Snyk Open Source identificou uma lista maior de problemas nos pacotes .NET de código aberto que estou usando (2).

Painel de projetos do Snyk exibindo projetos filtrados, contagem de problemas por gravidade e um projeto .NET expandido com resultados da análise de código

Ao clicar no arquivo do projeto .NET, você pode analisar esses problemas com mais detalhes.

Painel do projeto Snyk mostrando 18 problemas, incluindo uma vulnerabilidade crítica de execução arbitrária de código no Halibut em um projeto .NET

Foram identificados 18 problemas, e a Snyk ajuda a corrigi-los de várias maneiras.

Primeiro, na guia Dependencies, é exibida a árvore completa de dependências. Assim, você tem visibilidade total de todos os pacotes .NET usados na criação do projeto e dos problemas que eles introduzem — tanto vulnerabilidades de segurança conhecidas quanto problemas de licença:

Interface de árvore de dependências que mostra os pacotes do projeto, dependências .NET aninhadas e opções de pesquisa e filtros para vulnerabilidades e problemas de licença

Você pode filtrar a árvore para ver apenas as dependências vulneráveis ou aquelas que apresentam problemas de licença. Mais uma vez, isso mostra com clareza como os problemas foram introduzidos, seja diretamente ou por meio de dependências transitivas.

Em seguida, na guia Fixes, a Snyk apresenta orientações para corrigir vulnerabilidades. Nem todos os problemas podem ser corrigidos, mas, quando isso é possível, você vê o caminho exato de atualização necessário para aplicar a correção.

Observação: o Snyk Open Source recomenda um caminho de atualização para vulnerabilidades identificadas em dependências diretas e transitivas, mas somente quando existe uma nova versão da dependência direta que corrige a vulnerabilidade.

Neste exemplo, a Snyk informa que atualizar o pacote TinyMCE da versão 4.8.2 para a 5.6.0 corrigirá quatro vulnerabilidades diferentes:

Painel de vulnerabilidades de dependências mostrando a atualização do TinyMCE da versão 4.8.2 para a 5.6.0, com vários problemas de cross-site scripting

Voltando à guia principal Issues, o Snyk Open Source apresenta diversas informações para ajudar você a analisar a lista de problemas e priorizar as correções. Entre elas está uma pontuação de prioridade no canto superior direito do cartão do problema, que indica rapidamente o nível de urgência (saiba mais sobre a pontuação de prioridade da Snyk aqui), além do caminho de atualização.

No exemplo abaixo, o Snyk Open Source identificou uma vulnerabilidade crítica no pacote Halibut e recomenda a atualização para a versão 4.4.7:

Painel de segurança de dependências que mostra a vulnerabilidade crítica de execução arbitrária de código no Halibut e a recomendação de atualizar da versão 4.4.4 para a 4.4.7

Para corrigir a vulnerabilidade, você pode iniciar manualmente um pull request clicando no botão Fix this vulnerability. Isso abre uma página com a lista de vulnerabilidades que podem ser corrigidas por meio de um pull request. Você pode escolher uma ou mais para corrigir:

Tela do Snyk Open Source mostrando uma solicitação de pull request de correção e listando vulnerabilidades de software agrupadas por correções disponíveis, parciais e indisponíveis.

Neste caso, vou selecionar apenas a vulnerabilidade que quero corrigir: a do pacote Halibut.

Ao clicar em Open a Fix PR na parte inferior da página, o pull request é criado e aberto para análise no repositório correspondente do GitHub:

Pull request do GitHub mostrando o Snyk atualizando o Halibut da versão 4.4.4 para a 4.4.7 para corrigir uma vulnerabilidade crítica de execução arbitrária de código.

O pull request contém todo o contexto necessário para decidir se você deve ou não mesclar as alterações, incluindo informações sobre a própria vulnerabilidade e o escopo da correção sugerida.

Pull request do GitHub mostrando uma atualização de segurança que altera a versão do pacote Halibut de 4.4.4 para 4.4.7

A Snyk também cria automaticamente um pull request no seu repositório quando uma nova vulnerabilidade é identificada ou quando uma nova correção fica disponível para uma vulnerabilidade existente.

Para evitar que você introduza novos problemas no projeto por acidente, o Snyk Open Source também testa automaticamente qualquer novo pull request aberto por você ou por outro colaborador do repositório, verificando a presença de vulnerabilidades ou licenças problemáticas:

Formulário de pull request do GitHub para atualizar dotNETGoofV2.Website.csproj e adicionar o pacote Handsonstable

Comece agora!

O ecossistema .NET é relativamente complexo em comparação com outros ecossistemas. Para gerenciar e reduzir com eficácia os riscos causados por pacotes .NET de código aberto, é importante não apenas interpretar a árvore de dependências com precisão, mas também oferecer o contexto e os fluxos de trabalho necessários para agir e corrigir as vulnerabilidades encontradas.

Os novos recursos de correção do Snyk Open Source ajudam as equipes de desenvolvimento e segurança a encontrar os diferentes problemas nos aplicativos, corrigi-los ativamente como parte do trabalho diário e impedir que novos problemas sejam introduzidos. Para saber como começar, consulte a documentação oficial Snyk for .NET.

Se ainda não fez isso, crie uma conta na Snyk e experimente! Boas correções!

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.