¿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
Riesgo | Descripción | Acción Requerida |
---|---|---|
Alto | Vulnerabilidades críticas (SQL Injection, RCE) | Corregir inmediatamente |
Medio | Problemas significativos (XSS, crypto débil) | Corregir antes del release |
Bajo | Problemas 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