¿Qué es OWASP ZAP?

OWASP (como se discute en Penetration Testing Basics for QA Testers) Zed Attack Proxy (ZAP) es la herramienta gratuita de pruebas de seguridad más popular del mundo, mantenida activamente por la comunidad OWASP. Para ingenieros QA, ZAP proporciona escaneo de seguridad automatizado para detectar vulnerabilidades como SQL (como se discute en Security Testing for QA: A Practical Guide) injection, XSS y configuraciones inseguras antes de llegar a producción.

¿Por qué ZAP para QA?

  • Gratis y Open Source - Sin costos de licencia, acceso completo a características
  • Fácil de Automatizar - CLI, Docker, APIs para integración CI/CD
  • Escaneo Integral - Escaneo activo/pasivo, spidering, fuzzing
  • Testing de API - Soporte OpenAPI/Swagger, testing GraphQL
  • Reporting Extenso - Reportes HTML, JSON, XML con guía de remediación
  • Comunidad Activa - Actualizaciones regulares, plugins, marketplace

Modos de Escaneo ZAP

1. Escaneo Pasivo

Analiza tráfico HTTP sin enviar solicitudes adicionales. Seguro para ejecutar en producción.

# Iniciar ZAP en modo daemon
docker run -u zap -p 8080:8080 owasp/zap2docker-stable zap.sh -daemon \
  -host 0.0.0.0 -port 8080 -config api.disablekey=true

# Acceder target a través de proxy ZAP
curl -x http://localhost:8080 https://example.com

# Generar reporte escaneo pasivo
curl "http://localhost:8080/JSON/core/action/jsonreport/"

Escaneo Pasivo Detecta:

  • Headers de seguridad faltantes (CSP, X-Frame-Options, HSTS)
  • Cookies inseguras (falta HttpOnly, flags Secure)
  • Divulgación de información (stack traces, comentarios en código)
  • Librerías y frameworks desactualizados

2. Escaneo Activo

Envía payloads de ataque para encontrar vulnerabilidades. Solo usar en targets autorizados.

# Spider target para descubrir URLs
docker run owasp/zap2docker-stable zap-baseline.py \
  -t https://example.com \
  -r report.html

# Escaneo activo completo
docker run owasp/zap2docker-stable (como se discute en [SQL Injection and XSS: Finding Vulnerabilities](/blog/sql-injection-xss)) zap-full-scan.py \
  -t https://example.com \
  -r full-report.html \
  -z "-config api.disablekey=true"

Escaneo Activo Detecta:

  • SQL Injection
  • Cross-Site Scripting (XSS)
  • Path Traversal
  • Remote Code Execution
  • XML External Entity (XXE)
  • Server-Side Request Forgery (SSRF)

3. Escaneo de API

Probar REST APIs usando especificaciones OpenAPI/Swagger.

# Importar spec OpenAPI y escanear
docker run -v $(pwd):/zap/wrk:rw owasp/zap2docker-stable \
  zap-api-scan.py \
  -t https://api.example.com \
  -f openapi \
  -d /zap/wrk/openapi.json \
  -r /zap/wrk/api-report.html

Integración CI/CD

GitHub Actions

# .github/workflows/security-scan.yml
name: OWASP ZAP Security Scan

on:
  pull_request:
    branches: [main]

jobs:
  zap_scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Build application
        run: docker-compose up -d

      - name: ZAP Baseline Scan
        uses: zaproxy/action-baseline@v0.7.0
        with:
          target: 'http://localhost:3000'
          rules_file_name: '.zap/rules.tsv'

      - name: Upload ZAP Report
        uses: actions/upload-artifact@v3
        with:
          name: zap-report
          path: report_html.html

Políticas de Escaneo Personalizadas

Configuración rules.tsv

# Ignorar falsos positivos
10021	IGNORE	(CSP: Wildcard Directive)
10038	IGNORE	(Content Security Policy Header Not Set)

# Fallar en vulnerabilidades específicas
40012	FAIL	(Cross Site Scripting - Reflected)
90018	FAIL	(SQL Injection)

# Advertir en severidad media
10054	WARN	(Cookie Without SameSite Attribute)

Interpretar Resultados

Niveles de Riesgo

RiesgoDescripciónAcción Requerida
AltoVulnerabilidades críticas (SQL Injection, RCE)Corregir inmediatamente
MedioProblemas significativos (XSS, crypto débil)Corregir antes del release
BajoProblemas menores (headers faltantes)Corregir cuando sea posible

Vulnerabilidades Comunes y Correcciones

SQL Injection:

# Vulnerable
query = f"SELECT * FROM users WHERE id = {user_input}"

# Corregido - Usar consultas parametrizadas
cursor.execute("SELECT * FROM users WHERE id = ?", (user_input,))

XSS:

// Vulnerable
document.getElementById('output').innerHTML = userInput;

// Corregido - Escapar salida
document.getElementById('output').textContent = userInput;

Headers de Seguridad Faltantes:

# Añadir a nginx.conf
add_header X-Frame-Options "DENY";
add_header X-Content-Type-Options "nosniff";
add_header Content-Security-Policy "default-src 'self'";

Conclusión

OWASP ZAP es esencial para integrar pruebas de seguridad en flujos de trabajo QA. Desde escaneos CI/CD automatizados hasta testing integral de API, ZAP ayuda a identificar vulnerabilidades temprano cuando son más económicas de corregir.

Conclusiones Clave:

  • Comenzar con escaneos baseline en CI/CD
  • Usar escaneo pasivo para monitoreo de producción
  • Implementar políticas personalizadas para tu tolerancia al riesgo
  • Automatizar autenticación para escaneo autenticado
  • Rastrear vulnerabilidades en el tiempo
  • Corregir problemas altos/críticos inmediatamente