Imagem de capa do projeto: Nexus DAST Deploy EM ANDAMENTO

Resumo técnico

Plugin do NEXUS (categoria DevOps & Infra) que orquestra DAST pós-deploy para Kagin e Evolya: o Coolify/CI chama dast_deploy_hook (ou a UI/slash /dast dispara), o NEXUS sobe Nuclei (projectdiscovery/nuclei:latest) e/ou OWASP ZAP baseline (ghcr.io/zaproxy/zaproxy:stable) via Docker com --network host, importa os relatórios no Nexus Security Scanner com compliance (source: nexus-dast-deploy), persiste o run em dast_runs e cria uma tarefa [DAST] opcional no NEXUS — fechando o ciclo do SDLC em que o workflow/CI dispara e o plugin é a fonte da verdade.

Escopo executado

  • Backend backend.php (972 linhas): dast_default_config() em DB::getConfig('plugin.dast-deploy') com targets kagin (https://kagin.com.br) e evolya (https://evolya.com.br) por ambiente production/staging, scanners default ['nuclei','zap'], nuclei_severity critical,high,medium, imagens Docker configuráveis, webhook_secret, create_run_task, timeout_sec (clamp 60–3600), allow_manual e notify_inngest.
  • Tabela dast_runs criada por dast_install() (InnoDB, utf8mb4, índices em app/status/created_at) com contagens por severidade nuclei_critical/high/medium/low e zap_high/medium/low, task_id, summary_json, duration_ms e timestamps.
  • dast_deploy_hook: webhook pós-deploy que valida secret com hash_equals (exigido se configurado), aceita app/application/service, env (aliases prod/stage), URL override e scanners, com opção async.
  • dast_run: valida allow_manual, resolve o target (dast_resolve_target — app+env ou URL override), checa Docker (dast_docker_ok via nx_secure_exec_status), cria a tarefa [DAST] {app}/{env} — scan pós-deploy (project NEXUS, prioridade 2, in_progress), insere o run running e emite o evento Inngest nexus/dast.deploy (se plugin Inngest ativo).
  • Nuclei (dast_run_nuclei): docker run --rm --network host -v <reports>:/out -u <url> -severity <sev> -je <report> -silent -nc -timeout 10; conta por severidade (exit não-zero com findings ainda é OK) e normaliza NDJSON.
  • ZAP (dast_run_zap): zap-baseline.py -t <url> -J <report> -I; conta alerts por riskdesc/riskcode (High/Medium/Low/Informational).
  • Import com compliance (dast_import_report): security_import_with_compliance com nuclei → security_process_nuclei_scan e zap → security_process_zap_scan, repo: deploy/{app}, project: NEXUS, source: nexus-dast-deploy; carrega o backend do Security Scanner sob demanda se ausente.
  • Status final ok/partial/error conforme sucesso dos scanners; comentário DAST finalizado (...) na tarefa e task_update para done (sem findings) ou pending com prioridade 4 (se critical/high).
  • dast_normalize_url: só http/https; bloqueia localhost, 127.0.0.1, 0.0.0.0, ::1, 169.254.* e *.local.
  • API: 9 actions via PluginManager::registerApiAction — dast_dashboard, dast_settings_get, dast_settings_save, dast_deploy_hook, dast_run, dast_runs_list, dast_run_get, dast_fastr, dast_fastr_suggest (autenticadas por sessão/Bearer com CSRF).
  • UI Alpine.js (tab.php 219 linhas): badge Docker OK (ponto verde pulsante), stats cards (Runs · OK · Partial/Err · Crit/High), aba Disparar (app/env/scanners/URL override + box do webhook Coolify/CI), aba Histórico (runs com status colorido e counts N c/h · Z h · duração) e aba Config (4 URLs de target + webhook secret mascarado abcd•••wxyz, timeout e booleans).
  • Comando fastr /dast (dast_fastr + dast_fastr_suggest): resumo, kagin, evolya/staging (dispara run Nuclei) ou dast_<id>; enricher dast_intel_enrich (priority 56) reconhece dast://kagin, dast://evolya/staging e URLs dos hosts configurados. Sem cronjob.json (plugin disparado por eventos).

Stack e ferramentas

  • PHP 8 (sem framework)
  • MySQL 8 (config em admin_configs + tabela dast_runs)
  • Docker Engine (Nuclei e OWASP ZAP em containers, nx_secure_exec)
  • Alpine.js + Tailwind CSS
  • Sistema de plugins do NEXUS (PluginManager)

Tags operacionais

  • DAST
  • Nuclei
  • OWASP ZAP
  • DevSecOps
  • Plugin NEXUS

Resultado operacional

  • Fecha o ciclo DAST pós-deploy: cada deploy do Coolify/CI pode disparar a varredura automaticamente via dast_deploy_hook, sem ação manual.
  • Dois scanners complementares em containers: Nuclei (templates, severidades configuráveis) + OWASP ZAP baseline (passivo/ativo), com relatórios JSON persistidos em storage/dast-deploy/reports.
  • Import direto no Nexus Security Scanner com compliance (source: nexus-dast-deploy) — os findings entram no mesmo pipeline do plugin de segurança, com repo deploy/{app}.
  • Rastreabilidade completa: run em dast_runs com contagens por severidade, duração e erro; tarefa [DAST] no NEXUS com comentário de resultado e prioridade elevada quando há critical/high.
  • Segurança do gatilho: secret validado com hash_equals e URL normalizada que bloqueia alvos locais/link-local (localhost, 169.254.*, *.local).

Andamento no GitHub (issues)

Painel em tempo real com as issues mais recentes do repositório.

abertas (amostra): -- fechadas (amostra): -- base: -- ultimas issues

carregando andamento...

Resultados reais

Plugin do NEXUS que orquestra varreduras DAST pós-deploy com Nuclei e OWASP ZAP via Docker, disparadas por webhook do Coolify/CI, aba do painel ou slash /dast — com import dos relatórios no Nexus Security Scanner, runs persistidos em dast_runs e tarefa [DAST] no NEXUS.

Arquitetura e organização

Execução e operação

O projeto segue fluxo reprodutível de execução com validação técnica em ambiente de produção/similar.

Screenshots

Falar sobre este projeto

Aplique este modelo no seu ambiente e acelere a entrega com consistência técnica.