Investigar vulnerabilidades

Quando você souber de uma nova vulnerabilidade, é importante agir rapidamente. Esta página oferece uma lista de chamadas e filtros de API essenciais pré-criados para você. Use essas chamadas de API para recuperar os resultados da verificação da Artifact Analysis e coletar informações sobre o status dos artefatos.

Este conteúdo foi desenvolvido para uso com metadados de leitura automática. Se suas imagens tiverem excedido o período de 30 dias da análise contínua, você poderá executar uma nova verificação enviando para o Artifact Registry novamente.

Todos os exemplos nesta página acessam a API diretamente, mas você também pode usar as bibliotecas de cliente da Análise de contêineres ou os comandos do gcloud.

Permissões necessárias

Todos esses exemplos usam o método da API ListOccurrences. Para chamar esse método, você precisa do papel Visualizador de ocorrências do Container Analysis (roles/containeranalysis.occurrences.viewer) para o projeto que está analisando.

Para mais informações sobre os tipos de acesso para provedores e clientes que usam Artifact Analysis, consulte permissões.

Conferir todos os metadados de vulnerabilidade de uma imagem

Use o filtro KIND="VULNERABILITY" com o ID do projeto e o URL do recurso completo da imagem, incluindo https://:

  curl -G -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    --data-urlencode "filter=(kind=\"VULNERABILITY\" AND resourceUrl=\"RESOURCE_URL\")" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences

Substitua:

A saída inclui uma lista de vulnerabilidades com detalhes, como a gravidade, as opções de mitigação, se disponíveis, e o nome do pacote que contém a vulnerabilidade.

Verificar uma vulnerabilidade específica em um projeto

Na maioria dos casos, Artifact Analysis usa o CVE ID como o identificador de vulnerabilidade. No entanto, há algumas vulnerabilidades listadas no GitHub Advisory Database que não têm um ID de CVE associado. Nesse caso, Artifact Analysis usa o ID da GHSA.

O ID da vulnerabilidade é incluído como parte do campo noteName. Ele começa com o prefixo CVE para IDs de CVE e GHSA para IDs de GHSA. Por exemplo, se a saída a seguir for o resultado da execução do comando para ver todas as vulnerabilidades de uma imagem:

vulnerabilities:
  HIGH:
  - name: projects/my-project/occurrences/1234fh2c-699a-462f-b920-93a80f56f544
    resourceUri: https://my_region-docker.pkg.dev/my-project/my-repo/my-image@sha256:8a1a79b587797c5164ec95977cf7aaaa828694a615947bdaed6a327d5b6a17bb
    noteName: projects/goog-vulnz/notes/CVE-2021-32798
    kind: VULNERABILITY
    ...
  - name: projects/my-project/occurrences/OCCURRENCE_ID
    resourceUri: https://my_region-docker.pkg.dev/my-project/my-repo/my-image@sha256:8a1a79b587797c5164ec95977cf7aaaa828694a615947bdaed6a327d5b6a17bb
    noteName: projects/goog-vulnz/notes/GHSA-884p-74jh-xrg2
    kind: VULNERABILITY
    ...

A primeira vulnerabilidade tem o ID CVE-2021-32798, e a segunda tem o ID GHSA-884p-74jh-xrg2.

  1. Conseguir o identificador da vulnerabilidade.

  2. Use o ID da CVE ou da GHSA na expressão de filtro a seguir para extrair uma lista de imagens afetadas:

  curl -G -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    --data-urlencode "filter=(noteProjectId=\"goog-vulnz\" AND noteId=\"VULN_ID\")" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences

Substitua:

  • PROJECT_ID é o ID do projeto no Google Cloud. Para conferir uma lista dos seus projetos, use gcloud projects list.
  • VULN_ID é o ID da vulnerabilidade. O ID da CVE ou o número de ID da GHSA, como CVE-2021-32798 ou GHSA-884p-74jh-xrg2.

Por exemplo, a chamada a seguir demonstra como recuperar os resultados da verificação de imagens no seu projeto que têm uma ocorrência de CVE-2023-23915:

  curl -G -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    --data-urlencode "filter=(noteProjectId=\"goog-vulnz\" AND noteId=\"CVE-2023-23915\")" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences

Substitua:

  • PROJECT_ID é o ID do projeto no Google Cloud. Para conferir uma lista dos seus projetos, use gcloud projects list.

Pesquisar vulnerabilidades em vários projetos

Use o globbing do curl para fazer consultas em projetos.

Por exemplo, o snippet a seguir define uma variável para conter dois IDs de projeto e, em seguida, envia uma chamada de API para cada projeto para pesquisar ocorrências.

  PROJECT_IDS="PROJECT_ID_1,PROJECT_ID_2"

  curl -G -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://containeranalysis.googleapis.com/v1/projects/{$PROJECT_IDS}/occurrences"

Substitua:

  • PROJECT_ID_1 é o ID do projeto do Google Cloud do primeiro projeto que você quer examinar.
  • PROJECT_ID_2 é o ID do projeto do Google Cloud para o segundo projeto que você quer examinar.

Se você precisar encontrar os IDs dos projetos, acesse uma lista deles usando gcloud projects list.

Não há suporte para uma única chamada de API em vários projetos.

Entender todos os metadados de um projeto

Solicite todas as ocorrências associadas ao ID do projeto:

  curl -X GET -H "Content-Type: application/json" -H \
    "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences

Substitua:

  • PROJECT_ID é o ID do projeto no Google Cloud.

A saída inclui informações de vulnerabilidade e outros tipos de metadados com suporte associados ao seu projeto. Por exemplo, seu projeto pode ter detalhes de build ou atestados.

Consultar uma ocorrência específica para todos os detalhes disponíveis

Para saber mais sobre uma ocorrência específica, use a seguinte solicitação.

Por exemplo, se você estiver usando o Pub/Sub para receber notificações sobre ocorrências de vulnerabilidade, o Pub/Sub vai enviar detalhes básicos para ajudar a identificar a ocorrência que mudou e quando. O payload inclui um ID de ocorrência. Você pode usar o ID da ocorrência para consultar detalhes e ajudar a classificar os problemas e tomar medidas.

  curl -X GET -H "Content-Type: application/json" -H \
    "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences/OCCURRENCE_ID

Substitua:

  • PROJECT_ID é o ID do projeto no Google Cloud.
  • OCCURRENCE_ID é um valor numérico da lista de ocorrências do exemplo anterior. Ou, se você receber uma mensagem do Pub/Sub, use o valor numérico no final do URL naquela mensagem.

A saída inclui informações como tipo de pacote, gravidade da vulnerabilidade, pontuação CVSS e informações sobre correções, se disponíveis.

A seguir