Skip to main content

Solução de problemas de detecção de dependências vulneráveis

Se as informações sobre dependências relatadas por GitHub não são o que você esperava, há uma série de pontos a considerar, e várias coisas que você pode verificar.

Os resultados da detecção de dependências relatados pelo GitHub podem ser diferentes dos resultados retornados por outras ferramentas. Existem boas razões para isso e é útil entender como GitHub determina as dependências para o seu projeto.

Por que algumas dependências parecem estar faltando?

O GitHub gera e exibe dados de dependência de maneira diferente de outras ferramentas. Consequentemente, se você usou outra ferramenta para identificar dependências, quase certamente verá resultados diferentes. Considere o seguinte:

  • O GitHub Advisory Database é uma das fontes de dados que o GitHub usa para identificar dependências vulneráveis e malware. Ele é um banco de dados coletado gratuito, que contém de avisos de segurança de ecossistemas de pacotes comuns no GitHub. Inclui tanto dados relatados diretamente para GitHub de GitHub Security Advisories quanto os feeds oficiais e as fontes comunitárias. Estes dados são revisados e curados por GitHub para garantir que informações falsas ou não acionáveis não sejam compartilhadas com a comunidade de desenvolvimento. Para obter mais informações, confira "Como procurar avisos de segurança no GitHub Advisory Database".

  • O gráfico de dependências analisa todos os arquivos conhecidos de manifesto de pacote no repositório de um usuário. Por exemplo, para o npm, ele analisará o arquivo package-lock.json. Ele constrói um gráfico de todas as dependências do repositório e dependências públicas. Isso acontece quando você habilita o gráfico de dependências e quando alguém faz push para o branch-padrão, e inclui commits que fazem alterações em um formato de manifesto compatível. Para obter mais informações, confira "Sobre o gráfico de dependências" e "Solução de problemas para o gráfico de dependências."

  • O Dependabot examina qualquer push, para o branch padrão, que contém um arquivo de manifesto. Quando um novo aviso é adicionado, ele verifica todos os repositórios existentes e gera um alerta para cada repositório afetado. Os Dependabot alerts são agregados no nível do repositório, não é criado um alerta para cada aviso. Para obter mais informações, confira "Sobre alertas do Dependabot".

  • As Dependabot security updates são disparadas quando você recebe um alerta sobre uma dependência vulnerável no repositório. Sempre que possível, Dependabot cria um pull request no repositório para atualizar a dependência vulnerável à versão mínima segura necessária para evitar a vulnerabilidade. Para obter mais informações, confira "Sobre as atualizações de segurança do Dependabot" e "Solução de problemas do Dependabot."

    O Dependabot não verifica os repositórios com agendamento, mas somente quando algo muda. Por exemplo, uma verificação é disparada quando uma nova dependência é adicionada (o GitHub verifica isso em cada push) ou quando um novo aviso é adicionado ao banco de dados. Para obter mais informações, confira "Sobre alertas do Dependabot".

Os Dependabot alerts só estão relacionados a dependências não seguras nos manifestos e arquivos de bloqueio?

Os Dependabot alerts aconselham você com relação a dependências que você deve atualizar, incluindo dependências transitivas, em que a versão pode ser determinada a partir de um manifesto ou de um arquivo de bloqueio. As Dependabot security updates sugerem apenas uma alteração em que o Dependabot pode "corrigir" diretamente a dependência, em casos de:

  • Dependências diretas, que são definidas explicitamente em um manifesto ou arquivo de bloqueio
  • Dependências transitórias declaradas em um arquivo de bloqueio

Verificação: a vulnerabilidade não capturada é de um componente que não está especificado no manifesto ou no arquivo de bloqueio do repositório?

Por que não recebo Dependabot alerts de alguns ecossistemas?

Há suporte para Dependabot alerts em um conjunto de ecossistemas em que podemos fornecer dados acionáveis e de alta qualidade. Os avisos coletados no GitHub Advisory Database, o grafo de dependência, Dependabot as atualizações de segurança, e os Dependabot alerts são fornecidos para vários ecossistemas, incluindo o Maven do Java, o npm do JavaScript e o YARN, NuGet do .NET, o pip do Python, RubyGems do Ruby e o Composer do PHP. Nós continuaremos a adicionar suporte para mais ecossistemas ao longo do tempo. Para ter uma visão geral dos ecossistemas de pacote aos quais damos suporte, confira "Sobre o gráfico de dependências".

Vale a pena observar que podem existir avisos de segurança para outros ecossistemas. As informações em um aviso de segurança não examinado são fornecidas pelos mantenedores de um determinado repositório. Esses dados não são coletados pelo GitHub. Para obter mais informações, confira "Como procurar avisos de segurança no GitHub Advisory Database".

Verificação: a vulnerabilidade não capturada se aplica a um ecossistema sem suporte?

Há quantos anos o Dependabot gera alertas para vulnerabilidades conhecidas?

O GitHub Advisory Database foi lançado em novembro de 2019 e preenchido inicialmente com avisos de riscos de segurança nos ecossistemas com suporte encontrados a partir de 2017. Ao adicionar CVEs ao banco de dados, priorizamos a curadoria de CVEs mais recentes e CVEs que afetam versões mais recentes do software.

Algumas informações sobre vulnerabilidades mais antigas estão disponíveis, especialmente quando estes CVEs estão particularmente disseminados. No entanto algumas vulnerabilidades antigas não estão incluídas no GitHub Advisory Database. Se houver uma vulnerabilidade antiga específica que você precisar incluir no banco de dados, entre em contato com conosco por meio do Portal de suporte do GitHub.

Verificação: a vulnerabilidade não capturada tem uma data de publicação anterior a 2017 no National Vulnerability Database?

Por que o GitHub Advisory Database usa um subconjunto de dados de vulnerabilidade publicada?

Algumas ferramentas de terceiros usam dados de CVE não descurados que não são verificados ou filtrados por um ser humano. Isto significa que os CVEs com erros de etiqueta ou de gravidade, ou outros problemas de qualidade, gerarão alertas mais frequentes, mais ruidosos e menos úteis.

Como o Dependabot usa os dados coletados no GitHub Advisory Database, o volume de alertas pode ser menor, mas os alertas recebidos serão precisos e relevantes.

Cada dependência não segura gera um alerta separado?

Quando uma dependência tem várias vulnerabilidades, gera-se um alerta para cada vulnerabilidade no nível da consultoria mais manifesto.

Captura de tela da aba de Dependabot alerts que mostra dois alertas do mesmo pacote com manifestos diferentes.

O legado de Dependabot alerts foi agrupado em um único alerta agregado com todas as vulnerabilidades para a mesma dependência. Se você acessar um link para um alerta de legadode Dependabot, você será redirecionado para a aba de Dependabot alerts filtrada para exibir vulnerabilidades para esse pacote e manifesto dependente.

Captura de tela da aba Dependabot alerts que mostra os alertas filtrados da navegação até um alerta de legado de Dependabot.

A contagem de Dependabot alerts em GitHub mostra um total para o número de alertas, que é o número de vulnerabilidades, não o número de dependências.

Verificação: se houver uma discrepância nos totais que você está vendo, verifique se não está comparando números de alertas com números de dependências. Também verifique se você está visualizando todos os alertas e não um subconjunto de alertas filtrados.

O Dependabot pode ignorar dependências específicas?

Você pode configurar o Dependabot para ignorar dependências específicas no arquivo de configuração, o que impedirá atualizações de segurança e de versão para essas dependências. Se você quiser usar apenas atualizações de segurança, substitua o comportamento padrão usando um arquivo de configuração. Para saber mais, confira "Configurando as atualizações de segurança do Dependabot" para impedir que as atualizações de versão sejam ativadas. Para saber mais sobre como ignorar dependências, confira "Opções de configuração para o arquivo dependabot.yml".

Leitura adicional