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

  1. Formes d'instal·lar ZAP
  2. Instal·lació amb Docker
  3. Primeres passes a la GUI
  4. Configurar el navegador i el proxy
  5. Instal·lar el certificat arrel per a HTTPS
  6. Definir el context i el scope
  7. Configurar l'autenticació de BazarNube
  8. 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.1

Comprova que tens Java disponible si uses el paquet cross-platform:

java -version   # Ha de ser 17 o superior per a ZAP 2.14+

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:3000

Primeres 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:

Servidor proxy HTTP:  127.0.0.1
Port:                 8080
Usar el mateix proxy per a HTTPS: si

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 perfil

Si 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:

  1. A la GUI: Tools > Options > Network > Server Certificates (en versions antigues, Dynamic SSL Certificates).
  2. Prem Save per exportar el certificat arrel a un fitxer, p. ex. zap_root_ca.cer.
  3. 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.cer

Confiar 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-certificates

A 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:

  1. A l'arbre Sites, clic dret sobre el domini de staging > Include in Context > New Context.
  2. 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/json

2. 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 un 401.

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ó):

Usuari 1:  comprador_test  / Password123!
Usuari 2:  venedor_test    / Password123!

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-Staging amb 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 ZAP

Errors 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 /logout del 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 -port o a Tools > 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

Mòdul 3: OWASP Top Ten 2021 en Profunditat

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)

Mòdul 7: Bones Pràctiques i Recomanacions

Mòdul 8: Exercicis Pràctics i Casos d'Estudi

Mòdul 9: Avaluació i Certificació

© Copyright 2026. Tots els drets reservats