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
nmapintrusiu 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
- Què és un pentest i què no ho és
- Modalitats: caixa negra, grisa i blanca
- Abast i regles d'enfrontament
- Les fases metodològiques
- Què passa a cada fase, i el seu equivalent defensiu
- Recorregut d'una prova autoritzada sobre l'entorn de Nimbus
- L'informe de pentest
- Què passa després: esmena i nova prova de verificació
- Divulgació responsable i bug bounty com a alternativa contínua
- Com contractar un pentest sent petit
- On practicar legalment
- 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 | Sí | Sí | Sí | 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.
- 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.
- 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.
- 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.
- 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.
- 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).
TLSv1.0 offered (NOT ok)
TLSv1.1 offered (NOT ok)
TLSv1.3 not offered
ROBOT VULNERABLE
Certificate expired 412 days agoCorrecció: 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 secretsL'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.
- 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.
- 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:
- 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.
- 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ó.
- 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ç.
- 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.
- 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.
- 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/graciasAdvertiment 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.
- 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.
- 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.
- Pentest, red team, auditoria o bug bounty? Justifica-ho.
- Modalitat i abast concrets, incloent-hi quins comptes i què s'exclou.
- 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.
- Redacta la fitxa de la troballa amb el format del §7, assignant severitat amb criteri.
- Escriu la correcció en
pythonexplicant per què funciona. - 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
- Conceptes Bàsics de Seguretat Informàtica
- Tipus d'Amenaces i Vulnerabilitats
- Principis de la Seguretat Informàtica
- Actius, Superfície d'Atac i Actors d'Amenaça
Mòdul 2: Ciberseguretat
- Definició i Abast de la Ciberseguretat
- Tipus d'Atacs Cibernètics
- Enginyeria Social i Pesca de Credencials
- Mesures de Protecció en Ciberseguretat
- Identitat, Autenticació i Control d'Accés
- Casos d'Estudi d'Incidents de Ciberseguretat
Mòdul 3: Criptografia
- Introducció a la Criptografia
- Criptografia Simètrica
- Criptografia Asimètrica
- Funcions Hash, HMAC i Emmagatzematge de Contrasenyes
- Protocols Criptogràfics
- Gestió de Claus, Certificats i PKI
- Aplicacions de la Criptografia
Mòdul 4: Gestió de Riscos i Mesures de Protecció
- Avaluació de Riscos
- Polítiques de Seguretat
- Controls de Seguretat
- Risc de Tercers i Cadena de Subministrament
- Pla de Resposta a Incidents
- Recuperació davant Desastres i Continuïtat de Negoci
Mòdul 5: Eines i Tècniques de Seguretat
- Eines d'Anàlisi de Vulnerabilitats
- Tècniques de Monitoratge i Detecció
- Proves de Penetració
- Seguretat en Xarxes
- Seguretat en Aplicacions
- Enfortiment de Sistemes i Seguretat de l'Endpoint
- Seguretat al Núvol i en Contenidors
Mòdul 6: Bones Pràctiques i Normatives
- Bones Pràctiques en Seguretat Informàtica
- Normatives i Estàndards de Seguretat
- Protecció de Dades Personals i RGPD a la Pràctica
- Compliment i Auditoria
- Formació i Sensibilització
- Ètica, Aspectes Legals i Divulgació Responsable
