Parte: 4 — Seguridad de aplicaciones web · Fuente: OWASP ZAP Documentation / Web Security Testing Guide ⏱️ Duración estimada: 90 min · Nivel: Fundamentos
Dominar OWASP ZAP (Zed Attack Proxy), la alternativa libre y de código abierto a Burp, con foco en su capacidad de automatización (spider, active scan, ZAP en CI/CD). Complementa a Burp: ZAP brilla en escaneo automatizado y en pipelines DevSecOps.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Proxy y certificado ZAP | Base para interceptar tráfico |
| 2 | Spider tradicional vs. AJAX spider | Las SPAs necesitan el AJAX spider |
| 3 | Passive vs. active scan | Uno observa, otro ataca |
| 4 | Alertas y niveles de riesgo | Priorización de hallazgos |
| 5 | Automation Framework y baseline | Integración en pipelines |
| 6 | Contextos y autenticación | Escaneo autenticado |
| 7 | ZAP vs. Burp | Elegir la herramienta adecuada |
OWASP ZAP (Zed Attack Proxy) es el equivalente libre y gratuito de Burp, mantenido por la comunidad OWASP. Comparte el concepto central —un proxy de interceptación que ve y modifica el tráfico— y por eso mucho de la clase 088 se traslada directamente: también genera una CA que hay que instalar para HTTPS, también tiene target, sitemap e interceptación manual. La razón de estudiarlo no es solo tener una opción sin coste, sino que ZAP brilla donde Burp Community flaquea: en automatización. Su escaneo activo es completo y sin las limitaciones de velocidad de la edición gratuita de Burp, y su Automation Framework lo hace idóneo para integrarse en un pipeline de CI/CD.
Para probar una aplicación hay que descubrir primero sus páginas, y ZAP ofrece dos spiders que responden a las dos arquitecturas de la clase 086. El spider tradicional descarga el HTML y sigue los enlaces que encuentra en él: rápido y suficiente para una web renderizada en servidor. Pero una SPA casi no tiene enlaces en el HTML inicial —el contenido lo genera el JavaScript al ejecutarse—, así que el spider tradicional apenas ve nada. Para eso está el AJAX Spider, que lanza un navegador real, ejecuta el JavaScript, hace clic en los elementos y descubre las rutas que solo aparecen tras la interacción. La regla práctica: sitio clásico, spider tradicional; SPA, AJAX Spider (más lento pero necesario).
La diferencia más importante de operar cualquier escáner es entre escaneo pasivo y activo, y confundirla causa problemas reales. El escaneo pasivo solo observa el tráfico que ya generas navegando: detecta cabeceras de seguridad ausentes, cookies sin flags, información filtrada —todo sin enviar nada al servidor más allá de tu navegación normal—. Es seguro en cualquier entorno. El escaneo activo es lo contrario: envía payloads de prueba (comillas para SQLi, scripts para XSS, etc.) para provocar y detectar vulnerabilidades. Es potente, pero es intrusivo: puede crear registros basura, disparar acciones, e incluso —si encuentra una inyección— alterar o borrar datos. Por eso el escaneo activo se lanza solo dentro del scope autorizado y nunca contra producción sin permiso explícito, exactamente como marcan las RoE de la clase 067.
El Automation Framework y el modo baseline de ZAP son su ventaja diferencial: permiten definir en un fichero un escaneo reproducible —autenticación incluida, mediante contextos que enseñan a ZAP cómo iniciar sesión— y ejecutarlo sin interfaz gráfica, lo que encaja perfectamente en un pipeline de DevSecOps (Parte 11) para que cada despliegue pase un chequeo de seguridad automático. En la comparación práctica, ninguno es "mejor": Burp Professional domina el trabajo manual e interactivo por su ergonomía y sus extensiones; ZAP domina el automatizado y gratuito. Muchos profesionales usan los dos, y saber operar ambos es una ventaja real. La advertencia común a los dos es la misma: un escáner automático encuentra lo fácil y conocido, genera falsos positivos que hay que verificar a mano, y no sustituye el análisis manual —las vulnerabilidades de lógica de negocio (clase 109), por ejemplo, ningún escáner las ve—.
| Término | Definición concisa |
|---|---|
| OWASP ZAP | Proxy de pentesting web libre y gratuito de OWASP |
| CA de ZAP | Certificado propio para interceptar HTTPS |
| Spider tradicional | Descubre páginas siguiendo enlaces del HTML |
| AJAX Spider | Ejecuta JS con un navegador real para descubrir rutas de SPA |
| Escaneo pasivo | Solo observa el tráfico; no envía nada; seguro |
| Escaneo activo | Envía payloads de prueba; intrusivo; solo dentro del scope |
| Falso positivo | Alerta que no se sostiene al verificarla a mano |
| Alerta | Hallazgo del escáner, con nivel de riesgo |
| Automation Framework | Escaneos reproducibles definidos en fichero |
| Baseline scan | Escaneo rápido y no intrusivo para CI/CD |
| Contexto | Configuración que enseña a ZAP a autenticarse |
| CI/CD | Integración continua donde encaja el escaneo automatizado |
| Escaneo intrusivo | El que puede alterar datos o disparar acciones |
| Análisis manual | Lo que ningún escáner sustituye |
zaproxy/zap-stable.http://localhost:3000.# Baseline scan con Docker (no intrusivo)
docker run --rm -t zaproxy/zap-stable zap-baseline.py -t http://host.docker.internal:3000
⚠️ Solo contra laboratorios propios.
8080 o 8090).Genera un reporte de ZAP de Juice Shop que incluya al menos 3 alertas de riesgo medio/alto verificadas manualmente (sin falsos positivos). Criterio de aceptación: cada alerta del reporte se confirma reproduciéndola manualmente en el navegador o en Burp, y se descarta al menos un falso positivo justificando por qué.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| Active scan sin resultados en SPA | Faltó el AJAX spider previo |
| Muchos falsos positivos | Verifica manualmente antes de reportar |
| HTTPS con errores de certificado | CA de ZAP no instalado |
| Escaneo bloqueado por WAF/rate limit | Baja el número de hilos del active scan |
| Baseline scan siempre en verde | El scope o el target están mal definidos |
❓ ¿ZAP puede sustituir a Burp? Para automatización y CI/CD, sí, e incluso mejor. Para pentesting manual fino, muchos prefieren Burp.
❓ ¿El active scan es peligroso? Envía payloads reales; puede alterar datos. Úsalo solo en entornos autorizados y con backups.
❓ ¿Cómo integro ZAP en CI/CD?
Con zap-baseline.py o zap-full-scan.py en un contenedor, haciendo que el pipeline falle según las alertas.
Clase 088 — Burp Suite: configuración y flujo de trabajo