diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index befb992..589029a 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -63,29 +63,27 @@ jobs: chmod 777 qatests docker volume create zap-data - docker run --rm -v zap-data:/zap/wrk alpine sh -c 'echo "FAIL_ON_SEVERITY: HIGH" > /zap/wrk/zap-rules.conf' - echo ">>> 4. Executar OWASP ZAP (FULL SCAN + AJAX SPIDER)..." - # Desligamos o "aborta ao primeiro erro" do Linux para o ZAP correr até ao fim + # Desligamos a paragem automática do Linux para podermos analisar o erro do ZAP set +e + # Removemos o -c zap-rules.conf que estava a provocar o crash docker run --user root --name zap-scanner \ --network zap-net \ -v zap-data:/zap/wrk/:rw \ -t ghcr.io/zaproxy/zaproxy:stable zap-full-scan.py \ -t http://apex-sandbox:3000 \ -r report.html \ - -j \ - -I -c zap-rules.conf + -j - # GUARDAR O RESULTADO: O ZAP encontrou erro? (0 = Não, 1 = Sim). Guardamos na variável ZAP_EXIT_CODE + # GUARDAMOS O CÓDIGO DE RESULTADO DO ZAP ZAP_EXIT_CODE=$? - # Voltamos a ligar o "aborta ao primeiro erro" do Linux + # Voltamos a ligar a segurança do script Linux set -e echo ">>> 5. Recolher o relatório HTML..." - # Como guardámos o erro e não abortámos, esta linha vai correr SEMPRE! + # Como o ZAP agora não crasha, o relatório vai existir garantidamente! docker cp zap-scanner:/zap/wrk/report.html qatests/report.html || true echo ">>> 6. Limpeza final dos contentores..." @@ -94,14 +92,21 @@ jobs: docker volume rm zap-data || true echo ">>> 7. Veredicto Final da Segurança..." - # Se o código guardado for diferente de 0, forçamos o bloqueio vermelho na pipeline! - if [ $ZAP_EXIT_CODE -ne 0 ]; then - echo "🚨 ALERTA CRÍTICO: OWASP ZAP encontrou vulnerabilidades! Pipeline bloqueada." - exit $ZAP_EXIT_CODE + # O ZAP devolve 1 para falhas graves, 2 para avisos, e 0 para sucesso. + if [ $ZAP_EXIT_CODE -eq 1 ]; then + echo "🚨 ALERTA CRÍTICO: OWASP ZAP encontrou falhas HIGH/CRITICAL! Pipeline bloqueada." + exit 1 + elif [ $ZAP_EXIT_CODE -eq 2 ]; then + echo "⚠️ AVISO: ZAP encontrou alertas MEDIUM/LOW, mas a pipeline avança (Exit Code 0)." + exit 0 + elif [ $ZAP_EXIT_CODE -eq 3 ]; then + echo "❌ ERRO: O OWASP ZAP crashou por má configuração." + exit 1 else echo "✅ ZAP Scan concluído sem vulnerabilidades críticas." + exit 0 fi - + - name: 6. Production Deployment if: github.event_name == 'push' run: |