Investigar vulnerabilidades

Cuando te enteres de una nueva vulnerabilidad, es importante que actúes rápidamente. En esta página se ofrece una lista de llamadas a la API y filtros esenciales que ya están configurados. Usa estas llamadas a la API para obtener los resultados de los análisis de Artifact Analysis y recoger información sobre el estado de tus artefactos.

Este contenido se ha diseñado para usarse con metadatos de análisis automático. Si tus imágenes han superado el periodo de 30 días de análisis continuo, puedes ejecutar un nuevo análisis volviendo a enviar las imágenes a Artifact Registry.

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

Permisos obligatorios

En todos estos ejemplos se usa el método de la API ListOccurrences. Para llamar a este método, necesitas el rol Lector de repeticiones de Container Analysis (roles/containeranalysis.occurrences.viewer) en 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 los permisos.

Ver todos los metadatos de vulnerabilidades de una imagen

Usa el filtro kind=VULNERABILITY con tu ID de 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

Donde:

  • PROJECT_ID es el ID de tu proyecto Google Cloud .
  • RESOURCE_URL es la URL completa de la imagen, con 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 Ver todos los metadatos de un proyecto.

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

Buscar 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 avisos de GitHub que no tienen un ID de CVE asociado. En este caso, Artifact Analysis usa el ID de GHSA.

El ID de la vulnerabilidad se incluye en el campo noteName. Empieza con el prefijo CVE para los IDs de CVE y GHSA para los IDs de GHSA. Consulta el siguiente ejemplo de salida al 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.

Una vez que tengas el ID de la vulnerabilidad, puedes ejecutar el siguiente comando para obtener una lista de las imágenes afectadas de tu proyecto que tengan el ID de ocurrencia 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

Donde:

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

Buscar vulnerabilidades en varios proyectos

Usa globbing de curl para hacer consultas en varios proyectos.

Por ejemplo, el siguiente fragmento define una variable que contiene dos IDs de proyecto y, a continuación, envía una llamada a la API para cada proyecto con el fin de buscar coincidencias.

  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"

Donde:

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

Ver todos los metadatos de un proyecto

Solicita todas las ocurrencias asociadas a tu ID de 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

Donde:

  • PROJECT_ID es el ID de tu proyecto Google Cloud .

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

Buscar un paquete específico en un proyecto

Artifact Analysis crea dependencias de paquetes para los artefactos analizados. Para encontrar todos los artefactos que tengan un paquete específico como dependencia, puede 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

Donde:

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

Ver todos los metadatos de un paquete de una imagen

Para ver todos los tipos 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

Donde:

  • PROJECT_ID es el ID de tu proyecto Google Cloud .
  • RESOURCE_URL es la URL completa de la imagen, con 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 Ver todos los metadatos de un proyecto.

La salida incluye una lista de dependencias con el nombre de la dependencia, la versión y la información de la licencia.

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

Puedes ejecutar una consulta para obtener más detalles sobre una aparición. Por ejemplo, si usas Pub/Sub para recibir notificaciones sobre las incidencias de vulnerabilidades, Pub/Sub envía detalles básicos para ayudarte a identificar la incidencia que ha cambiado y cuándo se ha producido el cambio.

La carga útil incluye un ID de ocurrencia. Puede usar el ID de ocurrencia para consultar los detalles que le 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

Donde:

  • PROJECT_ID es el ID de tu proyecto Google Cloud .
  • OCCURRENCE_ID puede ser cualquiera de los siguientes valores, en función del resultado del comando de Ver todos los metadatos de un proyecto:

    • Valor numérico de una lista de repeticiones.
    • 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 CVSS e información sobre las correcciones, si están disponibles.

Siguientes pasos