
# Laboratoire de formation en sécurité autonome reproduisant la CVE-2026-20253 (RCE non authentifiée sur Splunk Enterprise). Fournit un environnement basé sur Docker pour s'entraîner à l'exploitation web, à l'élévation de privilèges et au vol d'identifiants via une chaîne d'attaque documentée.
Splunk Enterprise 10.2.3 · Sidecar de récupération PostgreSQL · CWE-306 (Absence d'authentification pour une fonction critique) Une reproduction autonome et autorisée qui modélise le véritable avis à des fins d'éducation défensive. Elle ne contient pas de code propriétaire de Splunk.
Ce dépôt est un laboratoire de formation en cybersécurité de type Vulhub/DVWA.
Il met en place un modèle fidèle de Splunk Enterprise 10.2.3 et reproduit le
comportement documenté derrière CVE-2026-20253 : le sidecar de
récupération PostgreSQL fourni expose des fonctions privilégiées d'écriture de
fichiers et d'exécution SQL avec aucune véritable authentification (un
en-tête Basic vide ou quelconque est accepté), et la couche web de Splunk
relaie __raw/v1/postgres/* vers ce sidecar avant la passerelle de
connexion. Enchaînées, ces failles aboutissent à une exécution de code à
distance non authentifiée sous le compte de service non-root splunk.
Le laboratoire est entièrement résoluble de bout en bout : identifier l'edge, suivre un badge de santé pré-authentification jusqu'à l'API de récupération interne, prouver l'écriture arbitraire de fichiers, voler l'identifiant Postgres interne, puis transformer une primitive d'écriture de fichiers par restauration SQL en exécution de code sur un script d'entrée modulaire planifié.
edge network core network
┌───────────────────┐ ┌───────────────────────────────┐
browser ─▶ proxy :8080 ──▶ web :8001 (SPA)
(nginx edge) └▶ splunkd :8089 ─┬─▶ db :5432 (postgres)
login API + ├─▶ redis :6379 (jobs/cache)
__raw relay ───┼─▶ pg-sidecar :5435 ◀── THE VULN
│ (recovery API, blank Basic)
forwarders ─▶ ingest :8088 (HEC) ─────────┘
scheduler ──▶ runs modular-input script
as `splunk` (uid 1000) — RCE sink
shared volume app_data mounted into
pg-sidecar (write) + scheduler (exec)
Deux ponts Docker : edge (proxy) et core (tout le reste). Dans la version
vulnérable, le pg-sidecar se trouve sur core et est joignable depuis le
relais de la couche web — c'est cette joignabilité qui est en cause. L'overlay
corrigé l'isole.
cp .env.example .env
docker compose up --build -d
Rendez-vous ensuite sur http://localhost:8080.
L'exploit critique (le sidecar de récupération) est totalement non authentifié — vous n'avez pas besoin de vous connecter pour l'atteindre. Les comptes de plateforme préconfigurés ci-dessous n'existent que comme points d'observation en boîte grise pour la découverte (lecture des journaux d'audit de Splunk dans Search & Reporting). Fournissez aux participants le compte analyst et laissez-les découvrir le reste.
Ces identifiants sont intentionnellement documentés — il s'agit d'un laboratoire de formation autonome, pas d'un système de production. L'exercice ne nécessite pas de les casser ni d'en élever les privilèges ; l'API de récupération critique
pg-sidecarest non authentifiée. Les notes complètes de l'opérateur se trouvent dansdocs/DEPLOYMENT.md.
Il y a deux flags à capturer. Ce sont tous deux des chaînes SPLUNK{...} ;
leurs valeurs se trouvent dans le laboratoire et sont révélées dans les docs —
elles ne sont volontairement pas affichées ici afin que vous puissiez les
mériter.
__raw pré-session, franchissez la fausse
authentification Basic, et exfiltrez l'identifiant Postgres interne depuis
le .pgpass du sidecar.splunk. Transformez les
primitives d'écriture de fichiers et de restauration SQL du sidecar en
exécution de code sur le script d'entrée modulaire planifié, puis lisez le
secret protégé.Ne sautez pas d'étape :
docs/DISCOVERY_WALKTHROUGH.md est conçu pour
être découvert, pas pour être gâché. Une échelle d'indices graduée et la
solution complète de l'instructeur existent pour le personnel formateur, mais
sont laissées hors de ce paquet afin que l'exercice reste une résolution en
aveugle.
L'arborescence patched/ reflète le correctif réel de Splunk (10.2.4) ainsi que
la parade de l'avis, en une défense en profondeur :
backupFile,__raw pré-authentification,Voir patched/PATCH_NOTES.md.
Démarrez la version durcie avec l'overlay :
docker compose -f docker-compose.yml -f patched/deploy/compose.override.hardened.yml up --build -d
Reprenant l'atténuation de l'avis, vous pouvez désactiver entièrement le sidecar
de récupération sans correctif — l'équivalent de définir
[postgres] disabled = true dans server.conf. Définissez ce qui suit dans
votre .env et recréez la pile :
PG_SIDECAR_DISABLED=true
Avec le sidecar désactivé, les fonctions recovery/* disparaissent et la chaîne
est rompue à la source.
Matériel de formation. Ce laboratoire est une reproduction autonome et autorisée qui modélise Splunk Enterprise CVE-2026-20253 pour l'éducation défensive. Il ne contient ni le code source ni les binaires propriétaires de Splunk ; les services présents ici sont une réimplémentation indépendante du comportement vulnérable documenté. N'utilisez ces techniques que contre ce laboratoire. Les exécuter contre des systèmes qui ne vous appartiennent pas est illégal.
| Avis du fournisseur | SVD-2026-0603 |
| CVE | CVE-2026-20253 |
| Faiblesse | CWE-306 — Absence d'authentification pour une fonction critique |
| Affecté | Splunk Enterprise 10.2.3 |
| Corrigé dans | Splunk Enterprise 10.2.4 |
| CVSS 3.1 | 9.8 (Critique) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Service | Image | Écoute | Publié | Rôle |
|---|
proxy | splunk/proxy:10.2.3 | 8080 | 8080:8080 | edge nginx ; point d'entrée Splunk Web + relais __raw |
web | splunk/web:10.2.3 | 8001 | — | Application monopage Splunk Web (statique) |
splunkd | splunk/splunkd:10.2.3 | 8089 | — | Démon Splunk / couche web : API de connexion + relais pré-session /{locale}/splunkd/__raw/v1/postgres/* |
ingest | splunk/ingest:10.2.3 | 8088 | 8088:8088 | Collecteur d'événements HTTP (authentification par jeton) |
pg-sidecar | splunk/pg-sidecar:10.2.3 | 5435 | — | LA VULNÉRABILITÉ — sidecar de récupération PostgreSQL (/v1/postgres/*) |
scheduler | splunk/scheduler:10.2.3 | — | — | exécute le script d'entrée modulaire planifié en tant que splunk → sink RCE |
db | postgres:16-alpine | 5432 | — | Postgres interne que le sidecar sauvegarde / restaure |
redis | redis:7-alpine | 6379 | — | file d'attente des travaux / cache |
| Nom d'utilisateur | Mot de passe | Rôle | Notes |
|---|
admin | Str@ta-Admin-2026! | administrateur | Administrateur complet de la plateforme (Settings, Users, Data Inputs) |
j.okafor | Analyst!Winter24 | analyste | Commencez ici — console Search & Reporting en lecture seule |
m.reyes | Operator#2311 | opérateur | Gère les sources / vues de cluster |
svc_forwarder | fwd-3f9a1c77b204 | opérateur | Compte de service (forwarder HEC) |
| Document | Public / objectif |
|---|
docs/DISCOVERY_WALKTHROUGH.md | Parcours guidé par la découverte, du fingerprint au RCE |
docs/ROOT_CAUSE.md | Pourquoi c'est vulnérable (CWE-306) et comment le correctif le résout |
docs/ARCHITECTURE.md | Services, réseaux, relais __raw et flux de données |
docs/DETECTION.md | Opportunités de détection et signatures pour l'équipe bleue |
docs/PLAYER_GUIDE.md | Briefing et périmètre du participant |
docs/HINTS.md | Échelle d'indices graduée — conservée en interne, non incluse dans ce paquet |
docs/INSTRUCTOR_GUIDE.md | Réservé au personnel formateur — solution complète + flags, conservé en interne, non inclus |
docs/DEPLOYMENT.md | Déployer, exploiter et démonter l'environnement |