Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
DockSec — Escáner de seguridad de Docker impulsado por IA que explica las vulnerabilidades en un lenguaje sencillo. Un proyecto de laboratorio de OWASP. | Kitploit
Herramientas/GitHubGitHub/owasp/docksec
Análisis EstáticoEscáneres de VulnerabilidadesSeguridad de ContenedoresAnálisis de CódigoDevSecOpsSeguridad de Cadena de SuministroAprendizaje y EducaciónSeguridad de IA
GitHubowasp/docksec

DockSec

Escáner de seguridad de Docker impulsado por IA que explica las vulnerabilidades en un lenguaje sencillo. Un proyecto de laboratorio de OWASP.

Ver Repositorio
46590106hace 15 díasRevisado por Kitploit
Sitio web

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
<div align="center">

[![OWASP](https://img.shields.io/badge/Lab-blue?&label=level&style=for-the-badge)](https://owasp.org/DockSec/) [![OWASP](https://img.shields.io/badge/Code-blue?label=type&style=for-the-badge)](https://owasp.org/DockSec/) [![project-docksec](https://img.shields.io/badge/%23project--docksec-blue?label=slack&logoColor=white&style=for-the-badge)](https://owasp.slack.com/archives/C0APXGCUW7M) [![Build Status](https://img.shields.io/github/actions/workflow/status/OWASP/DockSec/python-app.yml?branch=main&style=for-the-badge&label=Build&color=blue)](https://github.com/OWASP/DockSec/actions)
<br>[![OpenSSF Best Practices](https://img.shields.io/cii/level/12939?label=openssf%20best%20practices&style=for-the-badge)](https://www.bestpractices.dev/projects/12939)


[![License](https://img.shields.io/badge/license-MIT-blue?style=for-the-badge)](https://github.com/OWASP/DockSec/blob/main/LICENSE) [![Last Commit](https://img.shields.io/github/last-commit/OWASP/DockSec/main?color=blue&style=for-the-badge&label=Last%20commit)](https://github.com/OWASP/DockSec/commits/main/) [![Contributors](https://img.shields.io/github/contributors/OWASP/DockSec?style=for-the-badge&label=Contributors&color=blue)](https://github.com/OWASP/DockSec/graphs/contributors)

[![Forks](https://img.shields.io/github/forks/OWASP/DockSec?style=for-the-badge&label=Forks&color=blue)](https://github.com/OWASP/DockSec/network/members) [![Stars](https://img.shields.io/github/stars/OWASP/DockSec?style=for-the-badge&label=Stars&color=blue)](https://github.com/OWASP/DockSec/stargazers) ![PyPI Downloads](https://img.shields.io/pepy/dt/docksec?style=for-the-badge&color=blue)

[![Issues](https://img.shields.io/github/issues/OWASP/DockSec?color=blue&style=for-the-badge&label=Issues)](https://github.com/OWASP/DockSec/issues) [![Pull Requests](https://img.shields.io/github/issues-pr/OWASP/DockSec?color=blue&style=for-the-badge&label=Pull%20Requests)](https://github.com/OWASP/DockSec/pulls)

[![CREATED](https://img.shields.io/badge/created-feb,%202025-blue?style=for-the-badge)](https://github.com/OWASP/DockSec/commit/80664db8935e4b5ab44df5867913e)

<picture>
  <source srcset="https://raw.githubusercontent.com/OWASP/DockSec/main/images/docksec-logo-for-github.png" media="(prefers-color-scheme: dark)">
  <img src="https://assets.kitploit.com/production/public/readmes/39487/d30ee74abf3ad22a447ed36ba3010acab606147bc21702a1fb428b8633298caf.png" alt="DockSec Logo" width="600">
</picture><br>
<img src="https://assets.kitploit.com/production/public/readmes/39487/009ae678c48ab2738e17c17c238c83cb2481510fbc2bf9d7284ea80ec487feda.png" alt="OWASP Logo" width="300">

# [DockSec](https://owasp.org/DockSec/)

**Escáner de seguridad Docker impulsado por IA que explica las vulnerabilidades en lenguaje sencillo**

</div>

---

## ¿Qué es DockSec?

DockSec es un **Proyecto de Laboratorio de OWASP** que tiende un puente entre los complejos resultados de los escaneos de seguridad y las correcciones prácticas para los desarrolladores. Integra escáneres estándar de la industria (Trivy, Hadolint, Docker Scout) con IA para proporcionar **análisis de seguridad consciente del contexto**.

En lugar de abrumarte con una lista de más de 200 CVE, DockSec:

- **Prioriza** lo que realmente afecta a tu configuración específica de contenedores.
- **Explica** las vulnerabilidades en lenguaje sencillo, no solo con jerga de seguridad.
- **Sugiere** correcciones específicas para tu Dockerfile.
- **Genera** informes de seguridad profesionales e interactivos para tu equipo.

Todo se escanea localmente; lo único que sale de tu máquina es el contenido del archivo (con secretos censurados) enviado al proveedor de IA que elijas, y con un modelo local o el modo de solo escaneo, no sale nada en absoluto. Consulta [Flujo de datos y privacidad](#data-flow-and-privacy).

---

## Cómo funciona

<div align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/39487/99b4247f599cc8f7a260f285815f8793ca4d2c050ea6656480818a846d590fb0.png" alt="DockSec Workflow" width="800">
  <p><em>Flujo de trabajo de DockSec: del escaneo a información procesable</em></p>
</div>

DockSec sigue un flujo de cinco etapas:

1. **Escanear**: Ejecuta Trivy (vulnerabilidades de imágenes y configuraciones incorrectas de Dockerfile),
   Hadolint y Docker Scout localmente en tu entorno.
2. **Priorizar**: Clasifica cada hallazgo de CVE por gravedad combinada con su
   probabilidad de explotación [EPSS](https://www.first.org/epss/), de modo que la lista
   se ordena por lo que hay que corregir primero en lugar de por lo que se encontró primero.
3. **Correlacionar**: Detecta [cadenas de explotación](https://github.com/owasp/docksec/blob/main/docs/exploit-chains.md) donde hallazgos
   separados se combinan en una única ruta de ataque: una base de datos con credenciales a la que
   puede acceder un servicio expuesto a internet es una cadena, no dos hallazgos no relacionados.
   Con una clave de API, una pasada de IA razona sobre la salida completa del escaneo para clasificar, explicar
   y ampliar esto.
4. **Recomendar**: Produce comandos de corrección para copiar y ejecutar y cambios concretos en el Dockerfile o
   en el compose, e indica cuántos hallazgos resuelven.
5. **Informar**: Exporta resultados procesables como HTML, PDF, JSON, CSV, Markdown, SARIF y CycloneDX SBOM.

---

## Primeros pasos

### 1. Requisitos previos

DockSec orquesta escáneres locales, por lo que necesita:

| Requisito | Necesario para | Instalación |
|---|---|---|
| Python 3.12+ | DockSec en sí | [python.org](https://www.python.org/downloads/) |
| Trivy | Todos los escaneos (obligatorio) | `brew install trivy` o [Trivy docs](https://trivy.dev/latest/getting-started/installation/) |
| Hadolint | Linting de Dockerfile | `brew install hadolint` o [Hadolint docs](https://github.com/hadolint/hadolint#install) |
| Docker | Escaneos de imágenes (`-i`) | [Docker docs](https://docs.docker.com/get-docker/) |

O deja que DockSec instale Trivy y Hadolint por ti:```bash
python -m docksec.setup_external_tools
```
### 2. Instalar DockSec```bash
# Full install with AI analysis support (recommended)
pip install "docksec[ai]"

# Or the slim, scan-only core (no LLM dependencies, no API key needed)
pip install docksec
```
### 3. Ejecuta tu primer escaneo

No se necesita clave API para el escaneo local:```bash
docksec Dockerfile --scan-only
```
Cada escaneo termina con un resumen de resultados: una tabla de severidad, una puntuación de seguridad de 0 a 100 con una
calificación, un bloque de acción "Quick take", los informes generados (guardados en
`~/.docksec/results/` por defecto), y un comando siguiente sugerido.

### 4. Habilitar el análisis de IA

El análisis de IA explica los hallazgos y sugiere correcciones. Elige un proveedor, configura su clave de API y ejecuta:```bash
# OpenAI (default provider)
export OPENAI_API_KEY="sk-..."
docksec Dockerfile

# Anthropic Claude
export ANTHROPIC_API_KEY="sk-ant-..."
docksec Dockerfile --ai-only --provider anthropic --model claude-sonnet-5

# Google Gemini
export GOOGLE_API_KEY="..."
docksec Dockerfile --ai-only --provider google

# Ollama (fully local, no API key, data never leaves your machine)
docksec Dockerfile --ai-only --provider ollama --model llama3.1
```
Cada proveedor tiene un modelo predeterminado razonable (OpenAI: `gpt-4o`, Anthropic:
`claude-haiku-4-5`, Google: `gemini-1.5-pro`, Ollama: `llama3.1`), por lo que `--model` es
opcional. Para evitar repetir flags, establece variables de entorno (o colócalas en un archivo `.env`
en el directorio desde el que ejecutas - DockSec lo carga automáticamente):```bash
export LLM_PROVIDER=anthropic
export LLM_MODEL=claude-sonnet-5
docksec Dockerfile
```
Antes de que se envíe cualquier contenido a un proveedor de IA, los valores que parecen secretos (contraseñas, tokens, claves de API, bloques de claves privadas) se enmascaran automáticamente. Consulta
[Flujo de datos y privacidad](#data-flow-and-privacy).

### 5. O ejecuta la imagen del contenedor (nada que instalar)

La imagen publicada incluye versiones fijadas de Trivy y Hadolint, por lo que no hay
nada que instalar ni nada que configurar:```bash
docker run --rm -v "$PWD:/github/workspace" \
  -e INPUT_DOCKERFILE=Dockerfile \
  -e INPUT_SCAN_ONLY=true \
  ghcr.io/owasp/docksec:latest
```
Publicado multi-arquitectura (amd64 y arm64) en cada release. Fija una versión
específica (`ghcr.io/owasp/docksec:2026.9.21`) o una serie menor
(`ghcr.io/owasp/docksec:2026.9`) en lugar de `latest` en CI. Cada imagen incluye
una atestación de procedencia de compilación:```bash
gh attestation verify oci://ghcr.io/owasp/docksec:latest --repo OWASP/DockSec
```
La imagen lee las mismas variables `INPUT_*` que la GitHub Action, por lo que cualquier entrada de la Action funciona aquí: `INPUT_IMAGE`, `INPUT_COMPOSE`, `INPUT_SEVERITY`, `INPUT_FAIL_ON`, `INPUT_FORMAT`, `INPUT_SARIF`, `INPUT_OUTPUT_DIR`. Escribe los informes en algún lugar del montaje para conservarlos después de que el contenedor finalice:```bash
docker run --rm -v "$PWD:/github/workspace" \
  -e INPUT_COMPOSE=docker-compose.yml \
  -e INPUT_SCAN_ONLY=true \
  -e INPUT_FORMAT=json,html \
  -e INPUT_OUTPUT_DIR=/github/workspace/docksec-reports \
  ghcr.io/owasp/docksec:latest
```
### 6. O usa la GitHub Action```yaml
- name: Run DockSec AI Scanner
  uses: OWASP/[email protected]
  with:
    dockerfile: 'Dockerfile'
    openai_api_key: ${{ secrets.OPENAI_API_KEY }}
```
---

## Comandos comunes```bash
# Scan Dockerfile + Docker image (AI + scanners)
docksec Dockerfile -i myapp:latest

# Scan a Docker Compose file and all its services
docksec --compose docker-compose.yml

# Scan only a Docker image
docksec --image-only -i myapp:latest

# Fast local scan, no AI, no API key
docksec Dockerfile --scan-only

# Choose which severity levels the image scan reports (default: CRITICAL,HIGH)
docksec -i myapp:latest --image-only --severity CRITICAL,HIGH,MEDIUM

# Fail the build (exit 1) if any finding is HIGH or above
docksec -i myapp:latest --image-only --fail-on high

# Write only the report formats you want, to a directory of your choice
docksec Dockerfile --scan-only --format json,html --output-dir ./reports

# Write a Markdown report for posting directly into a pull request comment
docksec Dockerfile --scan-only --format markdown

# Print results as JSON to stdout for scripts and CI pipelines
docksec -i myapp:latest --image-only --json

# Write a SARIF report for GitHub Code Scanning
docksec Dockerfile --scan-only --sarif

# Write a CycloneDX SBOM of an image for supply-chain tooling
docksec --image-only -i myapp:latest --sbom

# Fully offline scan: local Trivy DB, no network, no AI
docksec --image-only -i myapp:latest --offline

# Save today's findings as a baseline, then only gate on new findings later
docksec -i myapp:latest --image-only --baseline .docksec-baseline.json --update-baseline
docksec -i myapp:latest --image-only --baseline .docksec-baseline.json --fail-on high

# Suppress triaged findings with an auditable ignore file
docksec -i myapp:latest --image-only --ignore-file .docksec-ignore.yml

# Force a fresh scan, bypassing the results cache
docksec -i myapp:latest --image-only --no-cache

# Install AI-assistant skill files (Claude Code, Cursor, Copilot, and more)
docksec install-skill

# Output control
docksec Dockerfile --scan-only --quiet                  # warnings, errors, summary only
docksec Dockerfile --scan-only --verbose                # INFO-level diagnostics on stderr
docksec Dockerfile --scan-only --verbose --log-file logs/docksec.log
docksec Dockerfile --scan-only --compact-output         # shorter per-finding output
docksec Dockerfile --no-color                           # also honors NO_COLOR

# Apply the mechanical Dockerfile fixes (keeps a .bak, re-scans, shows the delta)
docksec Dockerfile --scan-only --fix --dry-run          # print the diff, change nothing
docksec Dockerfile --scan-only --fix

# Rank findings by severity alone, with no EPSS lookup and no network call
docksec Dockerfile --scan-only --no-epss

# Treat a scan that could not complete as a failure, not a pass
docksec Dockerfile --scan-only --fail-on high --incomplete-policy fail
```
---

## Archivo de configuración

Confirma un `.docksec.yml` en la raíz de tu repositorio y todo el equipo - y
cada trabajo de CI - escanea bajo la misma política, en lugar de que cada desarrollador pase
sus propias banderas.```yaml
# yaml-language-server: $schema=https://owasp.org/DockSec/docksec-config-schema.json
severity: CRITICAL,HIGH
fail_on: HIGH
formats: [json, html]
output_dir: ./security-reports

rules:
  disabled:
    - compose-missing-healthcheck
```
Cada ajuste es opcional; cualquier valor que omita recurre a la variable de entorno y luego al valor predeterminado integrado. En [`examples/.docksec.yml`](https://github.com/owasp/docksec/blob/main/examples/.docksec.yml) se encuentra un ejemplo completo anotado.

### Precedencia

Mayor prioridad primero:```
CLI flag  >  environment variable  >  .docksec.yml  >  built-in default
```
Así, un `severity: LOW` confirmado sigue siendo anulado por `--severity CRITICAL` en
la línea de comandos, y por `DOCKSEC_DEFAULT_SEVERITY` en el entorno.

### Descubrimiento

DockSec busca `.docksec.yml` (o `.docksec.yaml`) en el directorio de trabajo
y luego sube hasta la raíz del repositorio, de modo que un servicio en un subdirectorio
de un monorepo hereda la política confirmada en el nivel superior. La búsqueda se detiene en
el directorio que contiene `.git`, por lo que nunca toma un archivo de fuera del
repositorio.

- `--config FILE` usa un archivo específico en lugar de buscar.
- `--no-config` ignora cualquier archivo de configuración, para ejecuciones de CI reproducibles.

El archivo de configuración en vigor se muestra en el banner del escaneo, por lo que siempre queda claro
qué política se aplicó.

### Ajustes

| Ajuste | Bandera equivalente | Notas |
| --- | --- | --- |
| `severity` | `--severity` | Niveles de severidad para el escaneo de la imagen |
| `fail_on` | `--fail-on` | Umbral de la compuerta de CI |
| `formats` | `--format` | Forma de lista: `[json, html]` |
| `output_dir` | `--output-dir` | Destino del informe |
| `provider` | `--provider` | `openai`, `anthropic`, `google`, `ollama` |
| `model` | `--model` | Nombre del modelo para el proveedor |
| `offline` | `--offline` | Sin red; omite la IA y Docker Scout |
| `skip_ai_scoring` | `--skip-ai-scoring` | Obsoleto e ignorado; la puntuación siempre es determinista |
| `no_redact` | `--no-redact` | No enmascarar secretos antes de la llamada a la IA |
| `no_cache` | `--no-cache` | Omitir la caché de escaneo |
| `ignore_file` | `--ignore-file` | Ruta del archivo de exenciones |
| `baseline` | `--baseline` | Ruta del archivo de línea base |
| `rules.disabled` | - | IDs de reglas para desactivar por completo |

Un archivo de configuración inválido - una clave desconocida, una severidad incorrecta - es un error grave que
sale con `2` en lugar de una advertencia, por lo que un archivo de política roto nunca puede provocar que un escaneo
se ejecute bajo reglas que el equipo no confirmó.

### Autocompletado del editor

El comentario `# yaml-language-server:` en la primera línea proporciona autocompletado y
validación en línea en los editores VS Code y JetBrains. El esquema se publica en
[`docs/docksec-config-schema.json`](https://github.com/owasp/docksec/blob/main/docs/docksec-config-schema.json) y se puede
regenerar con `docksec --print-config-schema`.

### Desactivación de reglas

`rules.disabled` desactiva una comprobación por completo, en todas partes - se elimina
antes de la puntuación, los informes, `--json` y la compuerta `--fail-on`. Úsalo para comprobaciones
que no se aplican a tu entorno. Para hallazgos individuales que tu equipo ha
triado y aceptado, prefiere el [archivo de exenciones](#ignoring-findings-waivers),
cuyas entradas llevan un motivo y una fecha de caducidad y por lo tanto siguen siendo auditables.

---

## Integración CI/CD

### Códigos de salida

DockSec usa códigos de salida compatibles con CI para que las compilaciones y los shells puedan reaccionar a los resultados:

| Código | Significado |
|---|---|
| `0` | Éxito, sin hallazgos en o por encima de `--fail-on` |
| `1` | Hallazgos en o por encima del umbral `--fail-on` |
| `2` | Error de uso o de argumentos |
| `3` | Error de herramienta o de tiempo de ejecución (escaneo fallido, imagen no encontrada, herramientas faltantes) |

`--fail-on` controla cada hallazgo estructurado: vulnerabilidades de la imagen, malas configuraciones del Dockerfile
y malas configuraciones de compose. Cuando `--fail-on` está por debajo de la
`--severity` solicitada, la severidad del escaneo se amplía automáticamente para que la compuerta pueda
observar esos hallazgos.

### Escaneos incompletos

Si un escáner no puede ejecutarse, los resultados pueden carecer de hallazgos en lugar de estar genuinamente
limpios. DockSec informa eso como una brecha de detección en el bloque Coverage y en
`--json` bajo `scan_info.completeness`. Usa `--incomplete-policy fail` para salir con `3`
en ese caso, para que CI no pueda pasar en un escaneo que no terminó:```bash
docksec Dockerfile --incomplete-policy fail
```
### Prioridad: qué corregir primero

Cada hallazgo de CVE se puntúa según [EPSS](https://www.first.org/epss/), que
estima la probabilidad de que se explote en los próximos 30 días. Combinando eso
con la severidad se obtienen cuatro niveles:

| Nivel | Significado |
|---|---|
| **Corregir ahora** | Severidad crítica o alta, y en el top 10% de CVE por probabilidad de explotación |
| **Corregir pronto** | Severidad crítica o alta, pero la explotación es menos común |
| **Monitorizar** | Severidad más baja, pero explotado activamente |
| **Baja prioridad** | Severidad más baja, explotación poco común |

Esta es la única llamada de red que hace DockSec fuera de la pasada de IA, y es
deliberadamente limitada: **solo se envían los ID de CVE** - sin nombres de imágenes, sin contenido de archivos,
sin rutas. Las puntuaciones se almacenan en caché durante 24 horas. `--offline` y `--no-epss` lo desactivan,
y cualquier fallo recurre a una clasificación basada solo en la severidad en lugar de hacer fallar el escaneo.

### Cadenas de explotación

Una vista por servicio informa los hallazgos uno a uno. DockSec también informa dónde
se combinan hallazgos separados en una única ruta de ataque:```text
Exploit chains
  [HIGH] 'web' is internet-facing and can reach 'db' with a committed credential
      services: web, db
      combines: compose-plaintext-secret-env, compose-no-network-segmentation
      'web' accepts connections from outside the host and shares the default
      network with 'db'. 'db' is not exposed directly, but its credential is in
      the compose file, so compromising 'web' yields authenticated access to it.
      Neither service looks critical on its own.
      break it: Put 'db' on its own network that 'web' does not join, or move
      POSTGRES_PASSWORD to a Docker secret.
```
La detección de cadenas está basada en reglas, por lo que funciona con `--scan-only`, sin conexión y sin clave de API, y devuelve la misma respuesta en cada ejecución. La pasada de IA las clasifica y las amplía en lugar de ser necesaria para ello. Las cadenas también aparecen en `--json` bajo `exploit_chains`.

Consulta la [guía de cadenas de explotación](https://github.com/owasp/docksec/blob/main/docs/exploit-chains.md) para ver la lista completa y la [referencia de reglas de composición](https://github.com/owasp/docksec/blob/main/docs/rules/README.md) para cada regla que combinan.

### Comandos de corrección

Los escaneos terminan con comandos concretos en lugar de una lista de identificadores, y una declaración simple de cuántos hallazgos resuelven:```text
Fix commands
  > apt-get install --only-upgrade -y libgnutls30=3.7.9-2+deb12u7
      CRITICAL - 3.7.9-2+deb12u4 -> 3.7.9-2+deb12u7  (CVE-2026-33845 +6)

Dockerfile changes
  - [CRITICAL] Move the secret out of ENV; inject it at runtime (line 4)
  - [HIGH] Add a non-root USER before CMD/ENTRYPOINT (line 7)

Applying all of the above resolves 37 of 93 finding(s); 56 have no mechanical fix yet.
```
### Salida legible por máquina

`--json` imprime un único objeto JSON en stdout (información del escaneo, vulnerabilidades, recuentos de severidad y cualquier hallazgo de IA) en lugar del resumen legible por humanos, por lo que puede canalizarse directamente a otras herramientas:```bash
docksec -i myapp:latest --image-only --json | jq '.severity_counts'
```
Con `--json` solo, no se escriben archivos de informe; combínalo con `--format` para escribir
archivos e imprimir JSON en la misma ejecución. Todos los mensajes legibles por humanos se mueven a stderr en
modo `--json`, por lo que stdout solo contiene la carga útil JSON.

### Formatos de informe

`--format` acepta una lista separada por comas de salidas de archivo:

| Formato | Qué obtienes |
|--------|----------------|
| `json` | Un archivo `.json` con metadatos del escaneo, recuentos de severidad y la lista completa de vulnerabilidades (misma estructura que la carga útil de stdout de `--json`, pero escrita en disco). |
| `csv` | Una tabla `.csv` de hallazgos (ID, severidad, paquete, versión, título y campos relacionados). |
| `pdf` | Un resumen en PDF imprimible con información del escaneo, puntuaciones y detalles de vulnerabilidades. |
| `html` | Un informe HTML con estilos para explorar los resultados en un navegador. |
| `markdown` | Un informe `.md` que se renderiza de forma nativa en comentarios de pull request y resúmenes de trabajos de CI. Opcional: no se escribe a menos que se solicite. |

`json`, `csv`, `pdf` y `html` se escriben por defecto; añade `markdown` explícitamente para
obtenerlo.

**CSV con cero hallazgos:** si un escaneo no reporta vulnerabilidades pero `csv` está en tu
lista de `--format`, DockSec igualmente escribe un archivo CSV que contiene solo los encabezados de columna.
Eso es intencional (la exportación es válida, no una escritura fallida) para que las herramientas posteriores puedan
confiar en un esquema estable incluso en escaneos limpios.

Para JSON en stdout y canalización a otras herramientas, consulta [Salida legible por máquina](#machine-readable-output)
arriba. Para CI y GitHub Code Scanning, usa `--sarif` (consulta la siguiente sección); SARIF es
independiente de `--format` y siempre se emite cuando se solicita.

### Salida SARIF para GitHub Code Scanning

`--sarif` escribe un informe SARIF 2.1.0 junto con los demás formatos de informe. Súbelo
con la acción estándar `github/codeql-action/upload-sarif` para ver los hallazgos anotados
directamente en pull requests y en la pestaña Security:```yaml
- name: Run DockSec
  uses: OWASP/[email protected]
  with:
    dockerfile: 'Dockerfile'
    sarif: 'true'

- name: Upload SARIF to GitHub Code Scanning
  uses: github/codeql-action/upload-sarif@v3
  if: always()
  with:
    sarif_file: ~/.docksec/results
```
> `if: always()` es importante: sin él, el paso de subida se omite siempre que
> `--fail-on` hace que DockSec salga con un código distinto de cero, perdiendo los hallazgos exactamente cuando
> más importan.

### Modo baseline / ratchet

`--baseline FILE` te permite adoptar `--fail-on` en un proyecto existente sin un muro de
hallazgos preexistentes que bloqueen cada compilación. Ejecuta una vez con `--update-baseline` para capturar
los hallazgos actuales, luego confirma el archivo baseline; a partir de entonces, `--fail-on` solo bloquea
los hallazgos que no estén ya en el baseline:```bash
# Snapshot current findings (does not gate)
docksec -i myapp:latest --image-only --baseline .docksec-baseline.json --update-baseline

# Later runs only fail on NEW findings above the threshold
docksec -i myapp:latest --image-only --baseline .docksec-baseline.json --fail-on high
```
Los hallazgos se emparejan por ID de vulnerabilidad, objetivo y nombre de paquete, por lo que la línea base se mantiene
válida a medida que aparecen y desaparecen hallazgos no relacionados. Vuelva a ejecutar con `--update-baseline` siempre que desee
aceptar el estado actual como la nueva línea base.

### Ignorar hallazgos (exenciones)

`--ignore-file FILE` suprime hallazgos individuales que un equipo ha triado y aceptado.
A diferencia de la línea base (una instantánea puntual), el archivo de ignorados es una lista explícita
y revisable donde cada entrada lleva un motivo y una fecha de caducidad opcional.
Si existe un archivo `.docksec-ignore.yml` en el directorio actual, se detecta
automáticamente.```yaml
# .docksec-ignore.yml
ignores:
  - id: CVE-2023-45853              # Trivy vulnerability ID or DockSec rule ID
    reason: "zlib CVE; code path not reachable, vendor fix pending"
    expires: 2026-12-31              # optional; entry stops applying after this date
  - id: compose-missing-healthcheck
    reason: "healthchecks are handled by the orchestrator"
```
Los hallazgos suprimidos se eliminan antes del scoring, los informes, la salida `--json` y la puerta `--fail-on`. Las entradas caducadas dejan de aplicarse automáticamente (con una advertencia), y las entradas sin un motivo se marcan para que las exenciones sigan siendo auditables. Confirma el archivo en el control de versiones para que las supresiones se revisen como cualquier otro cambio.

---

## Informes

### Formatos de informe

Por defecto, cada escaneo escribe cuatro archivos de informe; usa `--format` para elegir un subconjunto:

- **html**: Un informe web interactivo y visualmente limpio: tarjetas de severidad, calificación de puntuación, tabla completa de vulnerabilidades con versiones corregidas y los hallazgos completos de la IA.
- **pdf**: Un documento portátil y listo para presentaciones.
- **json**: Datos de escaneo completos y legibles por máquina (misma estructura que la salida de `--json` por stdout).
- **csv**: Una tabla de vulnerabilidades individuales lista para hoja de cálculo.
- **markdown**: Un informe ligero y legible (resumen de severidad + tabla de vulnerabilidades con versiones corregidas) que se renderiza de forma nativa en los comentarios de pull requests y en los resúmenes de trabajos de CI. Opcional: añade `markdown` a `--format`; no se escribe por defecto.

> Nota sobre el comportamiento de CSV: con cero vulnerabilidades, DockSec sigue escribiendo un
> CSV solo con encabezado (nombres de columnas, sin filas) para que la automatización posterior nunca se rompa por un archivo
> ausente o vacío. Esto es intencional.

### CycloneDX SBOM

`--sbom` escribe un software bill of materials de CycloneDX (`<image>.cdx.json`) de la
imagen escaneada, listando cada componente de paquete más las vulnerabilidades conocidas. El BOM es
producido por el exportador nativo de Trivy (por lo que cumple con la especificación) y DockSec se registra a sí mismo
en los metadatos de la herramienta. Aliméntalo a Dependency-Track, al gráfico de dependencias de GitHub o a cualquier
otro consumidor de SBOM:```bash
docksec --image-only -i myapp:latest --sbom
```
`--sbom` necesita una sola imagen (`-i`), por lo que se omite en las ejecuciones de compose. Al igual que `--sarif`,
es independiente de `--format`.

---

## Flujo de datos y privacidad

DockSec está diseñado para que siempre sepas qué sale de tu máquina:

- **El escaneo es totalmente local.** Trivy, Hadolint y la puntuación de seguridad se ejecutan en tu
  máquina. DockSec nunca sube el contenido de las imágenes a ningún sitio.
- **El análisis con IA solo envía el archivo escaneado.** Cuando se ejecuta la pasada de IA, el contenido del Dockerfile
  o del archivo compose (más un breve resumen de los recuentos de vulnerabilidades para la puntuación)
  se envía al proveedor de LLM que hayas configurado. No se transmite nada más.
- **Los secretos se redactan antes de salir.** Los valores que parecen secretos (contraseñas,
  tokens, claves de API, bloques de claves privadas) en el archivo se enmascaran antes de que el contenido se
  envíe al proveedor de IA. Los nombres de las claves permanecen visibles para que las credenciales expuestas sigan
  siendo señaladas. Usa `--no-redact` para desactivar esto.
- **Se admite IA totalmente local.** Usa `--provider ollama` para mantener el análisis de IA en
  tu propio hardware, o `--scan-only` / `--offline` para omitir la IA por completo.
- **Sin telemetría.** DockSec no recopila datos de uso ni se conecta a nada.

### Modo sin conexión

`--offline` ejecuta un escaneo sin acceso a la red. Usa la base de datos de vulnerabilidades de Trivy
que ya está en disco (sin actualización de la BD) y omite el análisis de IA y el escaneo avanzado de Docker Scout,
ambos de los cuales requieren red. Esta es la forma más sencilla de escanear en un entorno aislado o
restringido:```bash
docksec --image-only -i myapp:latest --offline
```
Asegúrate de que la base de datos de Trivy se haya descargado al menos una vez (cualquier escaneo en línea previo lo hace) antes de confiar en `--offline`.

### Caché de resultados de escaneo

Los resultados de escaneo de imágenes se almacenan en caché (predeterminado: 24 horas, se puede sobrescribir con `DOCKSEC_CACHE_TTL_HOURS`) y se indexan por el digest del contenido de la imagen, por lo que una etiqueta reconstruida como un `:latest` reutilizado siempre obtiene un escaneo nuevo. Usa `--no-cache` (o `DOCKSEC_USE_CACHE=false`) para omitir la caché durante una ejecución.

### Descarga de imágenes que no son locales

Escanear una imagen que no está presente localmente la descarga primero. Un stack de compose habitualmente nombra imágenes que la máquina nunca ha descargado, y sin esto cada uno de esos servicios se reporta como no escaneado.

Establece `DOCKSEC_PULL_MISSING_IMAGES=false` para desactivar esto y fallar en su lugar, lo cual vale la pena hacer en una conexión medida o en un runner compartido. `--offline` nunca descarga, independientemente de esta configuración.

---

## Habilidades de asistente de IA (`install-skill`)

`docksec install-skill` escribe las instrucciones de uso de DockSec en los archivos de contexto conocidos de los asistentes de codificación con IA más populares, para que un asistente que trabaje en tu repositorio sepa cómo invocar DockSec:```bash
docksec install-skill
```
Esto crea o actualiza:

- `.claude/commands/docksec.md` (comando de barra `/docksec` de Claude Code)
- `.cursor/rules/docksec.mdc` (Cursor)
- `AGENTS.md` (Codex CLI), `GEMINI.md` (Gemini CLI)
- `.github/copilot-instructions.md` (GitHub Copilot)

Los archivos son texto plano que puedes revisar y confirmar; no se ejecuta nada. Volver a ejecutar el
comando actualiza la sección de DockSec en su lugar en vez de duplicarla.

---

## Características

- **Análisis inteligente**: la IA explica qué significan las vulnerabilidades para *tu* configuración específica.
- **Compatibilidad con múltiples LLM**: OpenAI, Anthropic Claude, Google Gemini o modelos locales mediante Ollama.
- **Privacidad ante todo**: los valores de los secretos se redactan antes de que cualquier contenido llegue a un proveedor de IA, el escaneo es totalmente local y no hay telemetría.
- **Escaneo de Docker Compose**: detecta configuraciones erróneas a nivel de orquestación y escanea todos los servicios de un archivo compose.
- **Integración profunda**: combina Trivy (vulnerabilidades), Hadolint (linting) y Docker Scout.
- **Puntuación de seguridad**: una puntuación de 0 a 100 con una calificación para hacer seguimiento de tu postura de seguridad a lo largo del tiempo.
- **Formatos variados**: HTML (interactivo), PDF, JSON, CSV, SARIF y CycloneDX SBOM.
- **Listo para CI/CD**: códigos de salida con `--fail-on`, modo baseline/ratchet, exenciones auditables, JSON a stdout y una GitHub Action en el Marketplace.
- **Modo sin conexión**: escanea totalmente aislado de la red (`--offline`) usando la base de datos local de Trivy.
- **Habilidades para asistentes de IA**: `docksec install-skill` enseña a Claude Code, Cursor, Copilot y otros cómo ejecutar DockSec en tu repositorio.

---

## Cómo se compara DockSec

| Capacidad | DockSec | Trivy (independiente) | Snyk Container | Aikido |
|---|---|---|---|---|
| Licencia y coste | Gratis, código abierto (MIT) | Gratis, código abierto (Apache 2.0) | Comercial (nivel gratuito limitado) | Comercial (nivel gratuito limitado) |

---

[Read more](https://github.com/owasp/docksec)
Descargar herramienta