
Um laboratório containerizado no estilo empresarial para pesquisar e se defender contra o CVE-2026-27483.
Um laboratório completo, realista e em estilo empresarial baseado em Docker para aprender, testar e se defender contra o CVE-2026-27483 (Path Traversal → RCE no MindsDB). Este repositório fornece uma topologia de laboratório implantável, configurações, imagens de contêiner mínimas, regras de detecção e scripts auxiliares para que você possa iniciar com segurança um ambiente isolado para praticar descoberta, exploração (saneada) e defesa.
IMPORTANTE: Este laboratório inclui intencionalmente uma versão vulnerável do MindsDB para fins educacionais. Execute apenas em ambientes isolados e sem conexão com a internet e nunca o exponha a redes públicas.
Internet (Atacante)
↓
Proxy Reverso (nginx)
↓
┌─────────────────────────────────┐
│ MindsDB (Vulnerável) │ Porta 47334
│ - Vulnerável ao CVE-2026-27483 │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ Banco de Dados PostgreSQL │ Porta 5432 (interna)
│ - Armazena dados do MindsDB │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ Pilha ELK (Registro de Logs) │
│ - Elasticsearch, Logstash │ Portas 9200, 5000
│ - Painel Kibana │ Porta 5601
└─────────────────────────────────┘
Os serviços são conectados em uma rede Docker bridge dedicada (172.20.0.0/16 por padrão). Um contêiner do atacante é incluído para executar tentativas de exploração controladas contra o serviço MindsDB isolado.
Por padrão, o Postgres não deve ser exposto à internet pública. O arquivo compose mapeia serviços internos para uso local no laboratório.
Pré-requisitos:
git clone https://github.com/nabhan-mohy/cve-2026-27483-lab.git
cd cve-2026-27483-lab
cp .env.example .env
# Abra o .env e confirme o DB_PASSWORD e outros valores
Importante: Garanta que o DB_PASSWORD no .env corresponda à senha que o arquivo compose espera. Há um valor padrão em docker-compose.yml (${DB_PASSWORD:-P@ssw0rd123!}). Defina DB_PASSWORD=P@ssw0rd123! no .env ou edite o docker-compose.yml para usar a senha de sua preferência. Se houver divergência, o MindsDB falhará ao conectar ao Postgres e os serviços não iniciarão corretamente.
(Opcional) Edite o .env para ajustar o comportamento (habilitar/desabilitar recursos, definir IP do listener do atacante, etc.).
Inicie o laboratório (modo completo):
docker compose up -d --build
curl http://localhost:47334/api/statushttp://localhost:5601http://localhost:8080docker compose down
Para remover volumes (destrutivo):
docker compose down -v
O README menciona perfis mínimo e de monitoramento. Para suportá-los, você pode:
profiles: no docker-compose.yml para separar os serviços em perfis minimal e monitoring, oudocker-compose.minimal.yml, que desabilita componentes pesados (Elasticsearch/Kibana/Wazuh) para testes com poucos recursos.Uma abordagem mínima sugerida para testes é comentar ou pular Elasticsearch/Kibana/Wazuh e executar apenas: mindsdb, postgres, nginx-proxy e attacker.
Proxy reverso (nginx-proxy): atua como o endpoint voltado para o exterior e roteia o tráfego do atacante para o serviço MindsDB vulnerável. O proxy também fornece uma porta de painel simples (8080) para verificações rápidas.
MindsDB (imagem vulnerável): empacotado a partir da versão vulnerável referenciada no README. Ele armazena dados no Postgres e fornece endpoints de API que são intencionalmente vulneráveis em versões mais antigas.
Postgres: armazena a configuração e artefatos do MindsDB. O SQL de inicialização e os dados de seed são fornecidos em configs/postgres/*.sql.
Pilha ELK (Elasticsearch, Logstash, Kibana): coleta logs do proxy e da aplicação para que você possa criar regras de detecção e painéis.
Wazuh (opcional): agente e gerenciador de monitoramento de segurança. Incluído como um espaço reservado para demonstrar integração; certificados TLS e credenciais na configuração são espaços reservados e devem ser provisionados para funcionalidade completa.
Contêiner do atacante: um ambiente com utilitários (curl, netcat, python) e a pasta exploits/ montada para executar scripts de desafio de dentro da mesma rede Docker (isolada da rede do host, se desejado).
Serviço de backup: contêiner de exemplo para demonstrar fluxos de trabalho empresariais realistas (backups puxando dumps do banco de dados do Postgres).
docker compose exec -it attacker /bin/bash), execute reconhecimento contra o proxy (porta 80/8080) e a API do MindsDB (47334).exploits/ e docs/challenges/ com orientação e verificações seguras.Exemplo: execute um reconhecimento básico a partir do contêiner do atacante
# entre no contêiner do atacante
docker compose exec -it attacker /bin/bash
# escaneie a rede ou faça curl nos endpoints
curl -v http://nginx-proxy:80/
curl -v http://mindsdb:47334/api/status
Um script de teste de fumaça é fornecido em scripts/smoke_test.sh (se presente). Ele executa as seguintes verificações:
/api/status do MindsDB responderpg_isreadyExecute localmente:
chmod +x scripts/smoke_test.sh
./scripts/smoke_test.sh
Se o teste de fumaça falhar, colete os logs em smoke_compose_logs.txt e compartilhe-os para depuração:
docker compose logs --no-color > smoke_compose_logs.txt
O pipeline do Logstash é fornecido em configs/logstash/logstash.conf para encaminhar logs ao Elasticsearch. A regra Sigma incluída rules/sigma/cve-2026-27483.yml é um exemplo simples que sinaliza padrões suspeitos de path traversal (requisições contendo ..). Use-a como ponto de partida e refine para reduzir falsos positivos.
Crie painéis no Kibana para visualizar:
.env e docker-compose.yml. Garanta que ambos concordem com o mesmo segredo.docker compose logs -f mindsdb para rastreios de pilha e erros de conectividade com o banco.ES_JAVA_OPTS no docker-compose.yml (exemplo: -Xms256m -Xmx256m) para hosts pequenos.mindsdb:47334) e que o contêiner mindsdb esteja saudável.Se precisar de ajuda para depurar, execute o teste de fumaça e compartilhe smoke_compose_logs.txt.
Contribuições são bem-vindas. Formas sugeridas de ajudar:
docs/ (implantação, desafios, detecção, resposta a incidentes)exploits/ com guias de aprendizado passo a passoAbra PRs contra main e siga as diretrizes de CONTRIBUTING ao adicionar material educacional de exploração.
Feito com ❤️ para a comunidade de segurança.