docker scout cves
| Descripción | Muestra los CVE identificados en un artefacto de software |
|---|---|
| Uso | docker 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:
rediscurlimages/curl:7.87.0mcr.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 registrolocal://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 OCIarchive://utiliza un archivo tarball, como los creados pordocker savefs://utiliza un directorio o archivo localsbom://archivo SPDX o archivo de atestación in-toto con predicado SPDX o archivo SBOM JSON desyftEn el caso del prefijosbom://, si el archivo no está definido, intentará leerlo de la entrada estándar.
Opciones
| Opción | Predeterminado | Descripción |
|---|---|---|
--details | Imprime los detalles en la salida de texto predeterminada | |
--env | Nombre del entorno | |
--epss | Muestra las puntuaciones EPSS y organiza los CVE del paquete según su puntuación EPSS | |
--epss-percentile | Excluye los CVE con puntuaciones EPSS inferiores al percentil especificado (de 0 a 1) | |
--epss-score | Excluye los CVE con puntuaciones EPSS inferiores al valor especificado (de 0 a 1) | |
-e, --exit-code | Devuelve el código de salida '2' si se detectan vulnerabilidades | |
--format | packages | Formato 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-base | Filtra y excluye los CVE introducidos desde la imagen base | |
--ignore-suppressed | Filtra los CVE que se encuentran en las excepciones de Scout según el alcance de excepción especificado | |
--locations | Imprime las ubicaciones de los paquetes, incluyendo las rutas de archivos y el diff_id de la capa | |
--multi-stage | Muestra los paquetes de las construcciones Docker multi-etapa | |
--only-base | Solo muestra los CVE introducidos por la imagen base | |
--only-cisa-kev | Filtra por los CVE listados en el catálogo CISA KEV | |
--only-cve-id | Lista separada por comas de IDs de CVE (como CVE-2021-45105) a buscar | |
--only-fixed | Filtra por CVE que tienen solución | |
--only-metric | Lista separada por comas de métricas CVSS (como AV:N o PR:L) para filtrar los CVE | |
--only-package | Expresiones regulares separadas por comas para filtrar paquetes | |
--only-package-type | Lista separada por comas de tipos de paquetes (como apk, deb, rpm, npm, pypi, golang, etc.) | |
--only-severity | Lista separada por comas de severidades (critical, high, medium, low, unspecified) para filtrar los CVE | |
--only-stage | Lista separada por comas de nombres de etapas de construcción Docker multi-etapa | |
--only-unfixed | Filtra por CVE que no tienen solución | |
--only-vex-affected | Filtra los CVE mediante declaraciones VEX con estado no afectado | |
--only-vuln-packages | Cuando se usa con --format=only-packages, ignora los paquetes que no tienen vulnerabilidades | |
--org | Espacio de nombres de la organización de Docker | |
-o, --output | Escribe el informe en un archivo | |
--platform | Plataforma de la imagen a analizar | |
--ref | Referencia 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-location | Ubicació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 Scorees 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 Percentilees 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