
Laboratorio de formación en seguridad autónomo que reproduce CVE-2026-20253 (RCE no autenticado en Splunk Enterprise). Proporciona un entorno basado en Docker para practicar explotación web, escalada de privilegios y robo de credenciales a través de una cadena de ataque documentada.
Splunk Enterprise 10.2.3 · sidecar de recuperación PostgreSQL · CWE-306 (Autenticación faltante para función crítica) Una reproducción autorizada y autocontenida que modela el aviso real para educación defensiva. No incluye código propietario de Splunk.
Este repositorio es un laboratorio de entrenamiento en seguridad estilo Vulhub/DVWA. Levanta un
modelo fiel de Splunk Enterprise 10.2.3 y reproduce el comportamiento documentado
detrás de CVE-2026-20253: el sidecar de recuperación PostgreSQL incluido
expone funciones privilegiadas de escritura de archivos y ejecución SQL con ninguna autenticación real
(se acepta un encabezado Basic vacío/cualquiera), y el nivel web de Splunk
retransmite __raw/v1/postgres/* a ese sidecar antes de la puerta de inicio de sesión.
Encadenado, esto produce ejecución remota de código no autenticada como la
cuenta de servicio splunk (no root).
El laboratorio es totalmente resoluble de principio a fin: identificar el borde, seguir una insignia de estado previa a la autenticación a la API de recuperación interna, probar la escritura arbitraria de archivos, robar la credencial interna de Postgres y pivotar una primitiva de escritura de archivos de restauración SQL hacia ejecución de código en un script de entrada modular programado.
red de borde red central
┌───────────────────┐ ┌───────────────────────────────┐
navegador ─▶ proxy :8080 ──▶ web :8001 (SPA)
(nginx edge) └▶ splunkd :8089 ─┬─▶ db :5432 (postgres)
API de inicio + ├─▶ redis :6379 (trabajos/caché)
retransmisión __raw ──┼─▶ pg-sidecar :5435 ◀── LA VULNERABILIDAD
│ (API de recuperación, Basic en blanco)
reenviadores ─▶ ingest :8088 (HEC) ─────────┘
programador ──▶ ejecuta script de entrada modular
como `splunk` (uid 1000) — destino RCE
volumen compartido app_data montado en
pg-sidecar (escritura) + programador (ejecución)
Dos puentes Docker: edge (proxy) y core (todo lo demás). En la
compilación vulnerable el pg-sidecar está en core y es accesible desde la
retransmisión del nivel web — esa accesibilidad es el punto. La superposición corregida lo aísla.
cp .env.example .env
docker compose up --build -d
Luego navegue a http://localhost:8080.
La explotación crítica (el sidecar de recuperación) está completamente no autenticada — no necesita iniciar sesión para acceder a ella. Las cuentas de plataforma predefinidas a continuación existen solo como puntos de vista de caja gris para el descubrimiento (leer los propios registros de auditoría de Splunk en Búsqueda e Informes). Entregue a los participantes la cuenta de analista y permítales descubrir el resto.
Estas credenciales están documentadas intencionalmente — este es un laboratorio de entrenamiento autocontenido, no un sistema de producción. El ejercicio no requiere descifrar ni escalar ninguna de ellas; la API de recuperación crítica de
pg-sidecarestá no autenticada. Las notas completas del operador se encuentran endocs/DEPLOYMENT.md.
Hay dos banderas que capturar. Ambas son cadenas SPLUNK{...}; sus valores
están en el laboratorio y se revelan en los documentos — están intencionalmente no
impresas aquí para que pueda ganarlas.
__raw previa a la sesión, pase la autenticación
Basic falsa y filtre la credencial interna de Postgres desde el .pgpass del sidecar.splunk. Convierta las primitivas de escritura de archivos
y restauración SQL del sidecar en ejecución de código en el script de entrada modular
programado, luego lea el secreto protegido.No se adelante: docs/DISCOVERY_WALKTHROUGH.md
está escrito para ser descubierto, no para ser estropeado. Existe una escalera de pistas graduada y la solución
completa del instructor para el personal de capacitación, pero se mantienen fuera de este paquete
para que el ejercicio permanezca como una resolución a ciegas.
El árbol patched/ refleja la corrección real de Splunk (10.2.4) más la solución alternativa
del aviso, aplicadas como defensa en profundidad: validación real de credenciales en las
rutas de recuperación, sanitización de path-traversal en backupFile, eliminación de la
inyección de cadena de conexión libpq, un rol de restauración no superusuario, eliminación de la
retransmisión __raw previa a la autenticación y aislamiento de red del sidecar. Consulte
patched/PATCH_NOTES.md.
Levante la compilación reforzada con la superposición:
docker compose -f docker-compose.yml -f patched/deploy/compose.override.hardened.yml up --build -d
Reflejando la mitigación del aviso, puede deshabilitar el sidecar de recuperación
por completo sin parchear — el análogo de establecer [postgres] disabled = true
en server.conf. Establezca lo siguiente en su .env y recrear la pila:
PG_SIDECAR_DISABLED=true
Con el sidecar deshabilitado, las funciones recovery/* desaparecen y la cadena se
rompe en el origen.
Material de entrenamiento. Este laboratorio es una reproducción autorizada y autocontenida que modela Splunk Enterprise CVE-2026-20253 para educación defensiva. No contiene código fuente o binarios propietarios de Splunk; los servicios aquí son una reimplementación independiente del comportamiento vulnerable documentado. Úselo solo contra este laboratorio. Ejecutar estas técnicas contra sistemas que no posee es ilegal.
| Aviso del fabricante | SVD-2026-0603 |
| CVE | CVE-2026-20253 |
| Debilidad | CWE-306 — Autenticación faltante para función crítica |
| Afectado | Splunk Enterprise 10.2.3 |
| Corregido en | Splunk Enterprise 10.2.4 |
| CVSS 3.1 | 9.8 (Crítico) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Servicio | Imagen | Escucha | Publicado | Rol |
|---|
proxy | splunk/proxy:10.2.3 | 8080 | 8080:8080 | borde nginx; punto de entrada de Splunk Web + retransmisión __raw |
web | splunk/web:10.2.3 | 8001 | — | Aplicación de página única de Splunk Web (estática) |
splunkd | splunk/splunkd:10.2.3 | 8089 | — | Demonio / nivel web de Splunk: API de inicio de sesión + la retransmisión /{locale}/splunkd/__raw/v1/postgres/* previa a la sesión |
ingest | splunk/ingest:10.2.3 | 8088 | 8088:8088 | Colector de eventos HTTP (autenticación por token) |
pg-sidecar | splunk/pg-sidecar:10.2.3 | 5435 | — | LA VULNERABILIDAD — Sidecar de recuperación PostgreSQL (/v1/postgres/*) |
scheduler | splunk/scheduler:10.2.3 | — | — | ejecuta el script de entrada modular programado como splunk → destino RCE |
db | postgres:16-alpine | 5432 | — | Postgres interno que el sidecar respalda/restaura |
redis | redis:7-alpine | 6379 | — | Cola de trabajos / caché |
| Nombre de usuario | Contraseña | Rol | Notas |
|---|
admin | Str@ta-Admin-2026! | admin | Administrador completo de la plataforma (Configuración, Usuarios, Entradas de datos) |
j.okafor | Analyst!Winter24 | analista | Comience aquí — Consola de Búsqueda e Informes de solo lectura |
m.reyes | Operator#2311 | operador | Gestiona fuentes / vistas de clúster |
svc_forwarder | fwd-3f9a1c77b204 | operador | Cuenta de servicio (reenviador HEC) |
| Documento | Audiencia / propósito |
|---|
docs/DISCOVERY_WALKTHROUGH.md | Ruta guiada por descubrimiento desde la identificación hasta RCE |
docs/ROOT_CAUSE.md | Por qué es vulnerable (CWE-306) y cómo lo corrige el parche |
docs/ARCHITECTURE.md | Servicios, redes, la retransmisión __raw y flujo de datos |
docs/DETECTION.md | Oportunidades y firmas de detección para el equipo azul |
docs/PLAYER_GUIDE.md | Informe del participante y alcance |
docs/HINTS.md | Escalera de pistas graduada — mantenida interna, no incluida en este paquete |
docs/INSTRUCTOR_GUIDE.md | Solo para personal de capacitación — solución completa + banderas, mantenida interna, no incluida |
docs/DEPLOYMENT.md | Levantar, operar y derribar el entorno |