Ja saps què és ZAP i de quines peces es compon. Ara el posarem en marxa i, sobretot, ben configurat per provar BazarNube. Instal·lar ZAP és fàcil; la feina de veritat és a la configuració: interceptar HTTPS amb el certificat arrel, definir un context i un scope que acotin què es pot tocar, i muntar l'autenticació per arribar a les zones protegides de BazarNube (panell de venedor, checkout, API de comandes). Sense aquesta preparació, ZAP només veurà la part pública de la botiga i es perdrà justament allà on viuen les troballes més sucoses.
Contingut
- Formes d'instal·lar ZAP
- Instal·lació amb Docker
- Primeres passes a la GUI
- Configurar el navegador i el proxy
- Instal·lar el certificat arrel per a HTTPS
- Definir el context i el scope
- Configurar l'autenticació de BazarNube
- Verificar que tot funciona
Formes d'instal·lar ZAP
ZAP es distribueix de diverses maneres. Tria segons l'ús:
| Mètode | Quan usar-lo | Nota |
|---|---|---|
| Instal·lador (Windows/macOS/Linux) | Ús interactiu amb GUI al teu equip | Inclou un JRE incrustat en versions recents |
Paquet .tar.gz / cross-platform |
Linux sense instal·lador, servidors | Requereix Java 17+ |
Docker (zaproxy/zap-stable) |
CI/CD, entorns reproduïbles, headless | El mètode preferit per automatitzar |
Paquet de la distro (apt, snap) |
Comoditat a Linux | Pot anar endarrerit en versió |
Instal·lació a Linux des del paquet cross-platform:
# Descarregar i descomprimir (ajusta la versio a l'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
# Llancar la GUI
./zap.sh
# O llancar-lo en mode dimoni (sense GUI), escoltant l'API al 8090
./zap.sh -daemon -port 8090 -host 127.0.0.1Comprova que tens Java disponible si uses el paquet cross-platform:
Instal·lació amb Docker
Per a BazarNube usarem Docker sovint, perquè el staging ja corre en contenidors i així ZAP viu al mateix món. Imatges oficials:
zaproxy/zap-stable: última versió estable (la que usarem).zaproxy/zap-weekly: build setmanal, per a funcionalitats molt recents.
# Descarregar la imatge estable
docker pull zaproxy/zap-stable
# Arrencar ZAP en mode dimoni, exposant l'API al 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
# Llancar la GUI de ZAP accessible per navegador (webswing) al 8080
docker run -u zap -p 8080:8080 -p 8090:8090 -i zaproxy/zap-stable zap-webswing.sh
-config api.addrs.addr.*autoritza els clients de l'API. En xarxes reals, restringeix les adreces en lloc d'usar.*. Ho aprofundirem a 06-04, quan l'API sigui protagonista.
Perquè ZAP a Docker arribi al staging de BazarNube que també corre a Docker, connecta'ls a la mateixa xarxa:
docker network create bazarnube-net
# ... arrenca l'app de BazarNube en aquesta xarxa ...
docker run --network bazarnube-net -u zap -i zaproxy/zap-stable \
zap.sh -daemon -host 0.0.0.0 -port 8090
# Dins d'aquesta xarxa, l'app es accessible pel seu nom de servei, p. ex. http://web:3000Primeres passes a la GUI
En obrir la GUI per primera vegada, ZAP pregunta si vols persistir la sessió. Per a feina seriosa a BazarNube tria "Yes, I want to persist this session": així conserves arbre de llocs, alertes i historial.
Zones principals de la interfície:
- Sites (esquerra): l'arbre de tot el descobert de BazarNube.
- Request / Response (centre): el detall de la petició seleccionada.
- History / Search / Alerts / Output (a baix): pestanyes de treball. Alerts és on viuràs.
- Barra de mode (a dalt a l'esquerra): el desplegable Safe/Protected/Standard/Attack que vam veure a 06-01. Posa'l en Protected.
Configurar el navegador i el proxy
ZAP escolta per defecte com a proxy a localhost:8080. Tens dos camins:
Opció A — Navegador integrat (recomanat per començar). ZAP pot llançar un Firefox/Chrome ja preconfigurat amb el proxy i el certificat posats. A la GUI, botó "Manual Explore" o "Explore your application" i Launch Browser. És la via sense fricció.
Opció B — El teu propi navegador. Apunta el proxy del sistema o del navegador a ZAP. Exemple de configuració manual del proxy:
Amb Firefox i un perfil dedicat per línia de comandes:
# Firefox usant ZAP com a proxy (perfil aillat per no embrutar el teu)
firefox -no-remote -profile /tmp/zap-profile \
-setDefaultBrowser about:blank &
# Despres configura el proxy manual 127.0.0.1:8080 en aquest perfilSi prefereixes una extensió, FoxyProxy permet alternar el proxy de ZAP amb un clic.
Instal·lar el certificat arrel per a HTTPS
BazarNube usa HTTPS. Perquè ZAP pugui veure i modificar el trànsit xifrat, actua com un man-in-the-middle legítim: genera certificats al vol signats per la seva pròpia CA arrel (ZAP Root CA). El teu navegador ha de confiar en aquesta CA, o veuràs errors de certificat a cada petició.
Passes:
- A la GUI:
Tools > Options > Network > Server Certificates(en versions antigues, Dynamic SSL Certificates). - Prem Save per exportar el certificat arrel a un fitxer, p. ex.
zap_root_ca.cer. - Importa'l com a CA de confiança al navegador o al sistema.
Exportar el certificat per línia de comandes (útil per automatitzar):
# Amb ZAP corrent com a dimoni i l'API al 8090
curl -s "http://127.0.0.1:8090/OTHER/network/other/rootCaCert/" \
-o zap_root_ca.cerConfiar en la CA a Linux (Debian/Ubuntu):
sudo cp zap_root_ca.cer /usr/local/share/ca-certificates/zap_root_ca.crt
sudo update-ca-certificatesA Firefox: Configuració > Privadesa i seguretat > Certificats > Mostra els certificats > Autoritats > Importa i marca "Confia per identificar llocs web".
Seguretat: la clau privada d'aquesta CA viu al teu ZAP. Qualsevol que la tingui podria interceptar el teu trànsit. No comparteixis el teu certificat arrel de ZAP ni el deixis instal·lat en navegadors d'ús diari. Genera'n un de nou periòdicament des del mateix panell.
Definir el context i el scope
Un context a ZAP és una agrupació lògica d'URL que representen una aplicació i les seves regles: quines URL li pertanyen (scope), com s'autentica, quins usuaris hi ha, què s'exclou. És la unitat clau per treballar amb focus.
Per a BazarNube crearem un context BazarNube-Staging:
- A l'arbre Sites, clic dret sobre el domini de staging > Include in Context > New Context.
- Defineix el scope amb expressions regulars d'inclusió i exclusió.
Exemple de patrons de scope:
| Tipus | Patró | Motiu |
|---|---|---|
| Incloure | https://staging\.bazarnube\.local.* |
Tota l'app de staging |
| Excloure | https://staging\.bazarnube\.local/logout.* |
Evita que l'spider tanqui la teva sessió |
| Excloure | https://staging\.bazarnube\.local/api/payments.* |
No disparar cobraments reals de prova |
| Excloure | .*pay\.tercer\.com.* |
Passarel·la externa: fora de scope |
El patró d'exclusió de
/logoutés un dels trucs més útils: sense ell, l'spider entra a l'enllaç de "Tancar sessió", perd la sessió autenticada i deixa de veure les zones privades.
Configurar l'autenticació de BazarNube
Gran part del risc de BazarNube (l'IDOR de /api/orders/{id}, el panell de venedor) està darrere del login. Perquè ZAP provi aquestes zones, cal ensenyar-li a autenticar-se i a mantenir la sessió.
BazarNube usa login per formulari que retorna un JWT en una cookie de sessió. Configuració al context:
1. Mètode d'autenticació (Context > Authentication). Tria Form-based Authentication i defineix la petició 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. Indicadors de sessió — com sap ZAP si segueix autenticat:
- Logged-in indicator (regex que apareix NOMÉS autenticat):
\"role\":\"seller\"o el text "Tancar sessió". - Logged-out indicator (regex que apareix en perdre la sessió):
Iniciar sessióo un401.
3. Gestió de sessió (Session Management). Per a JWT en capçalera, usa HTTP Header Based Session Management o Cookie-based si viatja en cookie.
4. Usuaris (Context > Users). Crea usuaris de prova de staging (mai credencials reals de producció):
Tenir dos usuaris permet provar control d'accés (pot comprador_test llegir les comandes de venedor_test?), que és l'essència de l'IDOR del backlog.
Com encaixa tot el flux de sessió:
graph TD
A[ZAP envia POST de login] --> B{Resposta conte<br/>logged-in indicator?}
B -->|Si| C[Sessio valida: guarda token/cookie]
B -->|No| D[Reintenta autenticacio]
C --> E[Spider i escaner usen la sessio]
E --> F{Es detecta<br/>logged-out indicator?}
F -->|Si| D
F -->|No| E
Verificació ràpida amb l'API de ZAP (context i usuari ja creats):
# Forcar autenticacio d'un usuari i comprovar que la sessio 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 tot funciona
Abans d'escanejar (lliçó 06-03), confirma aquesta llista:
- [ ] ZAP arrenca (GUI o dimoni) i el proxy escolta al 8080 / API al 8090.
- [ ] El navegador enruta per ZAP i no surten errors de certificat en HTTPS.
- [ ] En navegar per BazarNube, apareixen peticions a History i creix l'arbre Sites.
- [ ] Existeix el context
BazarNube-Stagingamb scope d'inclusió/exclusió correcte. - [ ] En fer Force User autenticat, ZAP accedeix al panell de venedor sense demanar login.
Prova de fum del proxy amb curl:
# Passar una peticio a traves del proxy de ZAP i ignorar la CA del sistema
curl -x http://127.0.0.1:8080 -k https://staging.bazarnube.local/ -I
# Hauria de respondre 200 i aparèixer la peticio a l'History de ZAPErrors Comuns i Consells
- Errors de certificat a cada pàgina: no has importat (o no has confiat en) la ZAP Root CA. Reexporta-la i importa-la com a autoritat.
- L'spider tanca la teva sessió: falta excloure
/logoutdel scope o no vas configurar el logged-out indicator. - ZAP no veu el trànsit del frontend React: el
fetch/XHR de la SPA pot ignorar el proxy del sistema; usa el navegador integrat de ZAP o configura el proxy al mateix navegador, no només al SO. - Usar credencials reals de producció: mai. Crea usuaris de prova exclusius de staging.
- Port 8080 ocupat: una altra app (o Tomcat del legacy Java) usa el 8080. Canvia el port de ZAP amb
-porto aTools > Options > Network > Local Servers/Proxies. - Consell: guarda el context exportat (
Context > Export Context) com a fitxer versionat; el reutilitzaràs a l'automatització de 06-04.
Exercicis
Exercici 1. Estàs interceptant BazarNube per HTTPS i el navegador mostra "La connexió no és segura" a totes les pàgines. Quina és la causa més probable i com ho resols?
Exercici 2. Escriu els patrons d'inclusió i exclusió del scope per a un context que cobreixi https://staging.bazarnube.local, eviti que l'spider tanqui sessió i no toqui la passarel·la externa pay.tercer.com.
Exercici 3. Vols que ZAP provi el panell de venedor, que exigeix login. Enumera els quatre elements que has de configurar al context perquè ZAP mantingui la sessió autenticada.
Solucions
Solució 1. El navegador no confia en la ZAP Root CA, que signa al vol els certificats que ZAP presenta. Solució: exportar el certificat arrel des de Tools > Options > Network > Server Certificates, importar-lo com a autoritat de confiança al navegador/sistema i recarregar. Alternativa ràpida: usar el navegador integrat de ZAP, que ja el porta configurat.
Solució 2.
- Incloure:
https://staging\.bazarnube\.local.* - Excloure:
https://staging\.bazarnube\.local/logout.* - Excloure:
.*pay\.tercer\.com.*
Els patrons són expressions regulars; recorda escapar els punts.
Solució 3. (1) Mètode d'autenticació (form-based amb la URL i el POST data de /api/auth/login); (2) indicadors de sessió (logged-in i logged-out) perquè ZAP detecti si segueix autenticat; (3) gestió de sessió (cookie o capçalera segons viatgi el JWT); (4) almenys un usuari de prova amb les seves credencials de staging.
Conclusió
Amb ZAP instal·lat, el certificat arrel confiat, el proxy enrutant el trànsit de BazarNube i un context amb scope i autenticació ben definits, tens la plataforma llesta per treballar de debò. Tota aquesta preparació no és burocràcia: és el que permet que l'escàner arribi a les zones autenticades on de veritat hi ha risc, sense sortir a atacar tercers.
A la lliçó següent, 06-03 Escaneig de Vulnerabilitats, posem la maquinària en marxa: explorarem BazarNube amb l'spider i l'AJAX Spider, deixarem treballar l'escàner passiu, llançarem l'escàner actiu amb una política adequada, i aprendrem a interpretar les alertes, fer triage de falsos positius i generar informes que mapegin les troballes al Top Ten i al backlog de BazarNube.
Curs d'OWASP: Directrius i Estàndards per a la Seguretat en Aplicacions Web
Mòdul 1: Introducció a OWASP
Mòdul 2: Principals Projectes d'OWASP
- OWASP Top Ten
- OWASP ASVS (Application Security Verification Standard)
- OWASP SAMM (Software Assurance Maturity Model)
- OWASP ZAP (Zed Attack Proxy)
- Altres Projectes Clau: WSTG, Cheat Sheets i Dependency-Check
Mòdul 3: OWASP Top Ten 2021 en Profunditat
- A01:2021 – Pèrdua de Control d'Accés
- A02:2021 – Errors Criptogràfics i Exposició de Dades Sensibles
- A03:2021 – Injecció
- Cross-Site Scripting (XSS) en Profunditat
- A04:2021 – Disseny Insegur
- A05:2021 – Configuració de Seguretat Incorrecta
- Entitats Externes XML (XXE)
- A06:2021 – Components Vulnerables i Desactualitzats
- A07:2021 – Errors d'Identificació i Autenticació
- A08:2021 – Errors d'Integritat de Programari i Dades (Deserialització Insegura)
- A09:2021 – Errors de Registre i Monitorització
- A10:2021 – Server-Side Request Forgery (SSRF)
Mòdul 4: OWASP ASVS (Application Security Verification Standard)
Mòdul 5: OWASP SAMM (Software Assurance Maturity Model)
Mòdul 6: OWASP ZAP (Zed Attack Proxy)
- Introducció a ZAP
- Instal·lació i Configuració
- Escaneig de Vulnerabilitats
- Automatització de Proves de Seguretat
Mòdul 7: Bones Pràctiques i Recomanacions
- Cicle de Vida de Desenvolupament Segur (SDLC)
- Modelatge d'Amenaces (Threat Modeling)
- Integració de Seguretat en DevOps (DevSecOps)
- Formació i Conscienciació en Seguretat
- Eines i Recursos Addicionals
Mòdul 8: Exercicis Pràctics i Casos d'Estudi
- Exercici 1: Identificació de Vulnerabilitats
- Exercici 2: Implementació de Controls de Seguretat
- Cas d'Estudi 1: Anàlisi d'un Incident de Seguretat
- Cas d'Estudi 2: Millora de la Seguretat en una Aplicació Web
