Torna agli aggiornamenti
New releaseSep 11, 2026

mzap v2.2.1

⚡️ Scansione ZAP su più target

Condividi

mzap

mzap è un CLI in Crystal per scansioni ZAP multi-target. Distribuisce i target su uno o più host API ZAP, supporta una modalità attesa opzionale e può esportare report.

Caratteristiche

  • Comandi di scansione: spider, ajaxspider, clientspider (ZAP 2.16+), ascan, pscan
  • Importazione di definizioni API per openapi, soap, graphql e postman
  • Esportazione/potatura dell'albero dei siti (sitestree export/prune) per scansioni differenziali/incrementali in ZAP 2.16+
  • Rilevamento delle policy di scansione (policies)
  • Dispatch multi-host con scheduling round-robin
  • Modalità attesa/polling opzionale con supporto timeout
  • Esportazione report (html/pdf/json/md/sarif) con comportamento di fallback
  • --fail-on gate di rischio per codici di uscita CI
  • Comandi di stop per spider, ajaxspider, clientspider, ascan o all
  • Caricamento opzionale della configurazione da $HOME/.config/mzap/config.toml e percorsi legacy

Requisiti

  • Crystal >= 1.19.1
  • Un endpoint API ZAP in esecuzione (o più endpoint)

Installazione

Homebrew

brew install hahwul/mzap/mzap

Compilazione dai sorgenti

shards install --frozen
crystal build --release src/mzap_cli.cr -o bin/mzap

Esecuzione senza compilare

crystal run src/mzap_cli.cr -- version

Immagine Docker

docker build -t mzap .
docker run --rm -v "$PWD:/work" mzap spider --urls /work/samples/target.txt --apis http://host.docker.internal:8090

Utilizzo

Usage:
  mzap [command]

Subcommands:
  ajaxspider    Avvia scansioni Ajax Spider in ZAP
  ascan         Avvia job di scansione attiva in ZAP
  clientspider  Avvia scansioni Client Spider in ZAP (ZAP 2.16+)
  help          Mostra aiuto per un comando
  import        Importa definizioni API (openapi/soap/graphql/postman)
  policies      Elenca le policy di scansione attiva in ZAP
  pscan         Attende il completamento della scansione passiva in ZAP
  sitestree     Esporta o pota l'albero dei siti di ZAP (ZAP 2.16+)
  spider        Avvia scansioni Spider in ZAP
  stop          Ferma scansioni in esecuzione
  version       Mostra la versione di mzap

Flags:
  --apikey string        Chiave API ZAP (omettere quando l'autenticazione tramite chiave API è disabilitata)
  --apis string          URL degli host API ZAP separati da virgola
                         es. --apis http://localhost:8090,http://192.168.0.4:8090 (default "http://localhost:8090")
  --config string        Percorso del file di configurazione (supporta TOML; default: $HOME/.config/mzap/config.toml)
  --context string       File di contesto ZAP da importare prima della scansione
  --fail-on string       Fallisce con codice di uscita 1 se ci sono avvisi a livello di rischio pari o superiore
  --format string        Formato della definizione API per l'importazione (openapi/soap/graphql/postman)
  --target-url string    URL target/endpoint per l'importazione (override)
  --policy string        Nome della policy di scansione per la scansione attiva
  --report-format        Formato del report dopo il completamento della scansione (html/pdf/json/md/sarif)
  --report-out           Percorso di output del report (default: mzap-report-<timestamp>.<ext>)
  --concurrency          Numero di invii di scansione paralleli (default 1)
  --wait                 Attende il completamento delle scansioni avviate
  --wait-interval        Intervallo di polling in secondi durante l'attesa (default 2)
  --wait-timeout         Timeout di attesa in secondi (default 0: nessun timeout)
  -h, --help             Mostra aiuto per mzap
  --urls string          Percorso del file contenente l'elenco di URL (es. --urls hosts.txt)

Esegui mzap help <comando> per i flag specifici del comando.

Esempi

# scansione spider con due host API ZAP
mzap spider --urls samples/target.txt --apis http://localhost:8090,http://192.168.0.4:8090

# esegue la scansione, attende il completamento e genera un report HTML
mzap spider --urls samples/target.txt --apis http://localhost:8090 --wait --report-format html --report-out reports/mzap.html

# Client Spider (crawler basato su browser, ZAP 2.16+; richiede il componente aggiuntivo Client Side Integration)
mzap clientspider --urls samples/target.txt --apis http://localhost:8090 --wait

# importa una definizione OpenAPI, attende la scansione passiva, blocca la CI su avvisi ad alta criticità
mzap import --format openapi --urls samples/specs.txt --target-url https://api.example.com \
  --apis http://localhost:8090 --wait --report-format sarif --fail-on high

# importa specifiche API da stdin
echo https://api.example.com/openapi.json | mzap import --format openapi --urls -

# scopre le policy di scansione disponibili (poi usarne una con `ascan --policy`)
mzap policies --apis http://localhost:8090

# Baseline dell'albero dei siti per scansione differenziale (il percorso è risolto dal demone ZAP)
mzap sitestree export baseline.tree --apis http://localhost:8090
mzap sitestree prune baseline.tree --apis http://localhost:8090

# ferma tutti i tipi di scansione in esecuzione
mzap stop all --apis http://localhost:8090

Importazione di API: mzap import popola l'albero dei siti di ZAP e lascia eseguire la scansione passiva; per eseguire una scansione attiva sugli endpoint importati successivamente, esegui mzap ascan contro gli stessi target. Per i file locali, i percorsi in --urls (e --target-url) sono risolti dal demone ZAP, quindi montali nel contenitore quando ZAP viene eseguito in Docker.

Configurazione

mzap carica automaticamente la configurazione quando presente. La priorità è:

  1. Percorso esplicito --config (se esiste)
  2. $HOME/.config/mzap/config.toml
  3. $HOME/.config/mzap/config + varianti di estensione
  4. $HOME/.mzap + varianti di estensione

I flag CLI sovrascrivono sempre i valori di configurazione.

[mzap]
apis = ["http://localhost:8090", "http://192.168.0.4:8090"]
apikey = "your-zap-api-key"
urls = "samples/target.txt"
wait = true
wait_interval = 2
wait_timeout = 0
report_format = "html"
report_out = "reports/mzap.html"

GitHub Action

Questo repository include una GitHub Action basata su Docker (action.yml).

- name: Esegui mzap
  uses: hahwul/mzap@<tag>
  with:
    arguments: "spider --urls samples/target.txt --apis http://localhost:8090"

Sviluppo

# test
crystal spec

# build per rilascio
crystal build --release src/mzap_cli.cr -o bin/mzap

Categorie