Investiga las vulnerabilidades

Cuando te enteres de una vulnerabilidad nueva, es importante que actúes con rapidez. En esta página, se proporciona una lista de llamadas y filtros de API esenciales que ya están creados para ti. Usa estas llamadas a la API para recuperar los resultados del análisis 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 30 días de análisis continuo, puedes ejecutar un nuevo análisis enviando los datos a Artifact Registry nuevamente.

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

Todos estos ejemplos usan 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 para proveedores y clientes que usan Artifact Analysis, consulta permisos.

Visualiza todos los metadatos de vulnerabilidades de una imagen

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

Aquí:

  • PROJECT_ID es el Google Cloud ID del proyecto.
  • RESOURCE_URL es la URL completa de la imagen, en el formato https://HOST_NAME/PROJECT_ID/IMAGE_ID@sha256:HASH. El https:// debe incluirse al principio de la URL. Si necesitas encontrar la URL de una imagen, puedes usar la llamada en Cómo ver todos los metadatos de un proyecto.

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 si hay 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 que se indican en la base de datos de asesoría 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. Considera el siguiente ejemplo de 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
    ...

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

Después de obtener el ID de vulnerabilidad, puedes ejecutar el siguiente comando para recuperar una lista de las imágenes afectadas en tu proyecto que tienen un ID de ocurrencia de VULN_ID:

  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

Aquí:

  • PROJECT_ID es el Google Cloud ID del proyecto.
  • VULN_ID es el ID de la vulnerabilidad como un ID de CVE o un número de ID de GHSA, como CVE-2021-32798 o GHSA-884p-74jh-xrg2.

Busca vulnerabilidades en varios proyectos

Usa la expansión 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 con el objetivo de 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"

Aquí:

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

Cómo ver todos los metadatos de un proyecto

Solicita todas las ocurrencias asociadas con tu ID del 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

Aquí:

  • PROJECT_ID es el Google Cloud ID del proyecto.

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

Cómo verificar si hay un paquete específico en un proyecto

Artifact Analysis crea dependencias de paquetes para los artefactos analizados. Para encontrar todos los artefactos que tienen un paquete específico como dependencia, puedes filtrar por el nombre del paquete:

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

Aquí:

  • PROJECT_ID es el Google Cloud ID del proyecto.
  • PACKAGE_NAME es el nombre del paquete.

Cómo ver todos los metadatos del paquete de una imagen

Para ver todos los tipos diferentes de metadatos de paquetes de una imagen, usa el filtro kind=PACKAGE_NAME con el ID de tu proyecto y la URL completa del recurso de imagen:

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

Aquí:

  • PROJECT_ID es el Google Cloud ID del proyecto.
  • RESOURCE_URL es la URL completa de la imagen, en el formato https://HOST_NAME/PROJECT_ID/IMAGE_ID@sha256:HASH. El https:// debe incluirse al principio de la URL. Si necesitas encontrar la URL de una imagen, puedes usar la llamada de Cómo ver todos los metadatos de un proyecto.

El resultado incluye una lista de dependencias con el nombre, la versión y la información de licencia de cada dependencia.

Consulta una ocurrencia específica para obtener todos los detalles disponibles

Puedes ejecutar una consulta para obtener más detalles sobre una ocurrencia. Por ejemplo, si usas Pub/Sub para recibir notificaciones sobre las ocurrencias de vulnerabilidades, Pub/Sub envía detalles básicos para ayudarte a identificar la ocurrencia que cambió y cuándo se produjo el cambio.

La carga útil incluye un ID de caso. Puedes usar el ID de ocurrencia para consultar detalles que te ayuden a priorizar 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

Aquí:

  • PROJECT_ID es el Google Cloud ID del proyecto.
  • OCCURRENCE_ID puede ser cualquiera de los siguientes, según el resultado del comando de Cómo ver todos los metadatos de un proyecto:

    • Es un valor numérico de una lista de ocurrencias.
    • Es el valor numérico al final de la URL de un mensaje de Pub/Sub.

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

¿Qué sigue?