La lección anterior terminó con una pregunta que ni el escáner de 05-01 ni la detección de 05-02 responden: ¿aguantaría de verdad? Un escáner comprueba versiones y una detección observa lo que ocurre, pero ninguno intenta encadenar tres debilidades pequeñas —una cabecera ausente, un límite de tasa que no existe y un identificador predecible— hasta convertirlas en un compromiso real. Eso es lo que hace un atacante, y eso es lo que simula una prueba de penetración. Esta lección te enseña a encargarla, acotarla, entenderla y aprovecharla, con un enfoque defensivo: verás qué se encontró en el entorno de Nimbus y, sobre todo, cómo se corrigió cada cosa.

⚠️ Advertencia legal — esta es la lección más delicada del curso

Ejecutar técnicas de intrusión sobre un sistema ajeno sin autorización escrita es un delito, no una travesura. En España:

  • Art. 197 bis del Código Penal: acceder o facilitar el acceso al conjunto o a una parte de un sistema de información vulnerando las medidas de seguridad, o interceptar transmisiones no públicas, se castiga con pena de prisión. No hace falta causar daño ni copiar nada: basta con acceder.
  • Art. 264 y siguientes: dañar, borrar, alterar o hacer inaccesibles datos o sistemas ajenos, con penas agravadas si afectan a infraestructuras críticas o a un número elevado de sistemas.
  • Art. 197 ter: producir, facilitar o poseer herramientas concebidas para cometer esos delitos también es punible cuando se destinan a ello.

Consecuencias prácticas: «solo quería probar» no es eximente, la ausencia de daño no elimina el tipo penal, un nmap intrusivo contra un tercero ya puede constituir un intento, y la autorización debe ser escrita, previa, firmada por quien tiene capacidad para otorgarla y vigente en la fecha de la prueba. En la nube necesitas además la autorización del proveedor además de la del cliente.

Por eso esta lección no contiene exploits, ni payloads, ni comandos de explotación. Describe las fases de forma conceptual, muestra la verificación defensiva equivalente y desarrolla en detalle cómo se corrige lo hallado. El marco ético y legal completo —incluida la divulgación responsable y el porqué de estas normas— se desarrolla en 06-06. (Nota: la calificación penal concreta depende del caso; ante cualquier duda, validación jurídica previa.)

Contenido

  1. Qué es un pentest y qué no lo es
  2. Modalidades: caja negra, gris y blanca
  3. Alcance y reglas de enfrentamiento
  4. Las fases metodológicas
  5. Qué ocurre en cada fase, y su equivalente defensivo
  6. Recorrido de una prueba autorizada sobre el entorno de Nimbus
  7. El informe de pentest
  8. Qué pasa después: remediación y retest
  9. Divulgación responsable y bug bounty como alternativa continua
  10. Cómo contratar un pentest siendo pequeño
  11. Dónde practicar legalmente

  1. Qué es un pentest y qué no lo es

Un pentest es una prueba autorizada en la que un profesional intenta comprometer un sistema usando las mismas técnicas que un atacante real, con un objetivo declarado y un informe como producto. Su valor no está en encontrar vulnerabilidades sueltas —para eso está 05-01— sino en demostrar el impacto encadenándolas.

Escaneo automático Auditoría de cumplimiento Pentest Red team
Pregunta ¿Qué versiones vulnerables tengo? ¿Cumplo el estándar? ¿Puede alguien entrar y hasta dónde llega? ¿Detectamos y respondemos ante un adversario real?
Método Herramienta automatizada Revisión documental y de evidencias Manual + herramientas, con creatividad Campaña sigilosa, multivector, con ingeniería social
Duración Horas 1-3 semanas 3-15 días 1-3 meses
Coste orientativo (PYME) 0-1.500 €/año 3.000-15.000 € 4.000-15.000 € 25.000 € o más
Lo sabe el equipo No (solo la dirección)
Qué mide Superficie conocida Conformidad Explotabilidad real Capacidad de detección y respuesta
Cuándo elegirlo Siempre, continuo Certificación o exigencia de cliente (06-04) Antes de un lanzamiento, tras un cambio grande, o anual Cuando ya tienes detección madura

Para Nimbus hoy, un red team sería tirar el dinero. Mide la capacidad de detección y respuesta, y en 05-02 acabamos de construir las primeras doce detecciones: se contrata cuando llevan un año funcionando. Lo que sí procede es un pentest anual de la aplicación y la infraestructura, que es donde vive el producto y el riesgo.

Y una diferencia que conviene tener clara: un pentest no demuestra que un sistema sea seguro. Demuestra que, en un plazo acotado y con un alcance acotado, una persona concreta encontró estas cosas. Un informe sin hallazgos suele significar que el alcance era estrecho o que el tiempo fue corto, no que el sistema sea inexpugnable.


  1. Modalidades: caja negra, gris y blanca

Caja negra Caja gris Caja blanca
Qué recibe el auditor Solo el nombre del dominio Credenciales de usuario y documentación básica Código fuente, arquitectura, credenciales de administración
Simula a Un atacante externo sin información Un cliente legítimo o un empleado Un revisor con acceso total
Tiempo gastado en reconocer 30-40 % 10 % 5 %
Profundidad alcanzada Baja: se queda en el perímetro Alta en la lógica de negocio Máxima, pero se aleja del atacante real
Coste por hallazgo El más alto El más bajo Medio

La caja gris da más valor por euro, y en un SaaS multi-tenant la diferencia es abismal. El motivo es directo: en Nimbus, el riesgo principal no es que un desconocido entre, sino que un cliente legítimo vea los datos de otro —el IDOR de 01-04 es exactamente eso—. Un pentest de caja negra jamás lo habría encontrado, porque para probarlo hay que estar dentro con dos cuentas de dos tenants distintos. Pagar por que alguien dedique tres días a descubrir lo que un nmap da en diez minutos es un mal uso del presupuesto.

Recomendación para Nimbus: caja gris con dos cuentas de prueba de dos clínicas ficticias distintas y una cuenta de rol soporte, más acceso de lectura a la documentación de la API.


  1. Alcance y reglas de enfrentamiento

Las reglas de enfrentamiento (rules of engagement) son el documento que convierte una intrusión en un servicio profesional. Sin ellas, la prueba es legalmente frágil para ambas partes y operativamente peligrosa.

# ACUERDO DE ALCANCE Y REGLAS DE ENFRENTAMIENTO
Cliente: Nimbus Reservas, S.L.       Proveedor: <auditor>
Vigencia: 2026-05-11 a 2026-05-22    Version: 1.1

## 1. Autorizacion
Nimbus Reservas, S.L. autoriza expresamente al proveedor a realizar pruebas de
seguridad sobre los activos listados en el punto 2, en la ventana del punto 4.
Firmado por Marta <apellidos>, CTO, con capacidad para otorgar esta autorizacion.
Autorizacion del proveedor cloud: solicitada y concedida el 2026-05-04 (ref. XXXX).

## 2. Activos INCLUIDOS
- preprod.nimbusreservas.example  (SPA + API, entorno de preproduccion)
- api-preprod.nimbusreservas.example y subdominios de *.nimbusreservas.example
- Aplicacion movil (build de preproduccion, entregada al auditor)
- Cuentas de prueba: clinica-alfa@, clinica-beta@, soporte-test@

## 3. Activos EXCLUIDOS  (fuera de alcance de forma absoluta)
- Produccion (api.nimbusreservas.example y su base de datos)
- Pasarela de pago y proveedor de email transaccional (terceros: A-11, A-12)
- Sistemas de la consultora de sistemas (A-19)
- Equipos personales de empleados y sus cuentas de correo
- Cualquier tecnica de ingenieria social sobre el personal (fuera de este contrato)

## 4. Ventana y intensidad
- Ventana: L-V 09:00-19:00 CEST. Fuera de ventana: prohibido.
- Denegacion de servicio, pruebas de carga y fuerza bruta masiva: PROHIBIDAS.
- Limite de tasa del auditor: maximo 20 peticiones/segundo.

## 5. Datos
- Prohibido descargar, copiar o conservar datos de clientes reales.
- Ante el hallazgo de datos reales en preproduccion: DETENER, no descargar,
  notificar en menos de 1 hora y documentar solo el hecho.
- Toda evidencia se anonimiza y se entrega cifrada; se destruye a los 30 dias.

## 6. Condicion de parada
El proveedor detiene la prueba de inmediato si: (a) provoca indisponibilidad,
(b) accede a datos personales reales, (c) encuentra indicios de un compromiso
PREEXISTENTE, o (d) Nimbus lo solicita por cualquier canal del punto 7.

## 7. Contactos
- Emergencia 24/7: Lucia <telefono>   |   Suplente: Marta <telefono>
- Canal de hallazgos criticos: <canal seguro>. Aviso en < 2 h desde el hallazgo.

## 8. Hallazgos criticos en caliente
Un hallazgo que permita acceso a datos de clientes o control del sistema se
comunica INMEDIATAMENTE, sin esperar al informe final, con una recomendacion
de mitigacion provisional.

Cinco cláusulas merecen énfasis. El punto 3 protege al auditor tanto como al cliente: Nimbus no puede autorizar pruebas sobre la pasarela de pago porque no es suya, y hacerlo sería exactamente el delito de la advertencia inicial. La autorización del proveedor cloud (punto 1) es obligatoria y muchos la olvidan: el proveedor tiene una política de pruebas y saltársela puede suspender la cuenta. El punto 5 es el que evita convertir una auditoría en una brecha: si preproducción tiene datos reales —recuerda A-22, «clasificación a revisar»—, descargarlos crea el incidente que se quería prevenir. El punto 6c existe porque ocurre: a veces el auditor encuentra que ya hay alguien dentro, y ahí la prueba se detiene y se activa el plan de 04-05. Y el punto 8 es lo que separa un servicio útil de un informe póstumo: si el día 2 alguien encuentra la forma de leer los datos de todas las clínicas, no se espera dos semanas.


  1. Las fases metodológicas

Las metodologías reconocidas —PTES, OSSTMM y, para aplicaciones web, la OWASP Web Security Testing Guide (WSTG)— coinciden en la estructura. La WSTG es además una lista de comprobación pública y gratuita: si contratas un pentest de aplicación, pedir cobertura WSTG es la forma más simple de comparar ofertas.

flowchart TD
    P["0. PREPARACION\nAlcance, reglas,\nautorizacion firmada"] --> R["1. RECONOCIMIENTO\nInformacion publica:\nDNS, subdominios, filtraciones"]
    R --> E["2. ENUMERACION\nPuertos, servicios, rutas,\nparametros, roles"]
    E --> A["3. ANALISIS DE\nVULNERABILIDADES\nHipotesis priorizadas"]
    A --> X["4. EXPLOTACION\nConfirmar el impacto\ncon el minimo dano"]
    X --> PX["5. POST-EXPLOTACION\nHasta donde se llega:\npivote, datos, persistencia"]
    PX --> I["6. INFORME\nEl producto real\ny la reunion de entrega"]
    I --> RT["7. RETEST\nVerificar la correccion\n(a menudo se omite)"]
    X -.->|"impacto critico"| CE["Aviso en caliente\n(regla 8)"]

Dos avisos sobre el diagrama. El primero: la fase 4 no es el objetivo, es la prueba. Explotar sirve para demostrar que la vulnerabilidad es real y medir su impacto; un auditor profesional explota lo justo para documentarlo y se detiene. El segundo: la fase 7 es la que casi todo el mundo omite, y sin ella no sabes si pagaste por una lista de deberes que nadie hizo.


  1. Qué ocurre en cada fase, y su equivalente defensivo

Fase Qué hace el auditor Herramientas típicas Tu verificación defensiva
Reconocimiento Recopila lo público: subdominios, registros DNS, certificados, tecnologías, credenciales filtradas, perfiles del equipo amass, transparencia de certificados, buscadores Hazlo tú primero: enumera tus subdominios desde la zona DNS y desde los registros de certificados (03-06), y apaga lo que sobre
Enumeración Mapea la superficie: puertos, rutas ocultas, parámetros, roles y flujos de la aplicación nmap, ffuf, gobuster, ZAP en modo spider Revisa qué rutas expone tu servidor y elimina paneles y documentación interna accesibles sin autenticación
Análisis Formula hipótesis priorizadas: dónde es más probable que falle la autorización, la validación o la configuración ZAP/Burp, testssl.sh, revisión manual Ejecuta testssl.sh y el escáner de 05-01; corrige lo evidente antes del pentest para que el auditor gaste su tiempo en lo que tú no puedes ver
Explotación Confirma la hipótesis con el mínimo daño posible y captura evidencia Marcos como Metasploit para lo conocido; casi todo lo de aplicación es manual Nada que hacer aquí salvo tener copias verificadas (04-06) y avisar a la guardia de que la prueba está en curso
Post-explotación Mide hasta dónde se llega: pivote a otras redes, acceso a datos, persistencia Herramientas propias del entorno comprometido Mide tu segmentación tú mismo con las pruebas de conectividad de 05-04
Informe Redacta, prioriza y presenta Exige el formato del §7 en el contrato

Sobre las herramientas nombradas, con la precisión que exige el enfoque de esta lección: nmap y testssl.sh son de reconocimiento y verificación y los usas tú a diario; ZAP y Burp son proxies de intercepción que permiten ver y modificar las peticiones que tu propio navegador envía —su uso legítimo es contra tu aplicación—; ffuf y gobuster prueban listas de rutas y ficheros contra un servidor propio para descubrir lo que quedó publicado sin querer; hydra prueba credenciales, y solo tiene un uso admisible aquí: comprobar sobre tus propias cuentas de prueba que el bloqueo por intentos fallidos y el límite de tasa funcionan, que es una verificación defensiva; y Metasploit es un marco que empaqueta módulos de explotación de vulnerabilidades conocidas y cuyo uso queda dentro del alcance autorizado y nunca en este material.

Una observación que ahorra dinero: casi todo lo que un pentest encuentra de verdad valioso en un SaaS es manual y de lógica de negocio. El IDOR, el flujo de recuperación de contraseña que permite enumerar usuarios, el endpoint de informes que ignora el rol. Ninguna herramienta lo automatiza, y por eso se paga por horas de una persona con criterio.


  1. Recorrido de una prueba autorizada sobre el entorno de Nimbus

Marta contrata cinco días de caja gris sobre preproducción, con las reglas del §3. Estos son los cinco hallazgos y su corrección.

6.1 IDOR residual en el endpoint de informes

El WHERE tenant_id se aplicó en los endpoints de reservas y clientes, pero el módulo de informes se escribió después y consulta con una vista agregada que nadie revisó. Con la cuenta de la clínica Alfa, cambiando un identificador de la petición, se obtenían totales de facturación de la clínica Beta.

# ANTES — el filtro depende de que el desarrollador se acuerde. En informes,
# nadie se acordo: `tenant_id` llega del parametro y no de la sesion.
@router.get("/informes/facturacion")
def facturacion(tenant_id: int, desde: date, hasta: date, db=Depends(get_db)):
    return db.execute(VISTA_FACTURACION, {"t": tenant_id, "d": desde, "h": hasta})

# DESPUES — el tenant NUNCA llega del cliente: se deriva del token verificado.
# Esta dependencia se reutiliza en todos los endpoints y hace imposible el fallo
# por olvido, en lugar de confiar en la disciplina de quien escribe cada ruta.
def tenant_actual(usuario: Usuario = Depends(usuario_actual)) -> int:
    return usuario.tenant_id

@router.get("/informes/facturacion")
def facturacion(desde: date, hasta: date,
                tenant_id: int = Depends(tenant_actual),   # <- de la sesion
                db=Depends(get_db)):
    return db.execute(VISTA_FACTURACION, {"t": tenant_id, "d": desde, "h": hasta})

La corrección de fondo no es la línea cambiada: es que el identificador de cliente deja de ser un parámetro de entrada en toda la API. Además se activó RLS en la vista agregada, que ya protegía las tablas base pero no la vista (03-07). La generalización de este patrón a toda la aplicación se desarrolla en 05-05.

6.2 Límite de tasa ausente en el inicio de sesión

El auditor comprobó que se podían enviar 4.000 intentos de autenticación en cinco minutos sin bloqueo ni ralentización: la puerta abierta al credential stuffing de 02-02.

# Zona compartida de 10 MB: ~160.000 IPs en seguimiento. 5 peticiones/minuto.
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 margen sin retrasar las legitimas
    limit_req_status 429;                  # codigo correcto: "demasiadas peticiones"
    proxy_pass http://api_upstream;
}

Y en la aplicación, bloqueo por cuenta además de por IP, porque el password spraying usa una IP distinta por intento: tras 10 fallos sobre la misma cuenta en 15 minutos, se exige segundo factor o se retrasa exponencialmente. Ambos alimentan la detección D-01 de 05-02.

6.3 Cabecera de seguridad faltante

Faltaba Content-Security-Policy en la SPA, lo que convertía cualquier XSS en un robo de sesión completo. Se desplegó primero en modo informe para no romper la aplicación:

# Fase 1 (dos semanas): NO bloquea, solo informa de lo que romperia.
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;

Tras revisar los informes y ajustar dos orígenes legítimos, se cambió a Content-Security-Policy en modo bloqueante. El conjunto completo de cabeceras y el porqué de cada una está en 05-05.

6.4 Subdominio olvidado con TLS obsoleto

El reconocimiento encontró pruebas-2019.nimbusreservas.example, servido por un host que aceptaba TLS 1.0 y suites con RC4, y apuntando a una IP que ya no estaba bajo control de Nimbus: candidato a toma de control de subdominio (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ón: eliminar el registro DNS —no parchear un host que debe desaparecer, como ya concluimos en 05-01— y añadir al inventario una revisión trimestral de la zona DNS.

6.5 Credencial por defecto en un panel interno

Un panel de administración de colas, desplegado «temporalmente» hace ocho meses, respondía en /flower con admin/admin y sin autenticación en el proxy. Desde ahí se veían los identificadores y correos de las tareas en curso.

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

# DESPUES
flower:
  image: mher/flower:2.0.1    # version fijada, no `latest` (04-04)
  ports: ["127.0.0.1:5555:5555"]   # solo accesible desde el propio host
  environment:
    FLOWER_BASIC_AUTH: "${FLOWER_AUTH}"   # credencial desde el gestor de secretos

El acceso pasa a hacerse por túnel SSH a través del bastión. Este hallazgo es el más instructivo de los cinco: no es una vulnerabilidad de software, no tiene CVE, ningún escáner de 05-01 lo habría marcado como crítico y llevaba ocho meses expuesto. Es el mismo patrón que el python -m http.server: lo temporal que se queda.


  1. El informe de pentest

El informe es el producto. Un auditor que entrega un volcado de herramienta con 80 páginas de salida sin priorizar no ha hecho el trabajo, y esa es la señal más fiable para no repetir con ese proveedor.

Sección Para quién Qué debe contener
Resumen ejecutivo Marta 1 página sin jerga: qué se probó, qué se consiguió, riesgo de negocio y qué decisión se pide. Si Marta necesita ayuda para entenderlo, está mal escrito
Alcance y limitaciones Todos Qué entró, qué no, en qué ventana y qué no se pudo probar
Metodología Técnico y auditor (06-04) PTES/WSTG, fases cubiertas, herramientas y versiones
Hallazgos Lucía e Iván Uno por ficha, con evidencia, reproducción, CVSS y corrección
Recomendación priorizada Marta y Lucía Plan por orden de impacto/esfuerzo, no una lista alfabética
Anexos Iván Salidas completas, capturas, peticiones
### PT-2026-01 · Acceso a datos de facturacion de otros clientes (IDOR)

**Severidad: Critica** · CVSS 8.1 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N)
**Activo:** api-preprod · endpoint `GET /api/v1/informes/facturacion`
**Estado:** Comunicado en caliente el 2026-05-12 a las 11:40 (regla 8)

**Descripcion.** El endpoint acepta el parametro `tenant_id` del cliente y no lo
contrasta con el tenant del token. Un usuario autenticado de cualquier clinica
puede leer los agregados de facturacion de cualquier otra modificando un numero.

**Reproduccion.** (1) Autenticarse como `clinica-alfa@` (tenant 41). (2) Invocar
el endpoint con `tenant_id=42`. (3) La respuesta devuelve los importes del
tenant 42. Evidencia: peticion y respuesta anonimizadas en el anexo A.3.

**Impacto.** Fuga de informacion economica entre clientes competidores y, por su
naturaleza, incidente notificable. El mismo patron aplicado a los endpoints de
citas expondria datos de salud (mayor gravedad aun).

**Correccion recomendada.** Derivar el tenant del token mediante una dependencia
comun a toda la API y activar RLS sobre la vista agregada. Anadir una prueba
automatica de aislamiento entre tenants en el CI.

**Esfuerzo estimado:** 4 h de desarrollo + 2 h de pruebas.
**Verificacion en retest:** repetir (1)-(3); respuesta esperada 403.

Los elementos que lo hacen accionable son los mismos de 05-01, con dos añadidos propios del pentest: la reproducción paso a paso —sin ella, el desarrollador no puede confirmar la corrección— y el criterio de verificación del retest, que fija de antemano qué se considerará arreglado.


  1. Qué pasa después: remediación y retest

El error clásico es archivar el informe. El ciclo correcto es corto y tiene dueños:

  1. Reunión de entrega con el auditor, Marta, Lucía e Iván. Se discute cada hallazgo hasta que el equipo lo entiende; un informe que se entrega por correo y no se explica pierde la mitad de su valor.
  2. Plan de remediación con dueño y fecha, usando la política de plazos de 05-01: críticas en 7 días, altas en 30. Cada hallazgo se convierte en un issue con criterio de aceptación.
  3. Actualización del registro de riesgos de 04-01. El IDOR residual no es un hallazgo suelto: modifica el riesgo R-04 (fuga de datos entre clientes), cuyo residual estaba calculado asumiendo que el control C-05 estaba implantado. Estaba implantado a medias, que es la lección de 04-03 sobre implantado frente a eficaz.
  4. Retest, incluido en el contrato original y no como servicio aparte. Es un ejercicio corto —normalmente uno o dos días— que solo comprueba los hallazgos corregidos y produce un anexo con el estado final. Sin retest, el pentest mide el pasado.
  5. Lecciones estructurales. Si aparecieron dos IDOR, el problema no son dos líneas: es que la autorización se decide en cada ruta. La corrección estructural —la dependencia común— evita el tercero.

  1. Divulgación responsable y bug bounty como alternativa continua

Un pentest anual es una foto; los investigadores externos miran todo el año. Para una PYME hay tres escalones, y el primero es gratuito y obligatorio:

Escalón Qué es Coste Para Nimbus
Política de divulgación (VDP) Una página que dice cómo reportar un fallo, qué compromisos asumes y que no emprenderás acciones legales contra quien investigue de buena fe. Se publica en /.well-known/security.txt 0 € Hazlo ya. Sin esto, quien encuentre un fallo o no sabe a quién escribir o teme la denuncia, y el fallo acaba en otro sitio
Bug bounty privado Recompensas económicas a un grupo reducido de investigadores invitados 3.000-10.000 €/año Cuando el pentest anual ya no encuentre críticas
Bug bounty público Abierto a cualquiera, en plataforma 15.000 €/año o más Fuera de alcance hoy
# https://nimbusreservas.example/.well-known/security.txt
Contact: mailto:[email protected]
Expires: 2027-01-01T00:00:00.000Z
Preferred-Languages: es, en
Policy: https://nimbusreservas.example/seguridad/divulgacion
Acknowledgments: https://nimbusreservas.example/seguridad/gracias

Advertencia de gestión: un bug bounty sin capacidad de responder es peor que no tenerlo. Si llegan 40 informes y nadie los tría en 48 horas, la comunidad lo publica y la reputación (A-20) sufre más que con el fallo original. La ética de la divulgación, los plazos razonables y el conflicto entre investigador y empresa se desarrollan en 06-06.


  1. Cómo contratar un pentest siendo pequeño

Qué pedir en la petición de oferta, y son cinco cosas concretas: metodología declarada (PTES o WSTG), perfil y certificaciones nominales de quien ejecutará (no de la empresa), días-persona reales dedicados —la variable que determina la calidad—, retest incluido, y un informe de ejemplo anonimizado, que es el mejor predictor de lo que recibirás.

Certificación Qué acredita Señal
OSCP / OSWE Examen práctico de 24-48 h comprometiendo máquinas reales Muy buena: es hacer, no recordar
CREST (CRT, CCT) Certificación del profesional y de la empresa, con proceso auditado Muy buena, sobre todo para el proveedor
GPEN, GWAPT (SANS) Formación sólida, examen teórico-práctico Buena
CEH Conocimiento amplio, examen tipo test Débil por sí sola

Precio orientativo en España para una PYME: 4.000-8.000 € por una aplicación web con API, en caja gris, 5 días-persona con informe y retest; 8.000-15.000 € si se añaden infraestructura cloud y aplicación móvil. Cadencia razonable: anual, más una prueba adicional ante cambios arquitectónicos importantes (nuevo módulo con datos sensibles, cambio de proveedor de identidad, migración de infraestructura). Con 18.000 €/año, Nimbus puede permitirse un pentest anual de aplicación si acepta que ese es el mayor desembolso único del presupuesto, y la decisión es defendible: A-04 es el producto.

Tres señales de alarma al comparar ofertas: precio cerrado sin conocer el alcance, «pentest automatizado» (eso es un escaneo con otro nombre y otro precio), y negarse a entregar un informe de ejemplo.


  1. Dónde practicar legalmente

Practicar explotación es necesario para entender la defensa, y solo hay un sitio donde hacerlo: entornos diseñados para ello.

Entorno Qué es Para qué
OWASP Juice Shop Aplicación web moderna deliberadamente vulnerable; se ejecuta en local con Docker Aprender el Top 10 de OWASP con una aplicación realista
DVWA Clásico en PHP con niveles de dificultad Ver el mismo fallo con y sin protección
TryHackMe Recorridos guiados con máquinas de laboratorio Empezar desde cero de forma estructurada
HackTheBox Máquinas y laboratorios de dificultad creciente Nivel intermedio y avanzado
VulnHub / entorno propio Máquinas virtuales vulnerables en tu red aislada Practicar sin conexión y sin límites

La regla, sin matices: si el sistema no es tuyo y no tienes autorización escrita, no es un laboratorio. No lo son la web de tu antigua empresa, ni la de un proveedor que «seguro que lo agradece», ni la de un familiar. Los laboratorios de la tabla existen precisamente para que nunca haya excusa. Y en un entorno profesional, esa práctica se hace además en una red aislada, con instantáneas y sin conexión a la red corporativa.


Errores Comunes y Consejos

  • Encargar un pentest sin autorización escrita ni reglas de enfrentamiento. Expone legalmente a las dos partes y deja sin marco lo que ocurre si algo se cae.
  • Elegir caja negra por «realismo». En un SaaS multi-tenant pagas reconocimiento en lugar de profundidad, y el riesgo principal —fuga entre clientes— se queda sin probar.
  • Probar contra producción sin necesidad. Si preproducción es equivalente, se prueba allí; y si no lo es, arreglar esa diferencia es más urgente que el pentest.
  • No excluir a los terceros. No puedes autorizar pruebas sobre la pasarela de pago ni sobre la consultora: no son tuyos.
  • Contratar sin retest. Sin verificación, el informe describe un sistema que ya no existe y nadie sabe si se corrigió.
  • Tratar los hallazgos como incidencias sueltas. Dos IDOR no son dos errores: son un patrón de diseño de la autorización.
  • Consejo: pásale al auditor el resultado de 05-01. Si ya has corregido lo que un escáner encuentra, sus cinco días se van a lo que ninguna herramienta ve. Es la forma más directa de multiplicar el valor de lo que pagas.
  • Consejo: publica hoy tu security.txt. Cuesta media hora, es gratis y determina si el próximo fallo que alguien encuentre llega a tu buzón o a otro sitio.
  • Consejo: avisa a tu propia guardia. Con las detecciones de 05-02 activas, un pentest generará alertas. Que salten y se atiendan es, de hecho, una prueba gratuita de que la detección funciona: anótalo como verificación.

Ejercicios

Ejercicio 1 — Corregir unas reglas de enfrentamiento

Un proveedor envía este resumen de alcance. Identifica al menos seis problemas y reescribe las cláusulas afectadas.

Alcance: infraestructura y aplicaciones de Nimbus Reservas.
Fechas: mayo de 2026. Horario: sin restriccion.
Se probaran todos los sistemas accesibles desde Internet asociados a la empresa,
incluidos servicios en la nube y proveedores conectados.
Se permite el uso de cualquier tecnica, incluida la ingenieria social telefonica.
Los hallazgos se entregaran en el informe final.
Contacto: el correo del comercial.

Ejercicio 2 — Decidir la modalidad y el presupuesto

Nimbus lanza en septiembre un módulo de teleconsulta con vídeo y notas clínicas. Marta dispone de 9.000 € para seguridad ofensiva este año y pregunta qué contratar.

  1. ¿Pentest, red team, auditoría o bug bounty? Justifícalo.
  2. Modalidad y alcance concretos, incluyendo qué cuentas y qué se excluye.
  3. Cómo repartir los 9.000 € y qué se hace con lo que sobre.

Ejercicio 3 — Redactar un hallazgo y su corrección

Durante la prueba, el auditor descubre que el flujo de recuperación de contraseña responde "Correo no registrado" cuando la dirección no existe y "Te hemos enviado un enlace" cuando sí, permitiendo enumerar qué correos son clientes de cada clínica. En un SaaS usado por clínicas de fisioterapia, saber que una dirección es cliente ya es información sensible.

  1. Redacta la ficha del hallazgo con el formato del §7, asignando severidad con criterio.
  2. Escribe la corrección en python explicando por qué funciona.
  3. Indica cómo se verificaría en el retest y qué detección de 05-02 lo cubriría.

Soluciones

Ejercicio 1

# Problema Corrección
1 «Infraestructura y aplicaciones»: alcance indeterminado, imposible de contratar y de defender jurídicamente Lista cerrada de dominios, IPs y aplicaciones incluidos, más una lista explícita de excluidos
2 «Mayo de 2026»: la autorización debe tener fechas exactas de inicio y fin Ventana 2026-05-11 a 2026-05-22, y prohibición expresa fuera de ella
3 «Horario sin restricción»: pruebas nocturnas sin nadie de guardia; si algo se cae, se cae hasta la mañana L-V 09:00-19:00 CEST, con la guardia avisada
4 «Proveedores conectados»: es la cláusula más grave. Nimbus no puede autorizar pruebas sobre la pasarela, el proveedor de correo ni la consultora, y hacerlo expondría a ambas partes al art. 197 bis Exclusión absoluta de terceros, y autorización expresa del proveedor cloud para lo que sí es de Nimbus
5 «Cualquier técnica, incluida ingeniería social»: fuera de contrato, sin base para tratar datos del personal y con implicaciones laborales Excluir la ingeniería social o contratarla aparte, con información previa y validación legal (06-06)
6 «Los hallazgos se entregarán en el informe final»: una crítica encontrada el día 2 esperaría dos semanas Cláusula de aviso en caliente: notificación en menos de 2 h para hallazgos críticos, con mitigación provisional
7 Contacto: el comercial: no está disponible 24/7 ni sabe qué hacer Contacto técnico de emergencia con teléfono y suplente
8 Faltan condición de parada, tratamiento de datos reales y límite de intensidad Añadir los puntos 4, 5 y 6 de la plantilla del §3

Ejercicio 2

(1) Pentest, sin duda. Red team queda descartado porque mide detección y respuesta, y las detecciones de 05-02 llevan meses, no años: mediría un fracaso previsible por un precio muy alto. La auditoría de cumplimiento responde a otra pregunta y se tratará en 06-04. El bug bounty exige capacidad de respuesta que Nimbus aún no tiene. Y el momento es el correcto: un módulo con vídeo y notas clínicas es datos de salud, es una superficie nueva y es exactamente cuando conviene probar, antes del lanzamiento y no después.

(2) Modalidad y alcance. Caja gris, con dos cuentas de clínicas distintas, una cuenta de paciente y una de soporte, más la documentación de la API y del flujo de vídeo. Alcance: el módulo de teleconsulta completo (creación de sala, control de acceso a la sala, notas clínicas, adjuntos y su cifrado campo a campo de 03-07) más los endpoints de la API que toca, en preproducción. Excluidos: producción, el proveedor de vídeo, la pasarela, el correo transaccional y toda ingeniería social. Se pide cobertura OWASP WSTG y API Top 10 (05-05), con dos preguntas explícitas para el auditor: ¿puede un paciente entrar en la sala de otro? y ¿puede una clínica ver las notas de otra?

(3) Reparto. ~6.500 € en 5 días-persona de caja gris con informe y retest incluido; ~1.000 € reservados para una segunda vuelta corta si aparecen críticas que exijan rediseño; y ~1.500 € sin gastar hasta después del informe. Lo que sobre no se gasta en más ofensiva: se gasta en corregir. El error más caro del sector es consumir el presupuesto en encontrar y quedarse sin nada para arreglar. Además, gratis: publicar el security.txt y ejecutar 05-01 sobre el módulo antes de que llegue el auditor, para que sus días se dediquen a la lógica de negocio.

Ejercicio 3

(1) Ficha:

### PT-2026-04 · Enumeracion de usuarios en la recuperacion de contrasena

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

**Descripcion.** La respuesta difiere segun exista o no la cuenta, lo que permite
comprobar de forma masiva y sin autenticacion si una direccion es cliente.

**Reproduccion.** Enviar la peticion con un correo inexistente y con uno valido y
comparar cuerpo, codigo de estado y tiempo de respuesta.

**Impacto.** Por si sola es baja, pero en un SaaS de clinicas de fisioterapia
**saber que una direccion es paciente de una clinica concreta ya es un dato de
salud por inferencia**, con las implicaciones del art. 9 del RGPD (06-03).
Ademas alimenta el credential stuffing (02-02) al confirmar cuentas validas.

**Correccion.** Respuesta identica en todos los casos y tiempo de respuesta
constante. Anadir limite de tasa por IP y por correo.

**Verificacion en retest:** 200 peticiones alternando correos validos e invalidos;
cuerpo, codigo y tiempo deben ser indistinguibles.

La severidad Media y no Baja es el juicio importante: el CVSS base la trata como fuga menor de información, pero el grupo ambiental de 05-01 la sube por el contexto de negocio. Es justo lo que un escáner no puede calcular.

(2) Corrección:

@router.post("/auth/recuperar", status_code=202)
async def recuperar(datos: PeticionRecuperacion, fondo: BackgroundTasks):
    inicio = time.monotonic()
    usuario = repo.buscar_por_email(datos.email)   # puede existir o no

    if usuario:
        # El envio va a segundo plano: su duracion no altera la respuesta.
        fondo.add_task(enviar_enlace_recuperacion, usuario)
    else:
        # Se registra el intento para la deteccion, pero NO se dice fuera.
        log.info("auth.recuperar.desconocido", extra={"campos": {"ip": ...}})

    # Tiempo de respuesta constante: sin esto, el atacante distingue por latencia
    # aunque el mensaje sea identico. Es el canal lateral que casi todos olvidan.
    await asyncio.sleep(max(0, 0.35 - (time.monotonic() - inicio)))

    # Mensaje IDENTICO en ambos casos, y codigo 202 en ambos casos.
    return {"mensaje": "Si la direccion esta registrada, recibiras un enlace."}

Funciona porque elimina las tres vías por las que se filtra la diferencia: el mensaje, el código de estado y el tiempo. La tercera es la que se olvida: sin la nivelación temporal, enviar un correo real tarda 300 ms más y el atacante mide esa diferencia con precisión. El mismo razonamiento se aplica al registro de cuentas y al cambio de correo, que son los otros dos puntos donde este fallo reaparece.

(3) Verificación y detección. En el retest se envían 200 peticiones alternando direcciones válidas e inválidas y se comparan cuerpo, código y distribución de tiempos: si la latencia media de los válidos difiere de forma consistente, el hallazgo sigue abierto. La detección que lo cubre es una variante de D-01: más de 20 peticiones a /auth/recuperar desde una IP en 5 minutos, o más de 100 correos distintos probados en una hora, con severidad S3 y bloqueo automático por fail2ban —una de las acciones que 05-02 clasificó como seguras de automatizar por ser reversibles—.


Conclusión

Ahora sabes qué es y qué no es un pentest: una prueba autorizada que demuestra impacto encadenando debilidades, distinta del escaneo (superficie conocida), de la auditoría (conformidad) y del red team (capacidad de detección), con su duración, su coste orientativo y el criterio para elegir cada uno —y con la conclusión de que para Nimbus hoy un red team sería tirar el dinero—. Sabes que un pentest no demuestra que un sistema sea seguro, y que un informe sin hallazgos casi siempre significa alcance estrecho o tiempo corto. Conoces las tres modalidades y por qué la caja gris da más valor por euro en un SaaS multi-tenant: el riesgo principal no es que entre un desconocido, sino que un cliente legítimo vea los datos de otro, y eso solo se prueba desde dentro con dos cuentas.

Te llevas la plantilla de acuerdo de alcance y reglas de enfrentamiento con sus cláusulas críticas: activos excluidos —no puedes autorizar pruebas sobre terceros—, autorización del proveedor cloud, ventana e intensidad, prohibición de descargar datos reales, condición de parada por compromiso preexistente, contacto de emergencia 24/7 y aviso en caliente de hallazgos críticos. Conoces las fases metodológicas de PTES/OSSTMM/WSTG y qué ocurre en cada una, siempre con su equivalente defensivo: enumera tus propios subdominios, ejecuta testssl.sh, corrige lo que un escáner ve antes de que llegue el auditor y mide tu segmentación tú mismo. Y sabes lo que ahorra dinero: lo verdaderamente valioso en un SaaS es manual y de lógica de negocio.

Has recorrido una prueba autorizada real sobre preproducción con sus cinco hallazgos y sus correcciones: el IDOR residual en informes, resuelto haciendo que el tenant_id deje de ser un parámetro de entrada en toda la API; el límite de tasa ausente, con limit_req en Nginx y bloqueo por cuenta para el password spraying; la CSP faltante, desplegada primero en Report-Only; el subdominio olvidado con TLS obsoleto, que se elimina en lugar de parchearse; y la credencial por defecto del panel de colas, el hallazgo más instructivo porque no tiene CVE, ningún escáner lo habría priorizado y es el mismo patrón que el http.server: lo temporal que se queda. Sabes qué debe contener el informe, cómo se redacta un hallazgo con reproducción paso a paso y criterio de retest, y por qué entregar un volcado de herramienta es la señal para cambiar de proveedor. Sabes qué pasa después: reunión de entrega, plan con dueños y plazos, actualización del riesgo R-04 en el registro de 04-01, retest incluido en el contrato y corrección estructural en lugar de parche puntual. Y sabes encuadrar la divulgación responsable —publica hoy tu security.txt, cuesta media hora— y el bug bounty como escalón posterior que no debe abrirse sin capacidad de respuesta, con el tratamiento ético y legal completo esperándote en 06-06. Por último, sabes contratar: qué pedir, qué acreditan OSCP y CREST, cuánto cuesta, cada cuánto hacerlo y en qué laboratorios —Juice Shop, DVWA, TryHackMe, HackTheBox— se practica la explotación, que son el único sitio donde practicarla.

Fíjate en cuántos de los cinco hallazgos eran, en el fondo, problemas de red y de exposición: un panel publicado en la interfaz externa del host, un subdominio que apuntaba a una IP ajena, un servicio accesible desde donde no debía. Y recuerda lo que sigue pendiente desde 05-01: PostgreSQL escuchando en 0.0.0.0:5432, SSH abierto a todo Internet y la consultora con acceso permanente. En Seguridad en Redes (05-04) dibujamos la red de Nimbus tal como está, la rediseñamos por zonas, cerramos esos tres agujeros con grupos de seguridad y bastión, montamos el acceso remoto con WireGuard, arreglamos la wifi de invitados y el DNS, y —lo más importante— comprobamos con pruebas de conectividad que la segmentación funciona de verdad, porque un diseño no probado es solo un dibujo bonito.

Curso de Fundamentos de Seguridad Informática

Módulo 1: Introducción a la Seguridad Informática

Módulo 2: Ciberseguridad

Módulo 3: Criptografía

Módulo 4: Gestión de Riesgos y Medidas de Protección

Módulo 5: Herramientas y Técnicas de Seguridad

Módulo 6: Buenas Prácticas y Normativas

Módulo 7: Proyecto Final

© Copyright 2026. Todos los derechos reservados