Volver a actualizaciones
Nuevo releaseSep 11, 2026

mzap v2.2.1

⚡️ Escaneo ZAP con múltiples objetivos

Compartir

mzap

mzap es una CLI en Crystal para escaneo ZAP de múltiples objetivos. Distribuye objetivos entre uno o más hosts de API de ZAP, admite modo de espera opcional y puede exportar informes.

Características

  • Comandos de escaneo: spider, ajaxspider, clientspider (ZAP 2.16+), ascan, pscan
  • Importación de definiciones de API para openapi, soap, graphql y postman
  • export/prune del árbol de sitios para escaneo diferencial/incremental en ZAP 2.16+
  • Descubrimiento de políticas de escaneo (policies)
  • Distribución multi-host con planificación round-robin
  • Modo de espera/poll opcional con soporte de tiempo de espera
  • Exportación de informes (html/pdf/json/md/sarif) con comportamiento de fallback
  • --fail-on como puerta de riesgo para códigos de salida en CI
  • Comandos de parada para spider, ajaxspider, clientspider, ascan o all
  • Carga opcional de configuración desde $HOME/.config/mzap/config.toml y rutas heredadas

Requisitos

  • Crystal >= 1.19.1
  • Un endpoint de API de ZAP en ejecución (o varios)

Instalación

Homebrew

brew install hahwul/mzap/mzap

Compilar desde el código fuente

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

Ejecutar sin compilar

crystal run src/mzap_cli.cr -- version

Imagen Docker

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

Uso

Usage:
  mzap [command]

Subcommands:
  ajaxspider    Iniciar escaneos de Ajax Spider en ZAP
  ascan         Iniciar trabajos de Active Scan en ZAP
  clientspider  Iniciar escaneos de Client Spider en ZAP (ZAP 2.16+)
  help          Mostrar ayuda para un comando
  import        Importar definiciones de API (openapi/soap/graphql/postman)
  policies      Listar políticas de escaneo activo en ZAP
  pscan         Esperar a que finalice el Passive Scan en ZAP
  sitestree     Exportar o podar el árbol de sitios de ZAP (ZAP 2.16+)
  spider        Iniciar escaneos de Spider en ZAP
  stop          Detener escaneos en ejecución
  version       Mostrar la versión de mzap

Flags:
  --apikey string        Clave de API de ZAP (omitir cuando la autenticación de clave API está deshabilitada)
  --apis string          URLs de host de API de ZAP separadas por comas
                         ej. --apis http://localhost:8090,http://192.168.0.4:8090 (por defecto "http://localhost:8090")
  --config string        Ruta del archivo de configuración (TOML compatible; por defecto: $HOME/.config/mzap/config.toml)
  --context string       Archivo de contexto de ZAP a importar antes del escaneo
  --fail-on string       Fallar con código de salida 1 si hay alertas en o por encima del nivel de riesgo
  --format string        Formato de definición de API para importar (openapi/soap/graphql/postman)
  --target-url string    URL de destino/endpoint para sobrescribir en la importación
  --policy string        Nombre de la política de escaneo para el escaneo activo
  --report-format        Formato del informe después de completar el escaneo (html/pdf/json/md/sarif)
  --report-out           Ruta de salida del informe (por defecto: mzap-report-<timestamp>.<ext>)
  --concurrency          Número de despachos de escaneo en paralelo (por defecto 1)
  --wait                 Esperar a que los escaneos iniciados finalicen
  --wait-interval        Intervalo de sondeo en segundos mientras se espera (por defecto 2)
  --wait-timeout         Tiempo de espera en segundos (por defecto 0: sin tiempo de espera)
  -h, --help             Mostrar ayuda para mzap
  --urls string          Ruta al archivo de lista de URLs (ej. --urls hosts.txt)

Ejecute mzap help <command> para las banderas específicas de cada comando.

Ejemplos

# spider scan with two ZAP API hosts
mzap spider --urls samples/target.txt --apis http://localhost:8090,http://192.168.0.4:8090

# run scan, wait for completion, and generate an HTML report
mzap spider --urls samples/target.txt --apis http://localhost:8090 --wait --report-format html --report-out reports/mzap.html

# Client Spider (browser-based crawler, ZAP 2.16+; needs the Client Side Integration add-on)
mzap clientspider --urls samples/target.txt --apis http://localhost:8090 --wait

# import an OpenAPI definition, wait for passive scan, gate CI on high-risk alerts
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

# import API specs from stdin
echo https://api.example.com/openapi.json | mzap import --format openapi --urls -

# discover available scan policies (then use one with `ascan --policy`)
mzap policies --apis http://localhost:8090

# Sites Tree baseline for differential scanning (path resolved by the ZAP daemon)
mzap sitestree export baseline.tree --apis http://localhost:8090
mzap sitestree prune baseline.tree --apis http://localhost:8090

# stop all running scan types
mzap stop all --apis http://localhost:8090

Importación de APIs: mzap import siembra el árbol de sitios de ZAP y permite que el escaneo pasivo se ejecute; para escanear activamente los endpoints importados posteriormente, ejecute mzap ascan contra el/los mismo(s) objetivo(s). Para archivos locales, las rutas en --urls (y --target-url) son resueltas por el demonio de ZAP, por lo que debe montarlas dentro del contenedor cuando ZAP se ejecute en Docker.

Config

mzap carga la configuración automáticamente cuando está presente. La prioridad es:

  1. Ruta explícita de --config (si existe)
  2. $HOME/.config/mzap/config.toml
  3. $HOME/.config/mzap/config + variantes de extensión
  4. $HOME/.mzap + variantes de extensión

Las banderas de línea de comandos siempre anulan los valores de configuración.

[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"

Acción de GitHub

Este repositorio incluye una acción de GitHub basada en Docker (action.yml).

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

Desarrollo

# tests
crystal spec

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

Categorías