# 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:

- `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ó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<br> |

 | `--epss-percentile` |  |  Excluye los CVE con puntuaciones EPSS inferiores al percentil especificado (de 0 a 1)<br> |

 | `--epss-score` |  |  Excluye los CVE con puntuaciones EPSS inferiores al valor especificado (de 0 a 1)<br> |

 | `-e`, `--exit-code` |  |  Devuelve el código de salida '2' si se detectan vulnerabilidades |

 | `--format` | `packages` |  Formato de salida del informe de vulnerabilidades generado:<br>- packages: salida predeterminada, texto plano con vulnerabilidades agrupadas por paquetes<br>- sarif: salida JSON Sarif<br>- spdx: salida JSON SPDX<br>- gitlab: salida JSON GitLab<br>- markdown: salida markdown (incluyendo algunas etiquetas HTML como secciones desplegables)<br>- 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<br> |

 | `--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<br> |

 | `--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<br> |

 | `--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.)<br> |

 | `--only-severity` |  |  Lista separada por comas de severidades (critical, high, medium, low, unspecified) para filtrar los CVE<br> |

 | `--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<br> |

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

```console
$ 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`

```console
$ 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

```console
$ 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

```console
$ docker scout cves fs://.
```

### Exportar las vulnerabilidades a un archivo JSON SARIF

```console
$ 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.

```console
$ 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.

```console
$ 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) {#epss}

La bandera `--epss` añade puntuaciones del [Exploit Prediction Scoring System (EPSS)](https://www.first.org/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.

```console {hl_lines="13,14"}
$ 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:

```console
$ 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.

```console
$ 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`.

```console
$ 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



