La lliçó anterior va acabar amb una pregunta que ni l'escàner de 05-01 ni la detecció de 05-02 no responen: aguantaria de debò? Un escàner comprova versions i una detecció observa el que passa, però cap dels dos no intenta encadenar tres debilitats petites —una capçalera absent, un límit de taxa que no existeix i un identificador predictible— fins a convertir-les en un compromís real. Això és el que fa un atacant, i això és el que simula una prova de penetració. Aquesta lliçó t'ensenya a encarregar-la, acotar-la, entendre-la i aprofitar-la, amb un enfocament defensiu: veuràs què es va trobar a l'entorn de Nimbus i, sobretot, com es va corregir cada cosa.

⚠️ Advertiment legal — aquesta és la lliçó més delicada del curs

Executar tècniques d'intrusió sobre un sistema aliè sense autorització escrita és un delicte, no una entremaliadura. A Espanya:

  • Art. 197 bis del Codi Penal: accedir o facilitar l'accés al conjunt o a una part d'un sistema d'informació vulnerant les mesures de seguretat, o interceptar transmissions no públiques, es castiga amb pena de presó. No cal causar dany ni copiar res: n'hi ha prou amb accedir.
  • Art. 264 i següents: danyar, esborrar, alterar o fer inaccessibles dades o sistemes aliens, amb penes agreujades si afecten infraestructures crítiques o un nombre elevat de sistemes.
  • Art. 197 ter: produir, facilitar o posseir eines concebudes per cometre aquests delictes també és punible quan s'hi destinen.

Conseqüències pràctiques: «només volia provar» no és eximent, l'absència de dany no elimina el tipus penal, un nmap intrusiu contra un tercer ja pot constituir un intent, i l'autorització ha de ser escrita, prèvia, signada per qui té capacitat per atorgar-la i vigent en la data de la prova. Al núvol necessites a més l'autorització del proveïdor a més de la del client.

Per això aquesta lliçó no conté exploits, ni payloads, ni ordres d'explotació. Descriu les fases de forma conceptual, mostra la verificació defensiva equivalent i desenvolupa amb detall com es corregeix el que s'ha trobat. El marc ètic i legal complet —inclosa la divulgació responsable i el perquè d'aquestes normes— es desenvolupa a 06-06. (Nota: la qualificació penal concreta depèn del cas; davant de qualsevol dubte, validació jurídica prèvia.)

Contingut

  1. Què és un pentest i què no ho és
  2. Modalitats: caixa negra, grisa i blanca
  3. Abast i regles d'enfrontament
  4. Les fases metodològiques
  5. Què passa a cada fase, i el seu equivalent defensiu
  6. Recorregut d'una prova autoritzada sobre l'entorn de Nimbus
  7. L'informe de pentest
  8. Què passa després: esmena i nova prova de verificació
  9. Divulgació responsable i bug bounty com a alternativa contínua
  10. Com contractar un pentest sent petit
  11. On practicar legalment

  1. Què és un pentest i què no ho és

Un pentest és una prova autoritzada en què un professional intenta comprometre un sistema fent servir les mateixes tècniques que un atacant real, amb un objectiu declarat i un informe com a producte. El seu valor no és trobar vulnerabilitats soltes —per a això hi ha 05-01— sinó demostrar l'impacte encadenant-les.

Escaneig automàtic Auditoria de compliment Pentest Red team
Pregunta Quines versions vulnerables tinc? Compleixo l'estàndard? Pot algú entrar i fins on arriba? Detectem i responem davant d'un adversari real?
Mètode Eina automatitzada Revisió documental i d'evidències Manual + eines, amb creativitat Campanya sigil·losa, multivector, amb enginyeria social
Durada Hores 1-3 setmanes 3-15 dies 1-3 mesos
Cost orientatiu (pime) 0-1.500 €/any 3.000-15.000 € 4.000-15.000 € 25.000 € o més
Ho sap l'equip No (només la direcció)
Què mesura Superfície coneguda Conformitat Explotabilitat real Capacitat de detecció i resposta
Quan triar-lo Sempre, continu Certificació o exigència de client (06-04) Abans d'un llançament, després d'un canvi gran, o anual Quan ja tens detecció madura

Per a Nimbus avui, un red team seria llençar els diners. Mesura la capacitat de detecció i resposta, i a 05-02 acabem de construir les primeres dotze deteccions: es contracta quan fa un any que funcionen. El que sí que escau és un pentest anual de l'aplicació i la infraestructura, que és on viuen el producte i el risc.

I una diferència que convé tenir clara: un pentest no demostra que un sistema sigui segur. Demostra que, en un termini acotat i amb un abast acotat, una persona concreta va trobar aquestes coses. Un informe sense troballes sol significar que l'abast era estret o que el temps va ser curt, no que el sistema sigui inexpugnable.


  1. Modalitats: caixa negra, grisa i blanca

Caixa negra Caixa grisa Caixa blanca
Què rep l'auditor Només el nom del domini Credencials d'usuari i documentació bàsica Codi font, arquitectura, credencials d'administració
Simula Un atacant extern sense informació Un client legítim o un empleat Un revisor amb accés total
Temps gastat a reconèixer 30-40 % 10 % 5 %
Profunditat assolida Baixa: es queda al perímetre Alta en la lògica de negoci Màxima, però s'allunya de l'atacant real
Cost per troballa El més alt El més baix Mitjà

La caixa grisa dona més valor per euro, i en un SaaS multi-tenant la diferència és abismal. El motiu és directe: a Nimbus, el risc principal no és que un desconegut hi entri, sinó que un client legítim vegi les dades d'un altre —l'IDOR d'01-04 és exactament això—. Un pentest de caixa negra no ho hauria trobat mai, perquè per provar-ho cal ser a dins amb dos comptes de dos tenants diferents. Pagar perquè algú dediqui tres dies a descobrir el que un nmap dona en deu minuts és un mal ús del pressupost.

Recomanació per a Nimbus: caixa grisa amb dos comptes de prova de dues clíniques fictícies diferents i un compte de rol suport, més accés de lectura a la documentació de l'API.


  1. Abast i regles d'enfrontament

Les regles d'enfrontament (rules of engagement) són el document que converteix una intrusió en un servei professional. Sense elles, la prova és legalment fràgil per a totes dues parts i operativament perillosa.

# ACORD D'ABAST I REGLES D'ENFRONTAMENT
Client: Nimbus Reservas, S.L.       Proveidor: <auditor>
Vigencia: 2026-05-11 a 2026-05-22   Versio: 1.1

## 1. Autoritzacio
Nimbus Reservas, S.L. autoritza expressament el proveidor a fer proves de
seguretat sobre els actius llistats al punt 2, a la finestra del punt 4.
Signat per Marta <cognoms>, CTO, amb capacitat per atorgar aquesta autoritzacio.
Autoritzacio del proveidor cloud: sollicitada i concedida el 2026-05-04 (ref. XXXX).

## 2. Actius INCLOSOS
- preprod.nimbusreservas.example  (SPA + API, entorn de preproduccio)
- api-preprod.nimbusreservas.example i subdominis de *.nimbusreservas.example
- Aplicacio mobil (build de preproduccio, lliurada a l'auditor)
- Comptes de prova: clinica-alfa@, clinica-beta@, soporte-test@

## 3. Actius EXCLOSOS  (fora d'abast de forma absoluta)
- Produccio (api.nimbusreservas.example i la seva base de dades)
- Passarela de pagament i proveidor d'email transaccional (tercers: A-11, A-12)
- Sistemes de la consultora de sistemes (A-19)
- Equips personals d'empleats i els seus comptes de correu
- Qualsevol tecnica d'enginyeria social sobre el personal (fora d'aquest contracte)

## 4. Finestra i intensitat
- Finestra: DL-DV 09:00-19:00 CEST. Fora de finestra: prohibit.
- Denegacio de servei, proves de carrega i forca bruta massiva: PROHIBIDES.
- Limit de taxa de l'auditor: maxim 20 peticions/segon.

## 5. Dades
- Prohibit descarregar, copiar o conservar dades de clients reals.
- Davant la troballa de dades reals en preproduccio: ATURAR, no descarregar,
  notificar en menys d'1 hora i documentar nomes el fet.
- Tota evidencia s'anonimitza i es lliura xifrada; es destrueix als 30 dies.

## 6. Condicio d'aturada
El proveidor atura la prova immediatament si: (a) provoca indisponibilitat,
(b) accedeix a dades personals reals, (c) troba indicis d'un compromis
PREEXISTENT, o (d) Nimbus ho sollicita per qualsevol canal del punt 7.

## 7. Contactes
- Emergencia 24/7: Lucia <telefon>   |   Suplent: Marta <telefon>
- Canal de troballes critiques: <canal segur>. Avis en < 2 h des de la troballa.

## 8. Troballes critiques en calent
Una troballa que permeti acces a dades de clients o control del sistema es
comunica IMMEDIATAMENT, sense esperar l'informe final, amb una recomanacio
de mitigacio provisional.

Cinc clàusules mereixen èmfasi. El punt 3 protegeix l'auditor tant com el client: Nimbus no pot autoritzar proves sobre la passarel·la de pagament perquè no és seva, i fer-ho seria exactament el delicte de l'advertiment inicial. L'autorització del proveïdor cloud (punt 1) és obligatòria i molts l'obliden: el proveïdor té una política de proves i saltar-se-la pot suspendre el compte. El punt 5 és el que evita convertir una auditoria en una bretxa: si preproducció té dades reals —recorda A-22, «classificació a revisar»—, descarregar-les crea l'incident que es volia prevenir. El punt 6c existeix perquè passa: de vegades l'auditor troba que ja hi ha algú a dins, i aquí la prova s'atura i s'activa el pla de 04-05. I el punt 8 és el que separa un servei útil d'un informe pòstum: si el dia 2 algú troba la manera de llegir les dades de totes les clíniques, no s'esperen dues setmanes.


  1. Les fases metodològiques

Les metodologies reconegudes —PTES, OSSTMM i, per a aplicacions web, l'OWASP Web Security Testing Guide (WSTG)— coincideixen en l'estructura. La WSTG és a més una llista de comprovació pública i gratuïta: si contractes un pentest d'aplicació, demanar cobertura WSTG és la forma més simple de comparar ofertes.

flowchart TD
    P["0. PREPARACIO\nAbast, regles,\nautoritzacio signada"] --> R["1. RECONEIXEMENT\nInformacio publica:\nDNS, subdominis, filtracions"]
    R --> E["2. ENUMERACIO\nPorts, serveis, rutes,\nparametres, rols"]
    E --> A["3. ANALISI DE\nVULNERABILITATS\nHipotesis prioritzades"]
    A --> X["4. EXPLOTACIO\nConfirmar l'impacte\namb el minim dany"]
    X --> PX["5. POST-EXPLOTACIO\nFins on s'arriba:\npivot, dades, persistencia"]
    PX --> I["6. INFORME\nEl producte real\ni la reunio de lliurament"]
    I --> RT["7. NOVA PROVA\nVerificar la correccio\n(sovint s'omet)"]
    X -.->|"impacte critic"| CE["Avis en calent\n(regla 8)"]

Dos avisos sobre el diagrama. El primer: la fase 4 no és l'objectiu, és la prova. Explotar serveix per demostrar que la vulnerabilitat és real i mesurar-ne l'impacte; un auditor professional explota just el necessari per documentar-ho i s'atura. El segon: la fase 7 és la que gairebé tothom omet, i sense ella no saps si vas pagar per una llista de deures que ningú no va fer.


  1. Què passa a cada fase, i el seu equivalent defensiu

Fase Què fa l'auditor Eines típiques La teva verificació defensiva
Reconeixement Recopila el que és públic: subdominis, registres DNS, certificats, tecnologies, credencials filtrades, perfils de l'equip amass, transparència de certificats, cercadors Fes-ho tu primer: enumera els teus subdominis des de la zona DNS i des dels registres de certificats (03-06), i apaga el que sobri
Enumeració Mapeja la superfície: ports, rutes ocultes, paràmetres, rols i fluxos de l'aplicació nmap, ffuf, gobuster, ZAP en mode spider Revisa quines rutes exposa el teu servidor i elimina taulers i documentació interna accessibles sense autenticació
Anàlisi Formula hipòtesis prioritzades: on és més probable que falli l'autorització, la validació o la configuració ZAP/Burp, testssl.sh, revisió manual Executa testssl.sh i l'escàner de 05-01; corregeix el que és evident abans del pentest perquè l'auditor gasti el seu temps en el que tu no pots veure
Explotació Confirma la hipòtesi amb el mínim dany possible i captura evidència Marcs com Metasploit per al que és conegut; gairebé tot el d'aplicació és manual Res a fer aquí llevat de tenir còpies verificades (04-06) i avisar la guàrdia que la prova és en curs
Post-explotació Mesura fins on s'arriba: pivot a altres xarxes, accés a dades, persistència Eines pròpies de l'entorn compromès Mesura la teva segmentació tu mateix amb les proves de connectivitat de 05-04
Informe Redacta, prioritza i presenta Exigeix el format del §7 al contracte

Sobre les eines esmentades, amb la precisió que exigeix l'enfocament d'aquesta lliçó: nmap i testssl.sh són de reconeixement i verificació i els fas servir tu cada dia; ZAP i Burp són proxies d'intercepció que permeten veure i modificar les peticions que el teu propi navegador envia —el seu ús legítim és contra la teva aplicació—; ffuf i gobuster proven llistes de rutes i fitxers contra un servidor propi per descobrir el que va quedar publicat sense voler; hydra prova credencials, i només té un ús admissible aquí: comprovar sobre els teus propis comptes de prova que el bloqueig per intents fallits i el límit de taxa funcionen, que és una verificació defensiva; i Metasploit és un marc que empaqueta mòduls d'explotació de vulnerabilitats conegudes i l'ús del qual queda dins de l'abast autoritzat i mai en aquest material.

Una observació que estalvia diners: gairebé tot el que un pentest troba de veritat valuós en un SaaS és manual i de lògica de negoci. L'IDOR, el flux de recuperació de contrasenya que permet enumerar usuaris, l'endpoint d'informes que ignora el rol. Cap eina no ho automatitza, i per això es paga per hores d'una persona amb criteri.


  1. Recorregut d'una prova autoritzada sobre l'entorn de Nimbus

La Marta contracta cinc dies de caixa grisa sobre preproducció, amb les regles del §3. Aquestes són les cinc troballes i la seva correcció.

6.1 IDOR residual a l'endpoint d'informes

El WHERE tenant_id es va aplicar als endpoints de reserves i clients, però el mòdul d'informes es va escriure després i consulta amb una vista agregada que ningú no va revisar. Amb el compte de la clínica Alfa, canviant un identificador de la petició, s'obtenien totals de facturació de la clínica Beta.

# ABANS — el filtre depen que el desenvolupador se'n recordi. A informes,
# ningu no se'n va recordar: `tenant_id` arriba del parametre i no de la sessio.
@router.get("/informes/facturacion")
def facturacio(tenant_id: int, des_de: date, fins_a: date, db=Depends(get_db)):
    return db.execute(VISTA_FACTURACIO, {"t": tenant_id, "d": des_de, "h": fins_a})

# DESPRES — el tenant MAI no arriba del client: es deriva del token verificat.
# Aquesta dependencia es reutilitza a tots els endpoints i fa impossible la fallada
# per oblit, en lloc de confiar en la disciplina de qui escriu cada ruta.
def tenant_actual(usuari: Usuari = Depends(usuari_actual)) -> int:
    return usuari.tenant_id

@router.get("/informes/facturacion")
def facturacio(des_de: date, fins_a: date,
               tenant_id: int = Depends(tenant_actual),   # <- de la sessio
               db=Depends(get_db)):
    return db.execute(VISTA_FACTURACIO, {"t": tenant_id, "d": des_de, "h": fins_a})

La correcció de fons no és la línia canviada: és que l'identificador de client deixa de ser un paràmetre d'entrada a tota l'API. A més es va activar RLS a la vista agregada, que ja protegia les taules base però no la vista (03-07). La generalització d'aquest patró a tota l'aplicació es desenvolupa a 05-05.

6.2 Límit de taxa absent a l'inici de sessió

L'auditor va comprovar que es podien enviar 4.000 intents d'autenticació en cinc minuts sense bloqueig ni alentiment: la porta oberta al credential stuffing de 02-02.

# Zona compartida de 10 MB: ~160.000 IP en seguiment. 5 peticions/minut.
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;

location /api/v1/auth/login {
    limit_req zone=login burst=5 nodelay;  # 5 de marge sense retardar les legitimes
    limit_req_status 429;                  # codi correcte: "massa peticions"
    proxy_pass http://api_upstream;
}

I a l'aplicació, bloqueig per compte a més de per IP, perquè el password spraying fa servir una IP diferent per intent: després de 10 fallades sobre el mateix compte en 15 minuts, s'exigeix segon factor o es retarda exponencialment. Tots dos alimenten la detecció D-01 de 05-02.

6.3 Capçalera de seguretat que hi faltava

Faltava Content-Security-Policy a la SPA, cosa que convertia qualsevol XSS en un robatori de sessió complet. Es va desplegar primer en mode informe per no trencar l'aplicació:

# Fase 1 (dues setmanes): NO bloqueja, nomes informa del que trencaria.
add_header Content-Security-Policy-Report-Only
  "default-src 'self'; script-src 'self'; connect-src 'self' https://api.nimbusreservas.example;
   frame-ancestors 'none'; report-uri /csp-report" always;

Després de revisar els informes i ajustar dos orígens legítims, es va canviar a Content-Security-Policy en mode bloquejant. El conjunt complet de capçaleres i el perquè de cadascuna és a 05-05.

6.4 Subdomini oblidat amb TLS obsolet

El reconeixement va trobar pruebas-2019.nimbusreservas.example, servit per un host que acceptava TLS 1.0 i suites amb RC4, i apuntant a una IP que ja no estava sota control de Nimbus: candidat a apropiació de subdominis (05-04).

testssl.sh --protocols --vulnerable pruebas-2019.nimbusreservas.example
 TLSv1.0    offered (NOT ok)
 TLSv1.1    offered (NOT ok)
 TLSv1.3    not offered
 ROBOT      VULNERABLE
 Certificate expired 412 days ago

Correcció: eliminar el registre DNS —no aplicar pedaços a un host que ha de desaparèixer, com ja vam concloure a 05-01— i afegir a l'inventari una revisió trimestral de la zona DNS.

6.5 Credencial per omissió en un tauler intern

Un tauler d'administració de cues, desplegat «temporalment» fa vuit mesos, responia a /flower amb admin/admin i sense autenticació al proxy. Des d'allà es veien els identificadors i els correus de les tasques en curs.

# docker-compose.preprod.yml — ABANS
flower:
  image: mher/flower:latest
  ports: ["5555:5555"]        # publicat a la interficie externa del host

# DESPRES
flower:
  image: mher/flower:2.0.1    # versio fixada, no `latest` (04-04)
  ports: ["127.0.0.1:5555:5555"]   # nomes accessible des del mateix host
  environment:
    FLOWER_BASIC_AUTH: "${FLOWER_AUTH}"   # credencial des del gestor de secrets

L'accés passa a fer-se per túnel SSH a través del bastió. Aquesta troballa és la més instructiva de les cinc: no és una vulnerabilitat de programari, no té CVE, cap escàner de 05-01 no l'hauria marcada com a crítica i feia vuit mesos que estava exposada. És el mateix patró que el python -m http.server: el que és temporal i s'hi queda.


  1. L'informe de pentest

L'informe és el producte. Un auditor que lliura un bolcat d'eina amb 80 pàgines de sortida sense prioritzar no ha fet la feina, i aquest és el senyal més fiable per no repetir amb aquell proveïdor.

Secció Per a qui Què ha de contenir
Resum executiu Marta 1 pàgina sense argot: què es va provar, què es va aconseguir, risc de negoci i quina decisió es demana. Si la Marta necessita ajuda per entendre'l, està mal escrit
Abast i limitacions Tothom Què va entrar, què no, en quina finestra i què no es va poder provar
Metodologia Tècnic i auditor (06-04) PTES/WSTG, fases cobertes, eines i versions
Troballes Lucía i Iván Una per fitxa, amb evidència, reproducció, CVSS i correcció
Recomanació prioritzada Marta i Lucía Pla per ordre d'impacte/esforç, no una llista alfabètica
Annexos Iván Sortides completes, captures, peticions
### PT-2026-01 · Acces a dades de facturacio d'altres clients (IDOR)

**Severitat: Critica** · CVSS 8.1 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N)
**Actiu:** api-preprod · endpoint `GET /api/v1/informes/facturacion`
**Estat:** Comunicat en calent el 2026-05-12 a les 11:40 (regla 8)

**Descripcio.** L'endpoint accepta el parametre `tenant_id` del client i no el
contrasta amb el tenant del token. Un usuari autenticat de qualsevol clinica
pot llegir els agregats de facturacio de qualsevol altra modificant un numero.

**Reproduccio.** (1) Autenticar-se com a `clinica-alfa@` (tenant 41). (2) Invocar
l'endpoint amb `tenant_id=42`. (3) La resposta retorna els imports del
tenant 42. Evidencia: peticio i resposta anonimitzades a l'annex A.3.

**Impacte.** Fuita d'informacio economica entre clients competidors i, per la seva
naturalesa, incident notificable. El mateix patro aplicat als endpoints de
cites exposaria dades de salut (encara mes greu).

**Correccio recomanada.** Derivar el tenant del token mitjancant una dependencia
comuna a tota l'API i activar RLS sobre la vista agregada. Afegir una prova
automatica d'aillament entre tenants al CI.

**Esforc estimat:** 4 h de desenvolupament + 2 h de proves.
**Verificacio a la nova prova:** repetir (1)-(3); resposta esperada 403.

Els elements que el fan accionable són els mateixos de 05-01, amb dos afegits propis del pentest: la reproducció pas a pas —sense ella, el desenvolupador no pot confirmar la correcció— i el criteri de verificació de la nova prova, que fixa per endavant què es considerarà arreglat.


  1. Què passa després: esmena i nova prova de verificació

L'error clàssic és arxivar l'informe. El cicle correcte és curt i té propietaris:

  1. Reunió de lliurament amb l'auditor, la Marta, la Lucía i l'Iván. Es discuteix cada troballa fins que l'equip l'entén; un informe que es lliura per correu i no s'explica perd la meitat del seu valor.
  2. Pla d'esmena amb propietari i data, fent servir la política de terminis de 05-01: crítiques en 7 dies, altes en 30. Cada troballa es converteix en un issue amb criteri d'acceptació.
  3. Actualització del registre de riscos de 04-01. L'IDOR residual no és una troballa solta: modifica el risc R-04 (fuita de dades entre clients), el residual del qual estava calculat assumint que el control C-05 estava implantat. Estava implantat a mitges, que és la lliçó de 04-03 sobre implantat davant d'eficaç.
  4. Nova prova de verificació (retest), inclosa al contracte original i no com a servei a part. És un exercici curt —normalment un o dos dies— que només comprova les troballes corregides i produeix un annex amb l'estat final. Sense nova prova, el pentest mesura el passat.
  5. Lliçons estructurals. Si van aparèixer dos IDOR, el problema no són dues línies: és que l'autorització es decideix a cada ruta. La correcció estructural —la dependència comuna— evita el tercer.

  1. Divulgació responsable i bug bounty com a alternativa contínua

Un pentest anual és una foto; els investigadors externs miren tot l'any. Per a una pime hi ha tres graons, i el primer és gratuït i obligatori:

Graó Què és Cost Per a Nimbus
Política de divulgació (VDP) Una pàgina que diu com reportar una fallada, quins compromisos assumeixes i que no emprendràs accions legals contra qui investigui de bona fe. Es publica a /.well-known/security.txt 0 € Fes-ho ja. Sense això, qui trobi una fallada o no sap a qui escriure o tem la denúncia, i la fallada acaba en un altre lloc
Bug bounty privat Recompenses econòmiques a un grup reduït d'investigadors convidats 3.000-10.000 €/any Quan el pentest anual ja no trobi crítiques
Bug bounty públic Obert a qualsevol, en plataforma 15.000 €/any o més Fora d'abast avui
# https://nimbusreservas.example/.well-known/security.txt
Contact: mailto:[email protected]
Expires: 2027-01-01T00:00:00.000Z
Preferred-Languages: ca, es, en
Policy: https://nimbusreservas.example/seguridad/divulgacion
Acknowledgments: https://nimbusreservas.example/seguridad/gracias

Advertiment de gestió: un bug bounty sense capacitat de resposta és pitjor que no tenir-lo. Si arriben 40 informes i ningú no els tria en 48 hores, la comunitat ho publica i la reputació (A-20) pateix més que amb la fallada original. L'ètica de la divulgació, els terminis raonables i el conflicte entre investigador i empresa es desenvolupen a 06-06.


  1. Com contractar un pentest sent petit

Què demanar a la petició d'oferta, i són cinc coses concretes: metodologia declarada (PTES o WSTG), perfil i certificacions nominals de qui l'executarà (no de l'empresa), dies-persona reals dedicats —la variable que determina la qualitat—, nova prova de verificació inclosa, i un informe d'exemple anonimitzat, que és el millor predictor del que rebràs.

Certificació Què acredita Senyal
OSCP / OSWE Examen pràctic de 24-48 h comprometent màquines reals Molt bona: és fer, no recordar
CREST (CRT, CCT) Certificació del professional i de l'empresa, amb procés auditat Molt bona, sobretot per al proveïdor
GPEN, GWAPT (SANS) Formació sòlida, examen teoricopràctic Bona
CEH Coneixement ampli, examen tipus test Feble per si sola

Preu orientatiu a Espanya per a una pime: 4.000-8.000 € per una aplicació web amb API, en caixa grisa, 5 dies-persona amb informe i nova prova; 8.000-15.000 € si s'hi afegeixen infraestructura cloud i aplicació mòbil. Cadència raonable: anual, més una prova addicional davant de canvis arquitectònics importants (mòdul nou amb dades sensibles, canvi de proveïdor d'identitat, migració d'infraestructura). Amb 18.000 €/any, Nimbus es pot permetre un pentest anual d'aplicació si accepta que aquest és el desemborsament únic més gran del pressupost, i la decisió és defensable: A-04 és el producte.

Tres senyals d'alarma en comparar ofertes: preu tancat sense conèixer l'abast, «pentest automatitzat» (això és un escaneig amb un altre nom i un altre preu), i negar-se a lliurar un informe d'exemple.


  1. On practicar legalment

Practicar explotació és necessari per entendre la defensa, i només hi ha un lloc on fer-ho: entorns dissenyats per a això.

Entorn Què és Per a què
OWASP Juice Shop Aplicació web moderna deliberadament vulnerable; s'executa en local amb Docker Aprendre el Top 10 d'OWASP amb una aplicació realista
DVWA Clàssic en PHP amb nivells de dificultat Veure la mateixa fallada amb i sense protecció
TryHackMe Recorreguts guiats amb màquines de laboratori Començar des de zero de forma estructurada
HackTheBox Màquines i laboratoris de dificultat creixent Nivell intermedi i avançat
VulnHub / entorn propi Màquines virtuals vulnerables a la teva xarxa aïllada Practicar sense connexió i sense límits

La regla, sense matisos: si el sistema no és teu i no tens autorització escrita, no és un laboratori. No ho són el web de la teva antiga empresa, ni el d'un proveïdor que «segur que ho agrairà», ni el d'un familiar. Els laboratoris de la taula existeixen precisament perquè mai no hi hagi excusa. I en un entorn professional, aquesta pràctica es fa a més en una xarxa aïllada, amb instantànies i sense connexió a la xarxa corporativa.


Errors Comuns i Consells

  • Encarregar un pentest sense autorització escrita ni regles d'enfrontament. Exposa legalment les dues parts i deixa sense marc el que passa si alguna cosa cau.
  • Triar caixa negra per «realisme». En un SaaS multi-tenant pagues reconeixement en lloc de profunditat, i el risc principal —fuita entre clients— es queda sense provar.
  • Provar contra producció sense necessitat. Si preproducció és equivalent, es prova allà; i si no ho és, arreglar aquesta diferència és més urgent que el pentest.
  • No excloure els tercers. No pots autoritzar proves sobre la passarel·la de pagament ni sobre la consultora: no són teus.
  • Contractar sense nova prova de verificació. Sense verificació, l'informe descriu un sistema que ja no existeix i ningú no sap si es va corregir.
  • Tractar les troballes com a incidències soltes. Dos IDOR no són dos errors: són un patró de disseny de l'autorització.
  • Consell: passa-li a l'auditor el resultat de 05-01. Si ja has corregit el que un escàner troba, els seus cinc dies se'n van al que cap eina no veu. És la forma més directa de multiplicar el valor del que pagues.
  • Consell: publica avui el teu security.txt. Costa mitja hora, és gratis i determina si la propera fallada que algú trobi arriba a la teva bústia o a un altre lloc.
  • Consell: avisa la teva pròpia guàrdia. Amb les deteccions de 05-02 actives, un pentest generarà alertes. Que saltin i s'atenguin és, de fet, una prova gratuïta que la detecció funciona: anota-ho com a verificació.

Exercicis

Exercici 1 — Corregir unes regles d'enfrontament

Un proveïdor envia aquest resum d'abast. Identifica almenys sis problemes i reescriu les clàusules afectades.

Abast: infraestructura i aplicacions de Nimbus Reservas.
Dates: maig de 2026. Horari: sense restriccio.
Es provaran tots els sistemes accessibles des d'Internet associats a l'empresa,
inclosos serveis al nuvol i proveidors connectats.
Es permet l'us de qualsevol tecnica, inclosa l'enginyeria social telefonica.
Les troballes es lliuraran a l'informe final.
Contacte: el correu del comercial.

Exercici 2 — Decidir la modalitat i el pressupost

Nimbus llança al setembre un mòdul de teleconsulta amb vídeo i notes clíniques. La Marta disposa de 9.000 € per a seguretat ofensiva aquest any i pregunta què contractar.

  1. Pentest, red team, auditoria o bug bounty? Justifica-ho.
  2. Modalitat i abast concrets, incloent-hi quins comptes i què s'exclou.
  3. Com repartir els 9.000 € i què es fa amb el que sobri.

Exercici 3 — Redactar una troballa i la seva correcció

Durant la prova, l'auditor descobreix que el flux de recuperació de contrasenya respon "Correu no registrat" quan l'adreça no existeix i "T'hem enviat un enllaç" quan sí, cosa que permet enumerar quins correus són clients de cada clínica. En un SaaS usat per clíniques de fisioteràpia, saber que una adreça és client ja és informació sensible.

  1. Redacta la fitxa de la troballa amb el format del §7, assignant severitat amb criteri.
  2. Escriu la correcció en python explicant per què funciona.
  3. Indica com es verificaria a la nova prova i quina detecció de 05-02 ho cobriria.

Solucions

Exercici 1

# Problema Correcció
1 «Infraestructura i aplicacions»: abast indeterminat, impossible de contractar i de defensar jurídicament Llista tancada de dominis, IP i aplicacions inclosos, més una llista explícita d'exclosos
2 «Maig de 2026»: l'autorització ha de tenir dates exactes d'inici i fi Finestra 2026-05-11 a 2026-05-22, i prohibició expressa fora d'ella
3 «Horari sense restricció»: proves nocturnes sense ningú de guàrdia; si alguna cosa cau, cau fins al matí DL-DV 09:00-19:00 CEST, amb la guàrdia avisada
4 «Proveïdors connectats»: és la clàusula més greu. Nimbus no pot autoritzar proves sobre la passarel·la, el proveïdor de correu ni la consultora, i fer-ho exposaria totes dues parts a l'art. 197 bis Exclusió absoluta de tercers, i autorització expressa del proveïdor cloud per al que sí que és de Nimbus
5 «Qualsevol tècnica, inclosa enginyeria social»: fora de contracte, sense base per tractar dades del personal i amb implicacions laborals Excloure l'enginyeria social o contractar-la a part, amb informació prèvia i validació legal (06-06)
6 «Les troballes es lliuraran a l'informe final»: una crítica trobada el dia 2 esperaria dues setmanes Clàusula d'avís en calent: notificació en menys de 2 h per a troballes crítiques, amb mitigació provisional
7 Contacte: el comercial: no està disponible 24/7 ni sap què fer Contacte tècnic d'emergència amb telèfon i suplent
8 Falten condició d'aturada, tractament de dades reals i límit d'intensitat Afegir els punts 4, 5 i 6 de la plantilla del §3

Exercici 2

(1) Pentest, sens dubte. Red team queda descartat perquè mesura detecció i resposta, i les deteccions de 05-02 fa mesos, no anys, que existeixen: mesuraria un fracàs previsible per un preu molt alt. L'auditoria de compliment respon a una altra pregunta i es tractarà a 06-04. El bug bounty exigeix capacitat de resposta que Nimbus encara no té. I el moment és el correcte: un mòdul amb vídeo i notes clíniques són dades de salut, és una superfície nova i és exactament quan convé provar, abans del llançament i no després.

(2) Modalitat i abast. Caixa grisa, amb dos comptes de clíniques diferents, un compte de pacient i un de suport, més la documentació de l'API i del flux de vídeo. Abast: el mòdul de teleconsulta complet (creació de sala, control d'accés a la sala, notes clíniques, adjunts i el seu xifratge camp a camp de 03-07) més els endpoints de l'API que toca, en preproducció. Exclosos: producció, el proveïdor de vídeo, la passarel·la, el correu transaccional i tota enginyeria social. Es demana cobertura OWASP WSTG i API Top 10 (05-05), amb dues preguntes explícites per a l'auditor: pot un pacient entrar a la sala d'un altre? i pot una clínica veure les notes d'una altra?

(3) Repartiment. ~6.500 € en 5 dies-persona de caixa grisa amb informe i nova prova de verificació inclosa; ~1.000 € reservats per a una segona volta curta si apareixen crítiques que exigeixin redisseny; i ~1.500 € sense gastar fins després de l'informe. El que sobri no es gasta en més ofensiva: es gasta a corregir. L'error més car del sector és consumir el pressupost a trobar i quedar-se sense res per arreglar. A més, gratis: publicar el security.txt i executar 05-01 sobre el mòdul abans que arribi l'auditor, perquè els seus dies es dediquin a la lògica de negoci.

Exercici 3

(1) Fitxa:

### PT-2026-04 · Enumeracio d'usuaris a la recuperacio de contrasenya

**Severitat: Mitjana** · CVSS 5.3 (AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N)
**Actiu:** api-preprod · `POST /api/v1/auth/recuperar`

**Descripcio.** La resposta difereix segons existeixi o no el compte, cosa que permet
comprovar de forma massiva i sense autenticacio si una adreca es client.

**Reproduccio.** Enviar la peticio amb un correu inexistent i amb un de valid i
comparar cos, codi d'estat i temps de resposta.

**Impacte.** Per si sola es baixa, pero en un SaaS de cliniques de fisioterapia
**saber que una adreca es pacient d'una clinica concreta ja es una dada de
salut per inferencia**, amb les implicacions de l'art. 9 del RGPD (06-03).
A mes alimenta el credential stuffing (02-02) en confirmar comptes valids.

**Correccio.** Resposta identica en tots els casos i temps de resposta
constant. Afegir limit de taxa per IP i per correu.

**Verificacio a la nova prova:** 200 peticions alternant correus valids i invalids;
cos, codi i temps han de ser indistingibles.

La severitat Mitjana i no Baixa és el judici important: el CVSS base la tracta com a fuita menor d'informació, però el grup ambiental de 05-01 la puja pel context de negoci. És justament el que un escàner no pot calcular.

(2) Correcció:

@router.post("/auth/recuperar", status_code=202)
async def recuperar(dades: PeticioRecuperacio, fons: BackgroundTasks):
    inici = time.monotonic()
    usuari = repo.buscar_per_email(dades.email)   # pot existir o no

    if usuari:
        # L'enviament va a segon pla: la seva durada no altera la resposta.
        fons.add_task(enviar_enllac_recuperacio, usuari)
    else:
        # Es registra l'intent per a la deteccio, pero NO es diu a fora.
        log.info("auth.recuperar.desconegut", extra={"camps": {"ip": ...}})

    # Temps de resposta constant: sense aixo, l'atacant distingeix per latencia
    # encara que el missatge sigui identic. Es el canal lateral que gairebe tothom oblida.
    await asyncio.sleep(max(0, 0.35 - (time.monotonic() - inici)))

    # Missatge IDENTIC en tots dos casos, i codi 202 en tots dos casos.
    return {"missatge": "Si l'adreca esta registrada, rebras un enllac."}

Funciona perquè elimina les tres vies per les quals es filtra la diferència: el missatge, el codi d'estat i el temps. La tercera és la que s'oblida: sense l'anivellament temporal, enviar un correu real triga 300 ms més i l'atacant mesura aquesta diferència amb precisió. El mateix raonament s'aplica al registre de comptes i al canvi de correu, que són els altres dos punts on aquesta fallada reapareix.

(3) Verificació i detecció. A la nova prova s'envien 200 peticions alternant adreces vàlides i invàlides i es comparen cos, codi i distribució de temps: si la latència mitjana dels vàlids difereix de forma consistent, la troballa segueix oberta. La detecció que ho cobreix és una variant de D-01: més de 20 peticions a /auth/recuperar des d'una IP en 5 minuts, o més de 100 correus diferents provats en una hora, amb severitat S3 i bloqueig automàtic per fail2ban —una de les accions que 05-02 va classificar com a segures d'automatitzar per ser reversibles—.


Conclusió

Ara saps què és i què no és un pentest: una prova autoritzada que demostra impacte encadenant debilitats, diferent de l'escaneig (superfície coneguda), de l'auditoria (conformitat) i del red team (capacitat de detecció), amb la seva durada, el seu cost orientatiu i el criteri per triar cadascun —i amb la conclusió que per a Nimbus avui un red team seria llençar els diners—. Saps que un pentest no demostra que un sistema sigui segur, i que un informe sense troballes gairebé sempre significa abast estret o temps curt. Coneixes les tres modalitats i per què la caixa grisa dona més valor per euro en un SaaS multi-tenant: el risc principal no és que hi entri un desconegut, sinó que un client legítim vegi les dades d'un altre, i això només es prova des de dins amb dos comptes.

T'endus la plantilla d'acord d'abast i regles d'enfrontament amb les seves clàusules crítiques: actius exclosos —no pots autoritzar proves sobre tercers—, autorització del proveïdor cloud, finestra i intensitat, prohibició de descarregar dades reals, condició d'aturada per compromís preexistent, contacte d'emergència 24/7 i avís en calent de troballes crítiques. Coneixes les fases metodològiques de PTES/OSSTMM/WSTG i què passa a cadascuna, sempre amb el seu equivalent defensiu: enumera els teus propis subdominis, executa testssl.sh, corregeix el que un escàner veu abans que arribi l'auditor i mesura la teva segmentació tu mateix. I saps el que estalvia diners: el veritablement valuós en un SaaS és manual i de lògica de negoci.

Has recorregut una prova autoritzada real sobre preproducció amb les seves cinc troballes i les seves correccions: l'IDOR residual a informes, resolt fent que el tenant_id deixi de ser un paràmetre d'entrada a tota l'API; el límit de taxa absent, amb limit_req a Nginx i bloqueig per compte per al password spraying; la CSP que hi faltava, desplegada primer en Report-Only; el subdomini oblidat amb TLS obsolet, que s'elimina en lloc d'aplicar-hi pedaços; i la credencial per omissió del tauler de cues, la troballa més instructiva perquè no té CVE, cap escàner no l'hauria prioritzada i és el mateix patró que el http.server: el que és temporal i s'hi queda. Saps què ha de contenir l'informe, com es redacta una troballa amb reproducció pas a pas i criteri de nova prova, i per què lliurar un bolcat d'eina és el senyal per canviar de proveïdor. Saps què passa després: reunió de lliurament, pla amb propietaris i terminis, actualització del risc R-04 al registre de 04-01, nova prova de verificació inclosa al contracte i correcció estructural en lloc de pedaç puntual. I saps enquadrar la divulgació responsable —publica avui el teu security.txt, costa mitja hora— i el bug bounty com a graó posterior que no s'ha d'obrir sense capacitat de resposta, amb el tractament ètic i legal complet esperant-te a 06-06. Finalment, saps contractar: què demanar, què acrediten OSCP i CREST, quant costa, cada quant fer-ho i en quins laboratoris —Juice Shop, DVWA, TryHackMe, HackTheBox— es practica l'explotació, que són l'únic lloc on practicar-la.

Fixa't en quantes de les cinc troballes eren, en el fons, problemes de xarxa i d'exposició: un tauler publicat a la interfície externa del host, un subdomini que apuntava a una IP aliena, un servei accessible des d'on no havia de ser-ho. I recorda el que segueix pendent des de 05-01: PostgreSQL escoltant a 0.0.0.0:5432, SSH obert a tot Internet i la consultora amb accés permanent. A Seguretat en Xarxes (05-04) dibuixem la xarxa de Nimbus tal com està, la redissenyem per zones, tanquem aquests tres forats amb grups de seguretat i bastió, muntem l'accés remot amb WireGuard, arreglem la wifi de convidats i el DNS, i —el més important— comprovem amb proves de connectivitat que la segmentació funciona de debò, perquè un disseny no provat és només un dibuix bonic.

Curs de Fonaments de Seguretat Informàtica

Mòdul 1: Introducció a la Seguretat Informàtica

Mòdul 2: Ciberseguretat

Mòdul 3: Criptografia

Mòdul 4: Gestió de Riscos i Mesures de Protecció

Mòdul 5: Eines i Tècniques de Seguretat

Mòdul 6: Bones Pràctiques i Normatives

Mòdul 7: Projecte Final

© Copyright 2026. Tots els drets reservats