
A containerized enterprise-style lab for researching and defending against CVE-2026-27483.
A complete, realistic, enterprise-style Docker-based lab for learning, testing, and defending against CVE-2026-27483 (MindsDB Path Traversal → RCE). This repository provides a deployable lab topology, configs, minimal container images, detection rules, and helper scripts so you can safely spin up an isolated environment to practice discovery, exploitation (sanitized), and defense.
IMPORTANT: This lab intentionally includes a vulnerable MindsDB version for educational purposes. Run only in isolated, air-gapped environments and never expose it to public networks.
Internet (Attacker)
↓
Reverse Proxy (nginx)
↓
┌─────────────────────────────────┐
│ MindsDB (Vulnerable) │ Port 47334
│ - Vulnerable to CVE-2026-27483 │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ PostgreSQL Database │ Port 5432 (internal)
│ - Stores MindsDB data │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ ELK Stack (Logging) │
│ - Elasticsearch, Logstash │ Ports 9200, 5000
│ - Kibana Dashboard │ Port 5601
└─────────────────────────────────┘
Services are connected on a dedicated Docker bridge network (172.20.0.0/16 by default). An attacker container is included to run controlled exploit attempts against the isolated MindsDB service.
By default Postgres is not intended to be exposed to the public internet. The compose file maps internal services for local lab use.
Prerequisites:
git clone https://github.com/nabhan-mohy/cve-2026-27483-lab.git
cd cve-2026-27483-lab
cp .env.example .env
# Open .env and confirm DB_PASSWORD and other values
Important: Ensure DB_PASSWORD in .env matches the password the compose file expects. There is a default in docker-compose.yml (${DB_PASSWORD:-P@ssw0rd123!}). Either set DB_PASSWORD=P@ssw0rd123! in .env or edit docker-compose.yml to use the password you prefer. If they mismatch, MindsDB will fail to connect to Postgres and services will not start correctly.
(Optional) Edit .env to tune behaviour (enable/disable features, set attacker listener IP, etc.).
Start the lab (full mode):
docker compose up -d --build
curl http://localhost:47334/api/statushttp://localhost:5601http://localhost:8080docker compose down
To remove volumes (destructive):
docker compose down -v
The README references minimal and monitoring profiles. To support these you can either:
profiles: keys in docker-compose.yml to separate services into minimal and monitoring profiles, ordocker-compose.minimal.yml that disables heavy components (Elasticsearch/Kibana/Wazuh) for low-resource tests.A suggested minimal test approach is to comment out or skip Elasticsearch/Kibana/Wazuh and run only: mindsdb, postgres, nginx-proxy, and attacker.
Reverse proxy (nginx-proxy): acts as the external-facing endpoint and routes attacker traffic to the vulnerable MindsDB service. The proxy also provides a simple dashboard port (8080) for quick checks.
MindsDB (vulnerable image): packaged from the vulnerable release referenced in the README. It stores data in Postgres and provides API endpoints which are intentionally vulnerable in older versions.
Postgres: stores MindsDB configuration and artifacts. Initialization SQL and seed data are provided in configs/postgres/*.sql.
ELK Stack (Elasticsearch, Logstash, Kibana): collects logs from the proxy and application so you can build detection rules and dashboards.
Wazuh (optional): security monitoring agent and manager. Included as a placeholder to demonstrate integration; TLS certs and credentials in the config are placeholders and must be provisioned for full functionality.
Attacker container: an environment with utilities (curl, netcat, python) and mounted exploits/ folder to run challenge scripts from inside the same Docker network (isolated from your host network if desired).
Backup service: sample container to demonstrate realistic enterprise workflows (backups pulling DB dumps from Postgres).
docker compose exec -it attacker /bin/bash), run reconnaissance against the proxy (port 80/8080) and MindsDB API (47334).exploits/ and docs/challenges/ with guidance and safe checks.Example: run a basic reconnaissance from the attacker container
# enter attacker container
docker compose exec -it attacker /bin/bash
# scan the network or curl endpoints
curl -v http://nginx-proxy:80/
curl -v http://mindsdb:47334/api/status
A smoke test script is provided at scripts/smoke_test.sh (if present). It performs the following checks:
/api/status to respondpg_isreadyRun it locally:
chmod +x scripts/smoke_test.sh
./scripts/smoke_test.sh
If the smoke test fails, collect logs to smoke_compose_logs.txt and share them for debugging:
docker compose logs --no-color > smoke_compose_logs.txt
Logstash pipeline is provided in configs/logstash/logstash.conf to forward logs to Elasticsearch. The included Sigma rule rules/sigma/cve-2026-27483.yml is a simple example that flags suspicious path traversal patterns (requests containing ..). Use it as a starting point and refine to reduce false positives.
Create Kibana dashboards to visualize:
.env and docker-compose.yml. Ensure both agree on the same secret.docker compose logs -f mindsdb for stack traces and DB connectivity errors.ES_JAVA_OPTS in docker-compose.yml (example: -Xms256m -Xmx256m) for small hosts.mindsdb:47334) and that the mindsdb container is healthy.If you need help debugging, run the smoke test and share smoke_compose_logs.txt.
Contributions are welcome. Suggested ways to help:
docs/ (deployment, challenges, detection, incident-response)exploits/ with step-by-step learning guidesPlease open PRs against main and follow the CONTRIBUTING guidelines when you add educational exploit material.
Made with ❤️ for the security community.