
Laboratório de treinamento de segurança autônomo que reproduz a CVE-2026-20253 (RCE não autenticada no Splunk Enterprise). Fornece um ambiente baseado em Docker para praticar exploração web, escalonamento de privilégios e roubo de credenciais por meio de uma cadeia de ataque documentada.
Splunk Enterprise 10.2.3 · sidecar de recuperação PostgreSQL · CWE-306 (Autenticação Ausente para Função Crítica) Uma reprodução autorizada e autocontida que modela o aviso real para educação defensiva. Ela não inclui o código proprietário da Splunk.
Este repositório é um laboratório de treinamento de segurança no estilo Vulhub/DVWA. Ele monta um modelo fiel do Splunk Enterprise 10.2.3 e reproduz o comportamento documentado por trás do CVE-2026-20253: o sidecar de recuperação PostgreSQL incluído expõe funções privilegiadas de escrita de arquivos e execução de SQL sem autenticação real (um cabeçalho Basic vazio/qualquer é aceito), e a camada web do Splunk retransmite __raw/v1/postgres/* para esse sidecar antes da barreira de login. Encadeados, isso resulta em execução remota de código não autenticada como a conta de serviço não-root splunk.
O laboratório é totalmente solucionável de ponta a ponta: faça o fingerprint do edge, siga um indicador de saúde pré-autenticação até a API de recuperação interna, prove a escrita arbitrária de arquivos, roube a credencial interna do Postgres e transforme a primitiva de escrita de arquivos do SQL-restore em execução de código em um script de entrada modular agendado.
| Aviso do fornecedor | SVD-2026-0603 |
| CVE | CVE-2026-20253 |
| Fraqueza | CWE-306 — Autenticação Ausente para Função Crítica |
| Afetado | Splunk Enterprise 10.2.3 |
| Corrigido em | Splunk Enterprise 10.2.4 |
| CVSS 3.1 | 9.8 (Crítica) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
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)
| Serviço | Imagem | Escuta | Publicado | Função |
|---|---|---|---|---|
proxy | splunk/proxy:10.2.3 | 8080 | 8080:8080 | edge nginx; ponto de entrada do Splunk Web + relay __raw |
web | splunk/web:10.2.3 | 8001 | — | Aplicativo de página única do Splunk Web (estático) |
splunkd | splunk/splunkd:10.2.3 | 8089 | — | daemon Splunk / camada web: API de login + relay pré-sessão /{locale}/splunkd/__raw/v1/postgres/* |
ingest | splunk/ingest:10.2.3 | 8088 | 8088:8088 | HTTP Event Collector (autenticação por token) |
pg-sidecar | splunk/pg-sidecar:10.2.3 | 5435 | — | A VULNERABILIDADE — sidecar de recuperação PostgreSQL (/v1/postgres/*) |
scheduler | splunk/scheduler:10.2.3 | — | — | executa o script de entrada modular agendado como splunk → sumidouro de RCE |
db | postgres:16-alpine | 5432 | — | Postgres interno do qual o sidecar faz backup / restauração |
redis | redis:7-alpine | 6379 | — | fila de trabalhos / cache |
Duas bridges Docker: edge (proxy) e core (todo o resto). Na variante vulnerável, o pg-sidecar fica em core e é alcançável a partir do relay da camada web — essa alcançabilidade é o ponto central. O overlay corrigido o isola.
cp .env.example .env
docker compose up --build -d
Em seguida, acesse http://localhost:8080.
O exploit crítico (o sidecar de recuperação) é totalmente sem autenticação — você não precisa fazer login para alcançá-lo. As contas de plataforma pré-cadastradas abaixo existem apenas como pontos de observação grey-box para descoberta (leitura dos próprios logs de auditoria do Splunk em Search & Reporting). Entregue aos participantes a conta analyst e deixe que descubram o restante.
| Usuário | Senha | Função | Observações |
|---|---|---|---|
admin | Str@ta-Admin-2026! | admin | Admin completo da plataforma (Configurações, Usuários, Data Inputs) |
j.okafor | Analyst!Winter24 | analyst | Comece aqui — console Search & Reporting somente leitura |
m.reyes | Operator#2311 | operator | Gerencia fontes / visualizações de cluster |
svc_forwarder | fwd-3f9a1c77b204 | operator | Conta de serviço (forwarder HEC) |
Estas credenciais são intencionalmente documentadas — este é um laboratório de treinamento autocontido, não um sistema de produção. O exercício não exige quebrar ou escalar nenhuma delas; a API de recuperação crítica do
pg-sidecarnão é autenticada. As notas completas do operador estão emdocs/DEPLOYMENT.md.
Há duas flags para capturar. Ambas são strings SPLUNK{...}; seus valores estão no laboratório e são revelados na documentação — eles não são impressos aqui propositalmente, para que você possa conquistá-las.
__raw de pré-sessão, passe pela autenticação Basic falsa e vaze a credencial interna do Postgres do .pgpass do sidecar.splunk. Transforme as primitivas de escrita de arquivos e de restauração SQL do sidecar em execução de código no script de entrada modular agendado e, em seguida, leia o segredo protegido.Não pule etapas: docs/DISCOVERY_WALKTHROUGH.md foi escrito para ser descoberto, não estragado. Uma escada de dicas em níveis graduais e a solução completa do instrutor existem para a equipe de treinamento, mas são mantidas fora deste pacote para que o exercício continue sendo uma solução às cegas.
| Documento | Público / objetivo |
|---|---|
docs/DISCOVERY_WALKTHROUGH.md | Caminho orientado à descoberta, do fingerprint ao RCE |
docs/ROOT_CAUSE.md | Por que é vulnerável (CWE-306) e como o patch corrige |
docs/ARCHITECTURE.md | Serviços, redes, o relay __raw e o fluxo de dados |
docs/DETECTION.md | Oportunidades de detecção e assinaturas para o time azul |
docs/PLAYER_GUIDE.md | Briefing do participante e escopo |
docs/HINTS.md | Escada de dicas em níveis — mantida interna, não incluída neste pacote |
docs/INSTRUCTOR_GUIDE.md | Somente equipe de treinamento — solução completa + flags, mantido interno, não incluído |
docs/DEPLOYMENT.md | Montar, operar e derrubar o ambiente |