PosiblesAcceso: MIR/FSEWEB Evaluacion Tecnica de Posible Acceso Antes de Publicacion

Informe tecnico defensivo (OSINT + comprobaciones HTTP pasivas reales). Sin intrusiones ni bypass.

Fecha/hora de ejecucion principal: 2 de marzo de 2026 (UTC aprox. 21:30-21:34).

Objetivo: factibilidad real Metodo: solo lectura / no autenticado Dominio revisado: fse.sanidad.gob.es

Veredicto Tecnico (Resumen Directo)

Acceso previo por frontend publico Baja probabilidad directa. Los endpoints de datos/examen comprobados responden 403 Forbidden sin autenticacion.
Riesgo principal real Medio-Alto por cadena de credenciales/operativa (usuarios privilegiados, proveedor, publicacion documental, custodia fisica).
Superficie visible Los bundles JS exponen 201 rutas API en publico y 209 en privado, incluidas rutas de examen/comision.
Hallazgo adicional Se confirma emision de token anonimo MW_PUBLICO mediante grant_type=client_no_identification, con metadatos extensos del proceso (menus, ventanas y IDs documentales).

Escoring de Factibilidad

A. Obtener examen antes de tiempo solo desde web publica (sin credenciales) 3 / 10
B. Obtener examen por compromiso de cuenta privilegiada/proveedor 7 / 10
C. Fuga por proceso documental/fisico (impresion, custodia, traslado) 8 / 10
D. Filtracion por error de publicacion (objeto/ruta publicada antes de fecha) 6 / 10
E. Abuso de flujos de sesion/recuperacion para inteligencia operativa y enumeracion 7 / 10

Interpretacion: la via mas probable no es una "URL magica" del HTML, sino la cadena de acceso autorizado y custodia.

Evidencia Tecnica Clave

  • https://fse.sanidad.gob.es/fseweb/ y https://fse-privado.sanidad.gob.es/fseweb/: app Angular con bundles hashados.
  • Comentarios de hardening visibles: referencia a WSTG-INFO-003 (reduccion de revelacion de informacion).
  • Rutas sensibles en JS: .../getDatosExamen, .../getDatosCuadernosExamen, .../comisionCalificadora/getPreguntas.
  • Pruebas no autenticadas sobre rutas sensibles devuelven 403 con mensaje de autenticacion obligatoria.
  • Directorio de docs/manuales sin listado (403); archivos manuales concretos publicos previstos en ngsw.json.

Comprobaciones HTTP Reales (No Intrusivas)

Prueba Resultado Lectura de Riesgo
GET /hera/api/aspirantes/api/v1/examen/getDatosExamen sin login 403 Forbidden Control de acceso activo en endpoint de examen.
GET /hera/api/datos/convocatoria/getDatosCuadernosExamen sin login 403 Forbidden No hay acceso directo anonimo a cuadernos por API.
GET /hera/api/datos/convocatoria/getHojaRespuestas sin login 403 Forbidden La ruta existe pero esta protegida.
GET /hera/api/privado/api/v1/comisionCalificadora/getPreguntas sin login 403 Forbidden Rutas privadas detectables, acceso bloqueado sin credenciales.
GET /hera/oauth/api/v1/oidc/servertimeunix sin login 200 OK (epoch) Endpoint utilitario publico. Baja criticidad por contenido.
GET /hera/oauth/api/v1/sistemaClave/preclaveTodosActivo sin login 200 OK (true) Exposicion de estado funcional, no evidencia de fuga de examen.
GET /hera/oauth/api/v1/oidc/token sin metodo esperado 500 con texto "method not supported" Conviene devolver 405/401 uniforme para menor fingerprinting.
POST /hera/oauth/api/v1/oidc/token con payload controlado sin sesion valida 200 OK para grant_type=client_no_identification Entrega token MW_PUBLICO + metadata de proceso (riesgo de inteligencia operativa).
POST /hera/oauth/api/v1/oidc/token con grant_type=client_username_password y password vacia 200 OK con estructura de error y campos de estado Posible vector de enumeracion/abuso de flujo de recuperacion si hay respuestas diferenciales.
OPTIONS preflight con Origin: https://example.com en endpoint sensible 200 sin cabeceras Access-Control-Allow-Origin No evidencia de CORS abierto para lectura cross-origin desde navegador.
GET /hera/oauth/api/v1/sistemaClave/getPreguntas/{id} sin login 403 Forbidden Sin fuga anonima de preguntas de recuperacion en prueba controlada.
POST a endpoint privado de comisión con token anonimo 403 por permisos (rol insuficiente) Control RBAC activo, pero la superficie interna es alcanzable y devuelve errores funcionales.
Metodos TRACE, PROPFIND, MOVE 501 Not Implemented No se observo exposicion de metodos HTTP peligrosos de forma directa.
Cabeceras en /fseweb/ (shell estatico) Basicas; no se observan CSP/HSTS ahi Mejorable en capa front/proxy estatico.
Cabeceras en /hera/api... Incluyen Strict-Transport-Security, X-Frame-Options: DENY, X-Content-Type-Options Hardening mas fuerte en backend API.

Arquitectura Observable (Cadena de Riesgo)

1. Frontend SPA: expone nombres de rutas y endpoints (mapa de superficie).

2. Backend OAuth/API: protege recursos sensibles por autenticacion/autorizacion.

3. Usuarios de alto privilegio: delegados, interventores, comision, perfiles ministerio/proveedor.

4. Publicacion documental: potencial punto de error humano/procedimental.

5. Custodia fisica: potencial leak fuera del canal web.

La evidencia tecnica apunta a que una filtracion temprana seria mas probable por identidad/proceso que por consulta anonima del HTML.

Superficie Detectada en Bundles

Endpoints/rutas encontrados por analisis de JS minificado:

/hera/api/datos/convocatoria/getDatosCuadernosExamen /hera/api/aspirantes/api/v1/examen/getDatosExamen /hera/api/aspirantes/api/v1/respuestas/getRespuestasCorrectas /hera/api/privado/api/v1/comisionCalificadora/getPreguntas /hera/oauth/api/v1/oidc/token

Detectar la ruta no implica acceso. La prueba real se hizo con peticiones no autenticadas y rutas sensibles respondieron 403.

Escenarios Realistas de Obtencion Anticipada (Sin Exploit)

Escenario Precondiciones Factibilidad Que validar forensemente
Compromiso de cuenta privilegiada Robo de sesion/token, phishing, MFA debil, proveedor comprometido Alta Logs IAM, IP anomalas, reset MFA, actividad fuera de horario, exportaciones.
Fuga interna de material Acceso legitimo previo (comision/operacion/publicacion) Alta Trazabilidad de versionado, huella documental, canales de envio, correlacion temporal.
Error de publicacion temprana Objeto/documento subido antes de ventana oficial Media Historico de storage/CDN, invalidaciones, timestamp de objetos y hash.
Acceso anonimo via endpoint web Fallo severo de autorizacion en API sensible Baja (segun pruebas) Ya probado en endpoints clave sin exito (403).

Profundizacion 1: Insider + Vendor Chain (Quien y Como)

Nodo de la cadena Acceso plausible Como se materializa la fuga (alto nivel) Rastro tecnico/forense esperado
Usuarios de Comisión Calificadora, Vocales, Delegados e Interventores Roles operativos previos al cierre/publicación (RAT FSEWEB) Extracción de borradores, actas, correcciones o listados antes de ventana oficial. Consultas/descargas fuera de horario, picos de exportación, accesos por rol en rutas de comisión.
Operadores de publicación de listados/documentos Carga/actualización de documentos y estado de publicación Publicación temprana accidental o difusión fuera de canal antes del hito oficial. Desfase entre timestamp de subida y fecha oficial; huella de operador en registros de modificación.
Equipo funcional/administrador ministerial (SGOP/DG Ordenación Profesional) Gestión integral del ciclo (solicitud, examen, resultados, adjudicación) Acceso legítimo utilizado fuera de necesidad operativa o bajo coerción/social engineering. Accesos atípicos por usuario, cambios de permisos, consultas masivas anómalas.
Adjudicatario de reingeniería FSEWEB y subcontratistas Capacidad técnica sobre software/procesos según contrato CE03610/2023 Fuga por personal de soporte/desarrollo o por mala segregación de entornos. Actividad de cuentas de proveedor, trazas CI/CD, evidencias de subcontratación y cadena de acceso.
POC/Responsable de Seguridad y Coordinador Técnico del adjudicatario Nodo de coordinación ENS e incidentes, supervisión técnica No es vector en sí, pero es punto crítico de control o fallo en gobernanza de seguridad. Registros de gestión de incidentes, reportes ENS, bitácora de supervisión de personal proveedor.
Cadena física (impresión, traslado, custodia de examen) Acceso previo al material final en formato físico Apertura anticipada, copia fotográfica o ruptura de custodia fuera de trazabilidad. Saltos en cadena de custodia, diferencias de sellado, tramos sin firma/hora.
Evidencia de fuentes primarias: RAT FSEWEB enumera categorías de interesados operativos (interventores, delegados, vocales y usuarios de comisión), y la licitación CE03610/2023 identifica adjudicatario y obligaciones ENS del proveedor.

Profundizacion 2: Abuso de Sesion y Flujos de Recuperacion

Punto del flujo Comportamiento observado Riesgo real Mitigación prioritaria
POST /hera/oauth/api/v1/oidc/token con grant_type=client_username_password (password vacía) Respuesta 200 con estructura completa y errorTexto. Posible enumeración/telemetría de estado de usuarios si hay diferencias por identificador válido. Respuesta uniforme e indistinguible; rate-limit fuerte; protección anti-automatización.
grant_type=client_no_identification Emite token MW_PUBLICO + menú y metadatos amplios del proceso. Inteligencia operativa para preparar fraude dirigido (ventanas, códigos de proceso, IDs documentales). Minimizar payload para anónimo; separar metadatos internos de API pública; revisar necesidad de cada campo.
Consumo de endpoints con token anónimo No accede a recursos privados críticos (RBAC), pero obtiene errores funcionales detallados. Oracle funcional (filtra reglas de negocio, parámetros, ventanas temporales y estados internos). Normalizar errores 401/403 sin detalle de negocio para perfiles no autorizados.
Multi-cliente (herapublico, heraprivado, heraM790) con grant anónimo Se observa emisión de token anónimo en los tres client_id probados. Aumenta superficie de sesiones públicas y complejidad de control transversal. Revisar política por cliente: si no es imprescindible, deshabilitar grant anónimo en clientes privados.
Este vector no demuestra acceso directo al examen, pero sí una vía práctica de reconocimiento y preparación de ataque social/técnico sobre usuarios con privilegios reales.

Hipotesis Adicionales (Pensando Mas Alla de la API Publica)

Hipotesis Por que es plausible Prioridad Evidencia a pedir
Abuso de flujo OIDC/sesion (grants multiples) El cliente expone grants como session_id, client_no_identification, client_username_password, refresh_token. Alta Trazas de emision de token por grant y por rol, deteccion de grants atipicos previos al examen.
Robo de token en endpoint cliente legitimo Uso de Authorization: Bearer en cliente; si hay malware/extension/XSS en equipo privilegiado, hay riesgo de replay. Alta UEBA en sesiones privilegiadas, huella de dispositivo/IP, coincidencia con operaciones sensibles.
IDOR/BOLA en descargas de documentos Existen endpoints de descarga/consulta por id en varias rutas de aspirantes/subsanaciones/listados. Media-Alta Pruebas autorizadas por rol, validacion de control objeto-a-objeto y auditoria de accesos por ID.
Publicacion anticipada por error operacional Si el archivo final se sube antes y solo se \"oculta\" en UI, una URL directa podria adelantarse a la fecha oficial. Media Historial de objetos y versiones (storage/CDN), hashes, timestamps y cambios de ACL.
Riesgo de cadena de suministro frontend Se observa referencia a recurso externo (cdnjs) para libreria PDF; compromiso externo puede impactar cliente. Media Inventario de dependencias remotas, SRI/CSP, pinning y evidencias de integridad de assets.
Exfiltracion por personal/proveedor con acceso legitimo No contradice los 403 anonimos y es coherente con filtraciones tempranas reales en sistemas similares. Muy Alta Cadena de custodia digital/fisica, correlacion con canales de mensajeria/correo y huellas documentales.

Recomendaciones Tecnicas Inmediatas

  1. Uniformar errores en OAuth/API para no revelar metodos internos (devolver 401/405 consistente).
  2. Endurecer oidc/token: respuesta uniforme para client_username_password y límite por IP/identificador.
  3. Reducir drásticamente el payload entregado por client_no_identification a datos estrictamente públicos.
  4. Revisar que client_no_identification no esté habilitado innecesariamente en clientes privados.
  5. Aplicar cabeceras de seguridad tambien en shell estatico /fseweb/ (CSP, HSTS, Referrer-Policy, Permissions-Policy).
  6. Reducir informacion de superficie en bundles (rutas/roles) mediante segmentacion y minimizacion de constantes publicas.
  7. Reforzar cuentas privilegiadas (comisión/delegados/interventores/proveedor): MFA resistente a phishing, JIT access, UEBA.
  8. Control documental de prepublicacion: watermark nominal, acceso just-in-time, firma y sellado de version, DLP.
  9. Auditoria completa cadena digital + fisica (impresion, transporte, apertura de sobres, comision).

Plan de Verificacion Formal (Para Confirmar o Refutar Sospecha)

  1. Congelar evidencia de logs: IAM, reverse-proxy, WAF/CDN, correo, SIEM, almacenamiento y CI/CD.
  2. Reconstruir linea temporal de artefactos de examen: creacion, edicion, aprobacion, exportacion, publicacion.
  3. Cruzar accesos privilegiados con ventanas de difusion externa sospechosa.
  4. Verificar integridad de objetos/documentos por hash y control de versiones.
  5. Analizar cadena de custodia fisica con registro firmado de cada transferencia.
Este informe identifica factibilidad tecnica y prioridades de auditoria. No demuestra autoria ni ofrece instrucciones de intrusion.

Matriz de Investigacion Prioritaria (Quien Primero)

Prioridad Grupo/Actor Por que primero Logs/Fuentes clave Campos a extraer
P1 Usuarios de Comisión Calificadora (MW_COMISION) Acceso natural a material de examen/corrección antes de publicación. OAuth token logs, API access logs, auditoría funcional comisión. timestamp, user_id, authorities, grant_type, ip, user_agent, endpoint, status.
P1 Delegados e Interventores (MW_DELEGADO, MW_INTERVENTOR) RAT FSEWEB los sitúa en el circuito operativo de pruebas. IAM/SSO, acceso a documentos, trazas de descarga/exportación. user_id, rol, idDocumento, codProceso, bytes_sent, session_id.
P1 Operadores de publicación de listados/documentos Pueden adelantar publicación o exfiltrar artefacto final. CMS/repositorio documental, storage/CDN object logs. object_key, version_id, etag/hash, acl_change, published_at, modified_by.
P2 Adjudicatario y subcontratistas (cadena CE03610/2023) Acceso técnico potencial por desarrollo/soporte y entornos. VPN/jump hosts, CI/CD, repositorios, tickets de soporte. vendor_user, host, repo_action, pipeline_id, artifact_hash, ticket_id.
P2 Administración funcional central (SGOP/DGOP) Control transversal del proceso y autorizaciones críticas. IAM admin logs, cambios de permisos, auditoría de configuración. grant_change, role_assignment, policy_version, changed_by, change_time.
P3 Cadena física (impresión/transporte/custodia) Vector clásico de fuga fuera de la capa web. Actas de custodia, registros de entrega/recepción, CCTV. acta_id, origen, destino, hora_salida, hora_entrega, firmante.

Consultas Forenses Iniciales (Plantillas)

Ajustar a SIEM real (Elastic/Splunk/Sentinel). Objetivo: detección temprana de acceso anómalo prepublicación.

  1. SELECT * FROM oauth_logs WHERE grant_type IN ('client_username_password','refresh_token','authorization_code') AND authorities LIKE '%MW_COMISION%' AND timestamp BETWEEN T0-30d AND T0 ORDER BY timestamp;
  2. SELECT user_id, COUNT(*) FROM api_logs WHERE endpoint LIKE '%comisionCalificadora%' AND timestamp BETWEEN T0-30d AND T0 GROUP BY user_id ORDER BY COUNT(*) DESC;
  3. SELECT * FROM doc_logs WHERE idDocumento IS NOT NULL AND action IN ('download','export','view') AND timestamp BETWEEN T0-30d AND T0 AND hour(timestamp) NOT BETWEEN 7 AND 22;
  4. SELECT * FROM storage_audit WHERE object_key LIKE '%examen%' OR object_key LIKE '%cuaderno%' AND timestamp BETWEEN T0-30d AND T0 ORDER BY timestamp;
  5. SELECT * FROM iam_changes WHERE changed_role IN ('MW_COMISION','MW_DELEGADO','MW_INTERVENTOR') AND timestamp BETWEEN T0-30d AND T0;
  6. SELECT * FROM oauth_logs WHERE grant_type='client_no_identification' AND client_id IN ('heraprivado','heraM790') AND timestamp BETWEEN T0-30d AND T0;

Reglas de Escalado

  1. Escalar a incidente crítico si hay acceso a endpoints de comisión/documentos fuera de ventana operativa por usuario privilegiado.
  2. Escalar si aparecen cambios de ACL/publicación de objetos dentro de las 72 horas previas al hito oficial sin ticket aprobado.
  3. Escalar si un mismo user_id presenta IPs/UA incompatibles en menos de 24 horas.
  4. Escalar si hay patrón de consultas iterativas de recuperación/login desde pocos orígenes con muchos identificadores.

Ejemplos Reales de Fuga Observados

Ejemplo Endpoint/Flujo Dato expuesto observado Impacto
Leak A: token anónimo funcional POST /hera/oauth/api/v1/oidc/token
grant_type=client_no_identification
Entrega token Bearer con rol MW_PUBLICO, sesión y payload amplio. Facilita reconocimiento operativo sin credenciales previas.
Leak B: metadata de publicación documental Mismo flujo anónimo (respuesta JSON) listadosPublicados[].idDocumento (ej.: 0900e780804f3a80), usuarioModificacion (ej.: 0050960785F), fechas de modificación. Expone IDs documentales y huellas de operador reutilizables para targeting o correlación externa.
Leak C: ventanas temporales sensibles del proceso Mismo flujo anónimo (estructura menus/proceso) Ventanas de acceso de procesos (ej. IE-03 \"Consulta personalizada de su examen\" con inicio/fin temporal). Permite planificar ataques sociales/técnicos en las ventanas de mayor valor.
Leak D: comportamiento de recuperación/autenticación grant_type=client_username_password con password vacía Respuesta 200 estructurada con errorTexto y campos de estado para identificador enviado. Puede actuar como oracle de flujo si no se uniforman respuestas y límites de tasa.
No se observó fuga directa del contenido del examen en estas pruebas. La fuga observada es de inteligencia operativa y metadatos de proceso, útil para preparación de ataques a actores con privilegios.

Checklist Operativo (CSV)

Archivo generado para ejecución del incidente:

forensic_investigation_checklist.csv

Descargar checklist operativo (CSV)

Incluye: prioridad, actor, fuente de evidencia, plantilla de consulta, responsable, fecha y estado.

Fuentes

Comprobaciones tecnicas del informe realizadas con peticiones HTTP de solo lectura; se incluyeron pruebas controladas de emisión de token anónimo y validación RBAC sin realizar acciones intrusivas.