Investiga las vulnerabilidades

Cuando te enteres de una nueva vulnerabilidad, es importante actuar con rapidez. En esta página, se proporciona una lista de llamadas a la API y filtros esenciales que se preconstruyen para tu uso. Usa estas llamadas a la API para recuperar los resultados de Artifact Analysis y recopilar información sobre el estado de tus artefactos.

Este contenido está diseñado para usarse con metadatos de análisis automático. Si tus imágenes superaron el período de análisis continuo de 30 días, puedes ejecutar un nuevo análisis. Para ello, vuelve a enviar Artifact Registry.

En todos los ejemplos de esta página, se accede a la API directamente, pero también puedes usar las bibliotecas cliente de Container Analysis o los comandos de gcloud.

Permisos necesarios

En todos estos ejemplos, se usa el método de la API ListOccurrences. Para llamar a este método, necesitarás el rol (roles/containeranalysis.occurrences.viewer) de Visualizador de casos de Container Analysis para el proyecto que estás analizando.

Para obtener más información sobre los tipos de acceso de proveedores y clientes que usan Artifact Analysis, consulta Permisos.

Cómo ver todos los metadatos de vulnerabilidad de una imagen

Usa el filtro KIND="VULNERABILITY" con el ID de tu proyecto y la URL de recurso completa de tu imagen, incluida 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

Reemplaza lo siguiente:

El resultado incluye una lista de vulnerabilidades con detalles como la gravedad, las opciones de mitigación, si están disponibles, y el nombre del paquete que contiene la vulnerabilidad.

Cómo verificar una vulnerabilidad específica en un proyecto

En la mayoría de los casos, Artifact Analysis usa el ID de CVE como identificador de vulnerabilidad. Sin embargo, hay algunas vulnerabilidades enumeradas en la base de datos de avisos de GitHub que no tienen un ID de CVE asociado. En este caso, Artifact Analysis usa el ID de GHSA.

El ID de vulnerabilidad se incluye como parte del campo noteName. Comienza con el prefijo CVE para los IDs de CVE y GHSA para los IDs de GHSA. Por ejemplo, si el siguiente resultado es el resultado de ejecutar el comando para ver todas las vulnerabilidades de una imagen:

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
    ...

La primera vulnerabilidad tiene el ID CVE-2021-32798, y la segunda tiene el ID GHSA-884p-74jh-xrg2.

  1. Obtén el identificador de la vulnerabilidad.

  2. Usa el ID de CVE o el ID de GHSA en la siguiente expresión de filtro para recuperar una lista de imágenes afectadas:

  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

Reemplaza lo siguiente:

  • PROJECT_ID es tu ID del proyecto de Cloud. Para ver una lista de tus proyectos, puedes usar gcloud projects list.
  • VULN_ID es el ID de la vulnerabilidad. El ID de CVE o el número de ID de GHSA, como CVE-2021-32798 o GHSA-884p-74jh-xrg2

Por ejemplo, en la siguiente llamada, se muestra cómo recuperar los resultados del análisis de las imágenes de tu proyecto que tienen una ocurrencia 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

Reemplaza lo siguiente:

  • PROJECT_ID es tu ID del proyecto de Cloud. Para ver una lista de tus proyectos, puedes usar gcloud projects list.

Busca vulnerabilidades en varios proyectos

Usa el glob de curl para realizar consultas en varios proyectos.

Por ejemplo, el siguiente fragmento establece una variable para que contenga dos IDs de proyecto y, luego, envía una llamada a la API para cada proyecto para buscar ocurrencias.

  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"

Reemplaza lo siguiente:

  • PROJECT_ID_1 es el ID del proyecto de Google Cloud del primer proyecto que deseas examinar.
  • PROJECT_ID_2 es el ID del proyecto de Google Cloud del segundo proyecto que deseas examinar.

Si necesitas encontrar los IDs de los proyectos, puedes ver una lista de ellos con gcloud projects list.

No se admite una sola llamada a la API en varios proyectos.

Obtener una comprensión amplia de todos los metadatos de un proyecto

Solicita todas las ocasiones asociadas con el ID de tu proyecto:

  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

Reemplaza lo siguiente:

  • PROJECT_ID es tu ID del proyecto de Cloud.

El resultado incluye información sobre vulnerabilidades y otros tipos de metadatos compatibles asociados con tu proyecto. Por ejemplo, tu proyecto podría tener detalles de compilación o certificaciones.

Cómo consultar una ocurrencia específica para obtener todos los detalles disponibles

Para obtener más detalles sobre un suceso individual, usa la siguiente solicitud.

Por ejemplo, si usas Pub/Sub para recibir notificaciones sobre ocurrencias de vulnerabilidades, Pub/Sub envía detalles básicos para ayudarte a identificar el evento que cambió y cuándo. La carga útil incluye un ID de caso. Puedes usar el ID de ocurrencia para consultar detalles que te ayuden a clasificar los problemas y 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

Reemplaza lo siguiente:

  • PROJECT_ID es tu ID del proyecto de Cloud.
  • OCCURRENCE_ID es un valor numérico de la lista de ocurrencias del ejemplo anterior. O bien, si recibes un mensaje de Pub/Sub, usa el valor numérico al final de la URL en ese mensaje.

El resultado incluye información como el tipo de paquete, la gravedad de la vulnerabilidad, la puntuación CVSS y la información sobre las correcciones, si están disponibles.

¿Qué sigue?