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).
Veredicto Tecnico (Resumen Directo)
403 Forbidden sin autenticacion.
201 rutas API en publico y 209 en privado, incluidas rutas de examen/comision.
MW_PUBLICO mediante grant_type=client_no_identification, con metadatos extensos del proceso (menus, ventanas y IDs documentales).
Escoring de Factibilidad
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/yhttps://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
403con mensaje de autenticacion obligatoria. - Directorio de docs/manuales sin listado (
403); archivos manuales concretos publicos previstos enngsw.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.
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. |
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. |
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
- Uniformar errores en OAuth/API para no revelar metodos internos (devolver 401/405 consistente).
- Endurecer
oidc/token: respuesta uniforme paraclient_username_passwordy límite por IP/identificador. - Reducir drásticamente el payload entregado por
client_no_identificationa datos estrictamente públicos. - Revisar que
client_no_identificationno esté habilitado innecesariamente en clientes privados. - Aplicar cabeceras de seguridad tambien en shell estatico
/fseweb/(CSP, HSTS, Referrer-Policy, Permissions-Policy). - Reducir informacion de superficie en bundles (rutas/roles) mediante segmentacion y minimizacion de constantes publicas.
- Reforzar cuentas privilegiadas (comisión/delegados/interventores/proveedor): MFA resistente a phishing, JIT access, UEBA.
- Control documental de prepublicacion: watermark nominal, acceso just-in-time, firma y sellado de version, DLP.
- Auditoria completa cadena digital + fisica (impresion, transporte, apertura de sobres, comision).
Plan de Verificacion Formal (Para Confirmar o Refutar Sospecha)
- Congelar evidencia de logs: IAM, reverse-proxy, WAF/CDN, correo, SIEM, almacenamiento y CI/CD.
- Reconstruir linea temporal de artefactos de examen: creacion, edicion, aprobacion, exportacion, publicacion.
- Cruzar accesos privilegiados con ventanas de difusion externa sospechosa.
- Verificar integridad de objetos/documentos por hash y control de versiones.
- Analizar cadena de custodia fisica con registro firmado de cada transferencia.
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.
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;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;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;SELECT * FROM storage_audit WHERE object_key LIKE '%examen%' OR object_key LIKE '%cuaderno%' AND timestamp BETWEEN T0-30d AND T0 ORDER BY timestamp;SELECT * FROM iam_changes WHERE changed_role IN ('MW_COMISION','MW_DELEGADO','MW_INTERVENTOR') AND timestamp BETWEEN T0-30d AND T0;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
- Escalar a incidente crítico si hay acceso a endpoints de comisión/documentos fuera de ventana operativa por usuario privilegiado.
- Escalar si aparecen cambios de ACL/publicación de objetos dentro de las 72 horas previas al hito oficial sin ticket aprobado.
- Escalar si un mismo
user_idpresenta IPs/UA incompatibles en menos de 24 horas. - 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/tokengrant_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. |
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
- https://fse.sanidad.gob.es/fseweb/
- https://fse-privado.sanidad.gob.es/fseweb/
- RAT Ministerio de Sanidad (FSEWEB)
- Detalle CE03610/2023 en Contratación del Estado (adjudicación y adjudicatario)
- Licitacion reingenieria FSEWEB (CE03610/2023)
- BOE-A-2022-12305 (funciones FSEWEB/GESRESWEB)
- Caso historico de filtracion (2018)
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.