Partilhar via


Auditoria de dependências de pacotes quanto a vulnerabilidades de segurança

Sobre auditorias de segurança

Uma auditoria de segurança para gerenciadores de pacotes como o NuGet é um processo que envolve a análise da segurança dos pacotes incluídos em um projeto de software. Isso envolve identificar vulnerabilidades, avaliar riscos e fazer recomendações para melhorar a segurança. A auditoria pode incluir uma revisão dos próprios pacotes, bem como quaisquer dependências e seus riscos associados. O objetivo da auditoria é identificar e mitigar quaisquer vulnerabilidades de segurança que possam ser exploradas por invasores, como injeção de código ou ataques de cross-site scripting.

Tipo de Projeto NuGet SDK .NET Visual Studio
PackageReference 6.8 .NET 8 SDK (8.0.100) Visual Studio 2022 17.8
packages.config 6.10 N/D Visual Studio 2022 17.10

Executando uma auditoria de segurança com restore

O comando restore é executado automaticamente quando você executa uma operação de pacote comum, como carregar um projeto pela primeira vez, adicionar um novo pacote, atualizar uma versão do pacote ou remover um pacote do seu projeto em seu IDE favorito. Uma descrição das suas dependências é verificada em relação a um relatório de vulnerabilidades conhecidas no GitHub Advisory Database.

Importante

Para que a Auditoria verifique pacotes, uma origem de pacote que forneça um banco de dados de vulnerabilidade deve ser usada. A URL V3 do NuGet.org é um desses exemplos (https://api.nuget.org/v3/index.json), mas observe que o ponto de extremidade V2 do NuGet.org não.

  1. Na linha de comando, navegue para o diretório do projeto ou solução.
  2. Execute restore usando suas ferramentas preferidas (ou seja, dotnet, MSBuild, NuGet.exe, VisualStudio etc).
  3. Revise os avisos e resolva as vulnerabilidades de segurança conhecidas.

Vulnerabilidades de segurança encontradas com atualizações

Se vulnerabilidades de segurança forem encontradas e houver atualizações disponíveis para o pacote, você poderá:

  • Editar o .csproj ou outro local de versão do pacote (Directory.Packages.props) com uma versão mais recente contendo uma correção de segurança.
  • Use a interface do usuário do Gerenciador de Pacotes NuGet no Visual Studio para atualizar o pacote individual.
  • Execute o comando dotnet add package com o respectivo ID do pacote para atualizar para a versão mais recente.

Vulnerabilidades de segurança encontradas sem atualizações

Caso exista uma vulnerabilidade conhecida em um pacote sem uma correção de segurança, você poderá fazer o seguinte.

  • Verifique se há fatores atenuantes descritos no relatório de avisos.
  • Use um pacote sugerido se o pacote estiver marcado como preterido ou for abandonado.
  • Se o pacote for de código aberto, considere contribuir com uma correção.
  • Abra um problema no rastreador de problemas do pacote.

Verifique se há fatores atenuantes

Revise o consultor de segurança para obter quaisquer fatores atenuantes que possam permitir que você continue usando o pacote com a vulnerabilidade. A vulnerabilidade pode existir somente quando o código é usado em uma estrutura específica, sistema operacional ou uma função especial é chamada.

Use um pacote sugerido

Caso um comunicado de segurança seja relatado para o pacote que você está usando e o pacote esteja marcado como preterido ou pareça abandonado, considere usar qualquer pacote alternativo sugerido que o autor do pacote tenha declarado ou um pacote composto por funcionalidade semelhante que seja mantido.

Contribuir com uma correção

Se não existir uma correção para o comunicado de segurança, você poderá sugerir alterações que resolvam a vulnerabilidade em uma solicitação pull no repositório de código aberto do pacote ou entrar em contato com o autor por meio da seção Contact owners na página de detalhes do pacote NuGet.org.

Abrir um problema

Se você não quiser corrigir a vulnerabilidade ou não conseguir atualizar ou substituir o pacote, abra um problema no rastreador de problemas do pacote ou no método de contato preferido. No NuGet.org, você pode navegar até a página de detalhes do pacote e clicar em Report package, o que orientará você para entrar em contato com o autor.

Nenhuma vulnerabilidade de segurança encontrada

Se nenhuma vulnerabilidade de segurança for encontrada, isso significa que pacotes com vulnerabilidades conhecidas não foram encontrados no gráfico de pacotes no momento em que você verificou. Como o banco de dados de consultoria pode ser atualizado a qualquer momento, recomendamos verificar regularmente sua saída dotnet restore e garantir o mesmo em seu processo de integração contínua.

Configurando a auditoria do NuGet

A auditoria pode ser configurada por meio das propriedades do MSBuild em um arquivo do .csproj ou do MSBuild sendo avaliado como parte do seu projeto. Recomendamos que a auditoria seja configurada no nível de repositório.

Propriedade do MSBuild Padrão Valores possíveis Observações
NuGetAuditMode direct direct e all Se você quiser auditar tanto as dependências de nível superior quanto as dependências transitivas, defina o valor como all. NuGetAuditMode não é aplicável a projetos packages.config
NuGetAuditLevel low low, moderate, high e critical Se você quiser ver os avisos de moderate, high e critical, defina o valor como moderate
NuGetAudit true true e false Se não desejar receber relatórios de auditoria de segurança, você pode recusar completamente a experiência definindo o valor como false

Excluindo avisos

Não há suporte à exclusão de avisos individuais no momento. Você pode usar <NoWarn> para suprimir avisos NU1901-NU1904 ou usar a funcionalidade <NuGetAuditLevel> para garantir que seus relatórios de auditoria sejam úteis para seu fluxo de trabalho.

Códigos de avisos

Código do aviso Motivo
NU1900 Erro ao se comunicar com a origem do pacote ao obter informações sobre vulnerabilidade.
NU1901 Pacote com baixa gravidade detectado
NU1902 Pacote com gravidade moderada detectado
NU1903 Pacote com alta gravidade detectado
NU1904 Pacote com gravidade crítica detectado

Você pode personalizar sua compilação para tratar esses avisos como erros para tratar avisos como erros ou tratar avisos como não erros. Por exemplo, se você já estiver usando <TreatWarningsAsErrors> para tratar todos os avisos (C#, NuGet, MSBuild, etc) como erros, poderá usar <WarningsNotAsErrors>NU1901;NU1902;NU1903;NU1904</WarningsNotAsErrors> para evitar que vulnerabilidades descobertas no futuro interrompam sua compilação. Como alternativa, se você quiser manter vulnerabilidades baixas e moderadas como avisos, mas tratar vulnerabilidades altas e críticas como erros, e você não estiver usando o TreatWarningsAsErrors, você poderá usar o <WarningsAsErrors>NU1903;NU1904</WarningsAsErrors>.

Observação

As propriedades do MSBuild para gravidade da mensagem, como NoWarn e TreatWarningsAsErrors, não são compatíveis com projetos packages.config.

Resumo

Os recursos de auditoria de segurança são cruciais para manter a segurança e a integridade dos projetos de software. Esses recursos fornecem uma camada adicional de proteção contra vulnerabilidades de segurança e garantem que você possa usar pacotes de código aberto com confiança.