Ya sabes qué es ZAP y de qué piezas se compone. Ahora vamos a tenerlo funcionando y, sobre todo, bien configurado para probar BazarNube. Instalar ZAP es fácil; el trabajo real está en la configuración: interceptar HTTPS con el certificado raíz, definir un contexto y un scope que acoten qué se puede tocar, y montar la autenticación para llegar a las zonas protegidas de BazarNube (panel de vendedor, checkout, API de pedidos). Sin esa preparación, ZAP solo verá la parte pública de la tienda y se perderá justo donde viven los hallazgos más jugosos.
Contenido
- Formas de instalar ZAP
- Instalación con Docker
- Primeros pasos en la GUI
- Configurar el navegador y el proxy
- Instalar el certificado raíz para HTTPS
- Definir el contexto y el scope
- Configurar la autenticación de BazarNube
- Verificar que todo funciona
Formas de instalar ZAP
ZAP se distribuye de varias maneras. Elige según el uso:
| Método | Cuándo usarlo | Nota |
|---|---|---|
| Instalador (Windows/macOS/Linux) | Uso interactivo con GUI en tu equipo | Incluye un JRE embebido en versiones recientes |
Paquete .tar.gz / cross-platform |
Linux sin instalador, servidores | Requiere Java 17+ |
Docker (zaproxy/zap-stable) |
CI/CD, entornos reproducibles, headless | El método preferido para automatizar |
Paquete de la distro (apt, snap) |
Comodidad en Linux | Puede ir por detrás en versión |
Instalación en Linux desde el paquete cross-platform:
# Descargar y descomprimir (ajusta la version a la ultima estable)
cd /opt
curl -L -o ZAP.tar.gz \
https://github.com/zaproxy/zaproxy/releases/download/v2.15.0/ZAP_2.15.0_Linux.tar.gz
tar -xzf ZAP.tar.gz
cd ZAP_2.15.0
# Lanzar la GUI
./zap.sh
# O lanzarlo en modo demonio (sin GUI), escuchando la API en el 8090
./zap.sh -daemon -port 8090 -host 127.0.0.1Comprueba que tienes Java disponible si usas el paquete cross-platform:
Instalación con Docker
Para BazarNube usaremos Docker con frecuencia, porque el staging ya corre en contenedores y así ZAP vive en el mismo mundo. Imágenes oficiales:
zaproxy/zap-stable: última versión estable (la que usaremos).zaproxy/zap-weekly: build semanal, para funcionalidades muy recientes.
# Descargar la imagen estable
docker pull zaproxy/zap-stable
# Arrancar ZAP en modo demonio, exponiendo la API en el 8090
docker run -u zap -p 8090:8090 -i zaproxy/zap-stable \
zap.sh -daemon -host 0.0.0.0 -port 8090 \
-config api.addrs.addr.name=.* \
-config api.addrs.addr.regex=true
# Lanzar la GUI de ZAP accesible por navegador (webswing) en el 8080
docker run -u zap -p 8080:8080 -p 8090:8090 -i zaproxy/zap-stable zap-webswing.sh
-config api.addrs.addr.*autoriza a los clientes de la API. En redes reales, restringe las direcciones en lugar de usar.*. Lo profundizaremos en 06-04, cuando la API sea protagonista.
Para que ZAP en Docker alcance el staging de BazarNube que también corre en Docker, conéctalos a la misma red:
docker network create bazarnube-net
# ... arranca la app de BazarNube en esa red ...
docker run --network bazarnube-net -u zap -i zaproxy/zap-stable \
zap.sh -daemon -host 0.0.0.0 -port 8090
# Dentro de esa red, la app es accesible por su nombre de servicio, p. ej. http://web:3000Primeros pasos en la GUI
Al abrir la GUI por primera vez, ZAP pregunta si quieres persistir la sesión. Para trabajo serio en BazarNube elige "Yes, I want to persist this session": así conservas árbol de sitios, alertas e historial.
Zonas principales de la interfaz:
- Sites (izquierda): el árbol de todo lo descubierto de BazarNube.
- Request / Response (centro): el detalle de la petición seleccionada.
- History / Search / Alerts / Output (abajo): pestañas de trabajo. Alerts es donde vivirás.
- Barra de modo (arriba a la izquierda): el desplegable Safe/Protected/Standard/Attack que vimos en 06-01. Ponlo en Protected.
Configurar el navegador y el proxy
ZAP escucha por defecto como proxy en localhost:8080. Tienes dos caminos:
Opción A — Navegador integrado (recomendado para empezar). ZAP puede lanzar un Firefox/Chrome ya preconfigurado con el proxy y el certificado puestos. En la GUI, botón "Manual Explore" o "Explore your application" y Launch Browser. Es la vía sin fricción.
Opción B — Tu propio navegador. Apunta el proxy del sistema o del navegador a ZAP. Ejemplo de configuración manual del proxy:
Con Firefox y un perfil dedicado por línea de comandos:
# Firefox usando ZAP como proxy (perfil aislado para no ensuciar el tuyo)
firefox -no-remote -profile /tmp/zap-profile \
-setDefaultBrowser about:blank &
# Luego configura el proxy manual 127.0.0.1:8080 en ese perfilSi prefieres una extensión, FoxyProxy permite alternar el proxy de ZAP con un clic.
Instalar el certificado raíz para HTTPS
BazarNube usa HTTPS. Para que ZAP pueda ver y modificar el tráfico cifrado, actúa como un man-in-the-middle legítimo: genera certificados al vuelo firmados por su propia CA raíz (ZAP Root CA). Tu navegador debe confiar en esa CA, o verás errores de certificado en cada petición.
Pasos:
- En la GUI:
Tools > Options > Network > Server Certificates(en versiones antiguas, Dynamic SSL Certificates). - Pulsa Save para exportar el certificado raíz a un fichero, p. ej.
zap_root_ca.cer. - Impórtalo como CA de confianza en el navegador o en el sistema.
Exportar el certificado por línea de comandos (útil para automatizar):
# Con ZAP corriendo como demonio y la API en el 8090
curl -s "http://127.0.0.1:8090/OTHER/network/other/rootCaCert/" \
-o zap_root_ca.cerConfiar en la CA en Linux (Debian/Ubuntu):
sudo cp zap_root_ca.cer /usr/local/share/ca-certificates/zap_root_ca.crt
sudo update-ca-certificatesEn Firefox: Ajustes > Privacidad y seguridad > Certificados > Ver certificados > Autoridades > Importar y marca "Confiar para identificar sitios web".
Seguridad: la clave privada de esa CA vive en tu ZAP. Cualquiera que la tenga podría interceptar tu tráfico. No compartas tu certificado raíz de ZAP ni lo dejes instalado en navegadores de uso diario. Genera uno nuevo periódicamente desde el mismo panel.
Definir el contexto y el scope
Un contexto en ZAP es una agrupación lógica de URLs que representan una aplicación y sus reglas: qué URLs le pertenecen (scope), cómo se autentica, qué usuarios hay, qué se excluye. Es la unidad clave para trabajar con foco.
Para BazarNube crearemos un contexto BazarNube-Staging:
- En el árbol Sites, clic derecho sobre el dominio de staging > Include in Context > New Context.
- Define el scope con expresiones regulares de inclusión y exclusión.
Ejemplo de patrones de scope:
| Tipo | Patrón | Motivo |
|---|---|---|
| Incluir | https://staging\.bazarnube\.local.* |
Toda la app de staging |
| Excluir | https://staging\.bazarnube\.local/logout.* |
Evita que el spider cierre tu sesión |
| Excluir | https://staging\.bazarnube\.local/api/payments.* |
No disparar cobros reales de prueba |
| Excluir | .*pay\.tercero\.com.* |
Pasarela externa: fuera de scope |
El patrón de exclusión de
/logoutes uno de los trucos más útiles: sin él, el spider entra en el enlace de "Cerrar sesión", pierde la sesión autenticada y deja de ver las zonas privadas.
Configurar la autenticación de BazarNube
Gran parte del riesgo de BazarNube (el IDOR de /api/orders/{id}, el panel de vendedor) está detrás del login. Para que ZAP pruebe esas zonas, hay que enseñarle a autenticarse y a mantener la sesión.
BazarNube usa login por formulario que devuelve un JWT en una cookie de sesión. Configuración en el contexto:
1. Método de autenticación (Context > Authentication). Elige Form-based Authentication y define la petición de login:
Login form target URL: https://staging.bazarnube.local/api/auth/login
Login request POST data: {"email":"{%username%}","password":"{%password%}"}
Content-Type: application/json2. Indicadores de sesión — cómo sabe ZAP si sigue autenticado:
- Logged-in indicator (regex que aparece SOLO autenticado):
\"role\":\"seller\"o el texto "Cerrar sesión". - Logged-out indicator (regex que aparece al perder sesión):
Iniciar sesióno un401.
3. Gestión de sesión (Session Management). Para JWT en cabecera, usa HTTP Header Based Session Management o Cookie-based si viaja en cookie.
4. Usuarios (Context > Users). Crea usuarios de prueba de staging (nunca credenciales reales de producción):
Tener dos usuarios permite probar control de acceso (¿puede comprador_test leer los pedidos de vendedor_test?), que es la esencia del IDOR del backlog.
Cómo encaja todo el flujo de sesión:
graph TD
A[ZAP envia POST de login] --> B{Respuesta contiene<br/>logged-in indicator?}
B -->|Si| C[Sesion valida: guarda token/cookie]
B -->|No| D[Reintenta autenticacion]
C --> E[Spider y escaner usan la sesion]
E --> F{Se detecta<br/>logged-out indicator?}
F -->|Si| D
F -->|No| E
Verificación rápida con la API de ZAP (contexto y usuario ya creados):
# Forzar autenticacion de un usuario y comprobar que la sesion es valida
curl "http://127.0.0.1:8090/JSON/users/action/setUserEnabled/" \
--data-urlencode "contextId=1" \
--data-urlencode "userId=1" \
--data-urlencode "enabled=true"Verificar que todo funciona
Antes de escanear (lección 06-03), confirma esta lista:
- [ ] ZAP arranca (GUI o demonio) y el proxy escucha en 8080 / API en 8090.
- [ ] El navegador enruta por ZAP y no salen errores de certificado en HTTPS.
- [ ] Al navegar BazarNube, aparecen peticiones en History y crece el árbol Sites.
- [ ] Existe el contexto
BazarNube-Stagingcon scope de inclusión/exclusión correcto. - [ ] Al Force User autenticado, ZAP accede al panel de vendedor sin pedir login.
Prueba de humo del proxy con curl:
# Pasar una peticion a traves del proxy de ZAP e ignorar la CA del sistema
curl -x http://127.0.0.1:8080 -k https://staging.bazarnube.local/ -I
# Deberia responder 200 y aparecer la peticion en el History de ZAPErrores Comunes y Consejos
- Errores de certificado en cada página: no has importado (o no has confiado en) la ZAP Root CA. Reexpórtala e impórtala como autoridad.
- El spider cierra tu sesión: falta excluir
/logoutdel scope o no configuraste el logged-out indicator. - ZAP no ve el tráfico del frontend React: el
fetch/XHR de la SPA puede ignorar el proxy del sistema; usa el navegador integrado de ZAP o configura el proxy en el propio navegador, no solo en el SO. - Usar credenciales reales de producción: nunca. Crea usuarios de prueba exclusivos de staging.
- Puerto 8080 ocupado: otra app (o Tomcat del legacy Java) usa el 8080. Cambia el puerto de ZAP con
-porto enTools > Options > Network > Local Servers/Proxies. - Consejo: guarda el contexto exportado (
Context > Export Context) como fichero versionado; lo reutilizarás en la automatización de 06-04.
Ejercicios
Ejercicio 1. Estás interceptando BazarNube por HTTPS y el navegador muestra "La conexión no es segura" en todas las páginas. ¿Cuál es la causa más probable y cómo lo resuelves?
Ejercicio 2. Escribe los patrones de inclusión y exclusión del scope para un contexto que cubra https://staging.bazarnube.local, evite que el spider cierre sesión y no toque la pasarela externa pay.tercero.com.
Ejercicio 3. Quieres que ZAP pruebe el panel de vendedor, que exige login. Enumera los cuatro elementos que debes configurar en el contexto para que ZAP mantenga la sesión autenticada.
Soluciones
Solución 1. El navegador no confía en la ZAP Root CA, que firma al vuelo los certificados que ZAP presenta. Solución: exportar el certificado raíz desde Tools > Options > Network > Server Certificates, importarlo como autoridad de confianza en el navegador/sistema y recargar. Alternativa rápida: usar el navegador integrado de ZAP, que ya lo trae configurado.
Solución 2.
- Incluir:
https://staging\.bazarnube\.local.* - Excluir:
https://staging\.bazarnube\.local/logout.* - Excluir:
.*pay\.tercero\.com.*
Los patrones son expresiones regulares; recuerda escapar los puntos.
Solución 3. (1) Método de autenticación (form-based con la URL y el POST data de /api/auth/login); (2) indicadores de sesión (logged-in y logged-out) para que ZAP detecte si sigue autenticado; (3) gestión de sesión (cookie o cabecera según viaje el JWT); (4) al menos un usuario de prueba con sus credenciales de staging.
Conclusión
Con ZAP instalado, el certificado raíz confiado, el proxy enrutando el tráfico de BazarNube y un contexto con scope y autenticación bien definidos, tienes la plataforma lista para trabajar en serio. Toda esta preparación no es burocracia: es lo que permite que el escáner llegue a las zonas autenticadas donde de verdad hay riesgo, sin salirse a atacar terceros.
En la siguiente lección, 06-03 Escaneo de Vulnerabilidades, ponemos la maquinaria en marcha: exploraremos BazarNube con el spider y el AJAX Spider, dejaremos trabajar al escáner pasivo, lanzaremos el escáner activo con una política adecuada, y aprenderemos a interpretar las alertas, hacer triage de falsos positivos y generar informes que mapeen los hallazgos al Top Ten y al backlog de BazarNube.
Curso de OWASP: Directrices y Estándares para la Seguridad en Aplicaciones Web
Módulo 1: Introducción a OWASP
Módulo 2: Principales Proyectos de OWASP
- OWASP Top Ten
- OWASP ASVS (Application Security Verification Standard)
- OWASP SAMM (Software Assurance Maturity Model)
- OWASP ZAP (Zed Attack Proxy)
- Otros Proyectos Clave: WSTG, Cheat Sheets y Dependency-Check
Módulo 3: OWASP Top Ten 2021 en Profundidad
- A01:2021 – Pérdida de Control de Acceso
- A02:2021 – Fallos Criptográficos y Exposición de Datos Sensibles
- A03:2021 – Inyección
- Cross-Site Scripting (XSS) en Profundidad
- A04:2021 – Diseño Inseguro
- A05:2021 – Configuración de Seguridad Incorrecta
- Entidades Externas XML (XXE)
- A06:2021 – Componentes Vulnerables y Desactualizados
- A07:2021 – Fallos de Identificación y Autenticación
- A08:2021 – Fallos de Integridad de Software y Datos (Deserialización Insegura)
- A09:2021 – Fallos de Registro y Monitorización
- A10:2021 – Server-Side Request Forgery (SSRF)
Módulo 4: OWASP ASVS (Application Security Verification Standard)
- Introducción a ASVS
- Niveles de Verificación
- Requisitos de Seguridad
- Implementación de ASVS en Proyectos
Módulo 5: OWASP SAMM (Software Assurance Maturity Model)
Módulo 6: OWASP ZAP (Zed Attack Proxy)
- Introducción a ZAP
- Instalación y Configuración
- Escaneo de Vulnerabilidades
- Automatización de Pruebas de Seguridad
Módulo 7: Buenas Prácticas y Recomendaciones
- Ciclo de Vida de Desarrollo Seguro (SDLC)
- Modelado de Amenazas (Threat Modeling)
- Integración de Seguridad en DevOps (DevSecOps)
- Capacitación y Concienciación en Seguridad
- Herramientas y Recursos Adicionales
Módulo 8: Ejercicios Prácticos y Casos de Estudio
- Ejercicio 1: Identificación de Vulnerabilidades
- Ejercicio 2: Implementación de Controles de Seguridad
- Caso de Estudio 1: Análisis de un Incidente de Seguridad
- Caso de Estudio 2: Mejora de la Seguridad en una Aplicación Web
