Compartir comentarios
Las respuestas se generan en base a la documentación.

docker scout cves

DescripciónMuestra los CVE identificados en un artefacto de software
Usodocker scout cves [OPTIONS] [IMAGE|DIRECTORY|ARCHIVE]

Descripción

El comando docker scout cves analiza un artefacto de software en busca de vulnerabilidades.

Si no se especifica ninguna imagen, se utiliza la imagen construida más recientemente.

Se admiten los siguientes tipos de artefactos:

  • Imágenes
  • Directorios de diseño (layout) OCI
  • Archivos tarball, creados por docker save
  • Directorio o archivo local

Por defecto, la herramienta espera una referencia de imagen, como:

  • redis
  • curlimages/curl:7.87.0
  • mcr.microsoft.com/dotnet/runtime:7.0

Si el artefacto que quieres analizar es un directorio OCI, un archivo tarball, un archivo o directorio local, o si deseas controlar desde dónde se resolverá la imagen, debes anteponer la referencia con uno de los siguientes prefijos:

  • image:// (por defecto) utiliza una imagen local o recurre a una búsqueda en el registro
  • local:// utiliza una imagen del almacenamiento de imágenes local (no realiza búsquedas en el registro)
  • registry:// utiliza una imagen de un registro (no utiliza una imagen local)
  • oci-dir:// utiliza un directorio de diseño OCI
  • archive:// utiliza un archivo tarball, como los creados por docker save
  • fs:// utiliza un directorio o archivo local
  • sbom:// archivo SPDX o archivo de atestación in-toto con predicado SPDX o archivo SBOM JSON de syft En el caso del prefijo sbom://, si el archivo no está definido, intentará leerlo de la entrada estándar.

Opciones

OpciónPredeterminadoDescripción
--detailsImprime los detalles en la salida de texto predeterminada
--envNombre del entorno
--epssMuestra las puntuaciones EPSS y organiza los CVE del paquete según su puntuación EPSS
--epss-percentileExcluye los CVE con puntuaciones EPSS inferiores al percentil especificado (de 0 a 1)
--epss-scoreExcluye los CVE con puntuaciones EPSS inferiores al valor especificado (de 0 a 1)
-e, --exit-codeDevuelve el código de salida '2' si se detectan vulnerabilidades
--formatpackagesFormato de salida del informe de vulnerabilidades generado:
- packages: salida predeterminada, texto plano con vulnerabilidades agrupadas por paquetes
- sarif: salida JSON Sarif
- spdx: salida JSON SPDX
- gitlab: salida JSON GitLab
- markdown: salida markdown (incluyendo algunas etiquetas HTML como secciones desplegables)
- sbom: salida JSON SBOM
--ignore-baseFiltra y excluye los CVE introducidos desde la imagen base
--ignore-suppressedFiltra los CVE que se encuentran en las excepciones de Scout según el alcance de excepción especificado
--locationsImprime las ubicaciones de los paquetes, incluyendo las rutas de archivos y el diff_id de la capa
--multi-stageMuestra los paquetes de las construcciones Docker multi-etapa
--only-baseSolo muestra los CVE introducidos por la imagen base
--only-cisa-kevFiltra por los CVE listados en el catálogo CISA KEV
--only-cve-idLista separada por comas de IDs de CVE (como CVE-2021-45105) a buscar
--only-fixedFiltra por CVE que tienen solución
--only-metricLista separada por comas de métricas CVSS (como AV:N o PR:L) para filtrar los CVE
--only-packageExpresiones regulares separadas por comas para filtrar paquetes
--only-package-typeLista separada por comas de tipos de paquetes (como apk, deb, rpm, npm, pypi, golang, etc.)
--only-severityLista separada por comas de severidades (critical, high, medium, low, unspecified) para filtrar los CVE
--only-stageLista separada por comas de nombres de etapas de construcción Docker multi-etapa
--only-unfixedFiltra por CVE que no tienen solución
--only-vex-affectedFiltra los CVE mediante declaraciones VEX con estado no afectado
--only-vuln-packagesCuando se usa con --format=only-packages, ignora los paquetes que no tienen vulnerabilidades
--orgEspacio de nombres de la organización de Docker
-o, --outputEscribe el informe en un archivo
--platformPlataforma de la imagen a analizar
--refReferencia a usar si el archivo tarball proporcionado contiene varias referencias.
Solo se puede usar con archive
--vex-author[<.*@docker.com>]Lista de autores de declaraciones VEX a aceptar
--vex-locationUbicación de archivo del directorio o archivo que contiene declaraciones VEX

Ejemplos

Mostrar las vulnerabilidades agrupadas por paquete

$ docker scout cves alpine
Analyzing image alpine
✓ Image stored for indexing
✓ Indexed 18 packages
✓ No vulnerable package detected

Mostrar las vulnerabilidades de un archivo tarball de docker save

$ docker save alpine > alpine.tar

$ docker scout cves archive://alpine.tar
Analyzing archive alpine.tar
✓ Archive read
✓ SBOM of image already cached, 18 packages indexed
✓ No vulnerable package detected

Mostrar las vulnerabilidades de un directorio OCI

$ skopeo copy --override-os linux docker://alpine oci:alpine

$ docker scout cves oci-dir://alpine
Analyzing OCI directory alpine
✓ OCI directory read
✓ Image stored for indexing
✓ Indexed 19 packages
✓ No vulnerable package detected

Mostrar las vulnerabilidades del directorio actual

$ docker scout cves fs://.

Exportar las vulnerabilidades a un archivo JSON SARIF

$ docker scout cves --format sarif --output alpine.sarif.json alpine
Analyzing image alpine
✓ SBOM of image already cached, 18 packages indexed
✓ No vulnerable package detected
✓ Report written to alpine.sarif.json

Mostrar la salida en formato markdown

El siguiente ejemplo muestra cómo generar el informe de vulnerabilidades en markdown.

$ docker scout cves --format markdown alpine
✓ Pulled
✓ SBOM of image already cached, 19 packages indexed
✗ Detected 1 vulnerable package with 3 vulnerabilities
<h2>:mag: Vulnerabilities of <code>alpine</code></h2>

<details open="true"><summary>:package: Image Reference</strong> <code>alpine</code></summary>
<table>
<tr><td>digest</td><td><code>sha256:e3bd82196e98898cae9fe7fbfd6e2436530485974dc4fb3b7ddb69134eda2407</code></td><tr><tr><td>vulnerabilities</td><td><img alt="critical: 0" src="https://img.shields.io/badge/critical-0-lightgrey"/> <img alt="high: 0" src="https://img.shields.io/badge/high-0-lightgrey"/> <img alt="medium: 2" src="https://img.shields.io/badge/medium-2-fbb552"/> <img alt="low: 0" src="https://img.shields.io/badge/low-0-lightgrey"/> <img alt="unspecified: 1" src="https://img.shields.io/badge/unspecified-1-lightgrey"/></td></tr>
<tr><td>platform</td><td>linux/arm64</td></tr>
<tr><td>size</td><td>3.3 MB</td></tr>
<tr><td>packages</td><td>19</td></tr>
</table>
</details></table>
</details>
...

Listar todos los paquetes vulnerables de un tipo determinado

El siguiente ejemplo muestra cómo generar una lista de paquetes, incluyendo únicamente los paquetes del tipo especificado y mostrando solo los paquetes que son vulnerables.

$ docker scout cves --format only-packages --only-package-type golang --only-vuln-packages golang:1.18.0
✓ Pulled
✓ SBOM of image already cached, 296 packages indexed
✗ Detected 1 vulnerable package with 40 vulnerabilities

Name   Version   Type         Vulnerabilities
───────────────────────────────────────────────────────────
stdlib  1.18     golang     2C    29H     8M     1L

Mostrar la puntuación EPSS (--epss)

La bandera --epss añade puntuaciones del Exploit Prediction Scoring System (EPSS) a la salida de docker scout cves. Las puntuaciones EPSS son estimaciones de la probabilidad de que una vulnerabilidad de software sea explotada activamente en los próximos 30 días. Cuanto mayor sea la puntuación, mayor será la probabilidad de que se explote la vulnerabilidad.

$ docker scout cves --epss nginx
 ✓ Provenance obtained from attestation
 ✓ SBOM obtained from attestation, 232 packages indexed
 ✓ Pulled
 ✗ Detected 23 vulnerable packages with a total of 39 vulnerabilities

...

 ✗ HIGH CVE-2023-52425
   https://scout.docker.com/v/CVE-2023-52425
   Affected range  : >=2.5.0-1
   Fixed version   : not fixed
   EPSS Score      : 0.000510
   EPSS Percentile : 0.173680
  • EPSS Score es un número de punto flotante entre 0 y 1 que representa la probabilidad de explotación activa en los próximos 30 días (siguientes a la publicación de la puntuación).
  • EPSS Percentile es el percentil de la puntuación actual, es decir, la proporción de todas las vulnerabilidades puntuadas con una puntuación EPSS igual o inferior.

Puedes utilizar las banderas --epss-score y --epss-percentile para filtrar la salida de docker scout cves basándote en estas puntuaciones. Por ejemplo, para mostrar únicamente las vulnerabilidades con una puntuación EPSS superior a 0.5:

$ docker scout cves --epss --epss-score 0.5 nginx
 ✓ SBOM of image already cached, 232 packages indexed
 ✓ EPSS scores for 2024-03-01 already cached
 ✗ Detected 1 vulnerable package with 1 vulnerability

...

 ✗ LOW CVE-2023-44487
   https://scout.docker.com/v/CVE-2023-44487
   Affected range  : >=1.22.1-9
   Fixed version   : not fixed
   EPSS Score      : 0.705850
   EPSS Percentile : 0.979410

Las puntuaciones EPSS se actualizan a diario. Por defecto, se muestra la última puntuación disponible. Puedes usar la bandera --epss-date para especificar manualmente una fecha en el formato aaaa-mm-dd para obtener las puntuaciones EPSS.

$ docker scout cves --epss --epss-date 2024-01-02 nginx

Listar vulnerabilidades a partir de un archivo SPDX

El siguiente ejemplo muestra cómo generar una lista de vulnerabilidades a partir de un archivo SPDX usando syft.

$ syft -o spdx-json alpine:3.16.1 | docker scout cves sbom://
 ✔ Pulled image
 ✔ Loaded image                                                                                                                              alpine:3.16.1
 ✔ Parsed image                                                                    sha256:3d81c46cd8756ddb6db9ec36fa06a6fb71c287fb265232ba516739dc67a5f07d
 ✔ Cataloged contents                                                                     274a317d88b54f9e67799244a1250cad3fe7080f45249fa9167d1f871218d35f
   ├── ✔ Packages                        [14 packages]
   ├── ✔ File digests                    [75 files]
   ├── ✔ File metadata                   [75 locations]
   └── ✔ Executables                     [16 executables]
    ✗ Detected 2 vulnerable packages with a total of 11 vulnerabilities