
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.
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)
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.
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.
A árvore patched/ reflete a correção real da Splunk (10.2.4) e a mitigação do aviso, em camadas de defesa em profundidade: validação real de credenciais nas rotas de recuperação, sanitização de path traversal no backupFile, eliminação da injeção na connection string do libpq, uma role de restauração sem superusuário, remoção do relay __raw pré-autenticação e isolamento de rede do sidecar. Consulte patched/PATCH_NOTES.md.
Suba a versão endurecida com o overlay:
docker compose -f docker-compose.yml -f patched/deploy/compose.override.hardened.yml up --build -d
Espelhando a mitigação do aviso, você pode desabilitar totalmente o sidecar de recuperação sem aplicar patch — o análogo a definir [postgres] disabled = true em server.conf. Defina o seguinte no seu .env e recrie a stack:
PG_SIDECAR_DISABLED=true
Com o sidecar desabilitado, as funções recovery/* deixam de existir e a cadeia é quebrada na origem.
Material de treinamento. Este laboratório é uma reprodução autorizada e autocontida que modela o CVE-2026-20253 do Splunk Enterprise para educação defensiva. Ele não contém o código-fonte ou binários proprietários da Splunk; os serviços aqui são uma reimplementação independente do comportamento vulnerável documentado. Use apenas contra este laboratório. Executar essas técnicas contra sistemas que não são seus é ilegal.
| 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 |
| 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 |
| 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) |
| 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 |