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.
- Na linha de comando, navegue para o diretório do projeto ou solução.
- Execute
restore
usando suas ferramentas preferidas (ou seja, dotnet, MSBuild, NuGet.exe, VisualStudio etc). - 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.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários