
Un laboratorio containerizado de estilo empresarial para investigar y defenderse contra CVE-2026-27483.
Un laboratorio completo, realista y de estilo empresarial basado en Docker para aprender, probar y defenderte contra CVE-2026-27483 (Path Traversal → RCE en MindsDB). Este repositorio proporciona una topología de laboratorio desplegable, configuraciones, imágenes de contenedor mínimas, reglas de detección y scripts auxiliares para que puedas poner en marcha de forma segura un entorno aislado para practicar el descubrimiento, la explotación (saneada) y la defensa.
IMPORTANTE: Este laboratorio incluye intencionalmente una versión vulnerable de MindsDB con fines educativos. Ejecútalo solo en entornos aislados y sin conexión a internet, y nunca lo expongas a redes públicas.
Internet (Atacante)
↓
Proxy Inverso (nginx)
↓
┌─────────────────────────────────┐
│ MindsDB (Vulnerable) │ Puerto 47334
│ - Vulnerable a CVE-2026-27483 │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ Base de Datos PostgreSQL │ Puerto 5432 (interno)
│ - Almacena datos de MindsDB │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ Stack ELK (Registro) │
│ - Elasticsearch, Logstash │ Puertos 9200, 5000
│ - Panel de Kibana │ Puerto 5601
└─────────────────────────────────┘
Los servicios están conectados en una red Docker bridge dedicada (172.20.0.0/16 por defecto). Se incluye un contenedor de atacante para ejecutar intentos de explotación controlados contra el servicio MindsDB aislado.
Por defecto, Postgres no está destinado a exponerse a internet público. El archivo compose mapea los servicios internos para uso local del laboratorio.
Requisitos previos:
git clone https://github.com/nabhan-mohy/cve-2026-27483-lab.git
cd cve-2026-27483-lab
cp .env.example .env
# Abre .env y confirma DB_PASSWORD y otros valores
Importante: Asegúrate de que DB_PASSWORD en .env coincida con la contraseña que espera el archivo compose. Hay un valor por defecto en docker-compose.yml (${DB_PASSWORD:-P@ssw0rd123!}). Establece DB_PASSWORD=P@ssw0rd123! en .env o edita docker-compose.yml para usar la contraseña que prefieras. Si no coinciden, MindsDB no podrá conectarse a Postgres y los servicios no se iniciarán correctamente.
(Opcional) Edita .env para ajustar el comportamiento (habilitar/deshabilitar funciones, establecer IP del listener del atacante, etc.).
Inicia el laboratorio (modo completo):
docker compose up -d --build
curl http://localhost:47334/api/statushttp://localhost:5601http://localhost:8080docker compose down
Para eliminar volúmenes (destructivo):
docker compose down -v
El README hace referencia a perfiles mínimo y de monitoreo. Para soportarlos, puedes:
profiles: en docker-compose.yml para separar los servicios en perfiles minimal y monitoring, odocker-compose.minimal.yml que deshabilite los componentes pesados (Elasticsearch/Kibana/Wazuh) para pruebas de bajos recursos.Un enfoque mínimo sugerido para pruebas es comentar u omitir Elasticsearch/Kibana/Wazuh y ejecutar solo: mindsdb, postgres, nginx-proxy y attacker.
Proxy inverso (nginx-proxy): actúa como el endpoint orientado al exterior y enruta el tráfico del atacante al servicio vulnerable MindsDB. El proxy también proporciona un panel simple en el puerto 8080 para verificaciones rápidas.
MindsDB (imagen vulnerable): empaquetado a partir de la versión vulnerable referenciada en el README. Almacena datos en Postgres y proporciona endpoints API que son intencionalmente vulnerables en versiones antiguas.
Postgres: almacena la configuración y los artefactos de MindsDB. Se proporcionan SQL de inicialización y datos semilla en configs/postgres/*.sql.
Stack ELK (Elasticsearch, Logstash, Kibana): recopila registros del proxy y de la aplicación para que puedas construir reglas de detección y paneles.
Wazuh (opcional): agente y administrador de monitoreo de seguridad. Se incluye como marcador de posición para demostrar la integración; los certificados TLS y las credenciales en la configuración son marcadores de posición y deben aprovisionarse para su funcionalidad completa.
Contenedor del atacante: un entorno con utilidades (curl, netcat, python) y la carpeta exploits/ montada para ejecutar scripts de desafío desde dentro de la misma red Docker (aislada de la red de tu host si así lo deseas).
Servicio de respaldo: contenedor de muestra para demostrar flujos de trabajo empresariales realistas (respaldos que extraen volcados de la base de datos de Postgres).
docker compose exec -it attacker /bin/bash), ejecuta reconocimiento contra el proxy (puerto 80/8080) y la API de MindsDB (47334).exploits/ y docs/challenges/ con orientación y verificaciones seguras.Ejemplo: ejecuta un reconocimiento básico desde el contenedor del atacante
# ingresa al contenedor del atacante
docker compose exec -it attacker /bin/bash
# escanea la red o haz curl a los endpoints
curl -v http://nginx-proxy:80/
curl -v http://mindsdb:47334/api/status
Se proporciona un script de prueba de humo en scripts/smoke_test.sh (si está presente). Realiza las siguientes verificaciones:
/api/status de MindsDB respondapg_isreadyEjecútalo localmente:
chmod +x scripts/smoke_test.sh
./scripts/smoke_test.sh
Si la prueba de humo falla, recopila los registros en smoke_compose_logs.txt y compártelos para depuración:
docker compose logs --no-color > smoke_compose_logs.txt
Se proporciona una canalización de Logstash en configs/logstash/logstash.conf para reenviar registros a Elasticsearch. La regla Sigma incluida rules/sigma/cve-2026-27483.yml es un ejemplo simple que marca patrones sospechosos de path traversal (solicitudes que contienen ..). Úsala como punto de partida y refínala para reducir falsos positivos.
Crea paneles en Kibana para visualizar:
.env y docker-compose.yml. Asegúrate de que ambos coincidan con el mismo secreto.docker compose logs -f mindsdb para ver trazas de pila y errores de conectividad con la base de datos.ES_JAVA_OPTS en docker-compose.yml (ejemplo: -Xms256m -Xmx256m) para hosts pequeños.mindsdb:47334) y que el contenedor de mindsdb esté saludable.Si necesitas ayuda para depurar, ejecuta la prueba de humo y comparte smoke_compose_logs.txt.
Las contribuciones son bienvenidas. Formas sugeridas de ayudar:
docs/ (despliegue, desafíos, detección, respuesta a incidentes)exploits/ con guías de aprendizaje paso a pasoAbre PRs contra main y sigue las pautas de CONTRIBUTING cuando agregues material educativo de explotación.
Hecho con ❤️ para la comunidad de seguridad.