
Un laboratoire conteneurisé de type entreprise pour la recherche et la défense contre CVE-2026-27483.
Un laboratoire Docker complet, réaliste et de style entreprise pour apprendre, tester et se défendre contre CVE-2026-27483 (Traversée de chemin MindsDB → RCE). Ce dépôt fournit une topologie de laboratoire déployable, des configurations, des images de conteneurs minimales, des règles de détection et des scripts d'assistance pour vous permettre de déployer en toute sécurité un environnement isolé afin de pratiquer la découverte, l'exploitation (assainie) et la défense.
IMPORTANT : Ce laboratoire inclut intentionnellement une version vulnérable de MindsDB à des fins pédagogiques. Exécutez-le uniquement dans des environnements isolés et déconnectés du réseau, et ne l'exposez jamais à des réseaux publics.
Internet (Attaquant)
↓
Reverse Proxy (nginx)
↓
┌─────────────────────────────────┐
│ MindsDB (Vulnérable) │ Port 47334
│ - Vulnérable à CVE-2026-27483 │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ Base de données PostgreSQL │ Port 5432 (interne)
│ - Stocke les données MindsDB │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ Pile ELK (Journalisation) │
│ - Elasticsearch, Logstash │ Ports 9200, 5000
│ - Tableau de bord Kibana │ Port 5601
└─────────────────────────────────┘
Les services sont connectés sur un réseau Docker bridge dédié (172.20.0.0/16 par défaut). Un conteneur attaquant est inclus pour exécuter des tentatives d'exploitation contrôlées contre le service MindsDB isolé.
Par défaut, Postgres n'est pas destiné à être exposé sur Internet. Le fichier compose mappe les services internes pour une utilisation locale en laboratoire.
Prérequis :
git clone https://github.com/nabhan-mohy/cve-2026-27483-lab.git
cd cve-2026-27483-lab
cp .env.example .env
# Ouvrir .env et confirmer DB_PASSWORD et les autres valeurs
Important : Assurez-vous que DB_PASSWORD dans .env correspond au mot de passe attendu par le fichier compose. Il existe une valeur par défaut dans docker-compose.yml (${DB_PASSWORD:-P@ssw0rd123!}). Définissez DB_PASSWORD=P@ssw0rd123! dans .env ou modifiez docker-compose.yml pour utiliser le mot de passe de votre choix. En cas de non-correspondance, MindsDB ne pourra pas se connecter à Postgres et les services ne démarreront pas correctement.
(Facultatif) Modifier .env pour ajuster le comportement (activer/désactiver des fonctionnalités, définir l'adresse IP d'écoute de l'attaquant, etc.).
Démarrer le laboratoire (mode complet) :
docker compose up -d --build
curl http://localhost:47334/api/statushttp://localhost:5601http://localhost:8080docker compose down
Pour supprimer les volumes (destructif) :
docker compose down -v
Le README fait référence aux profils minimal et surveillance. Pour les prendre en charge, vous pouvez soit :
profiles: dans docker-compose.yml pour séparer les services en profils minimal et monitoring, oudocker-compose.minimal.yml qui désactive les composants lourds (Elasticsearch/Kibana/Wazuh) pour les tests à faibles ressources.Une approche de test minimal suggérée consiste à commenter ou ignorer Elasticsearch/Kibana/Wazuh et à exécuter uniquement : mindsdb, postgres, nginx-proxy et attacker.
Reverse proxy (nginx-proxy) : agit comme point de terminaison orienté vers l'extérieur et achemine le trafic de l'attaquant vers le service MindsDB vulnérable. Le proxy fournit également un simple port de tableau de bord (8080) pour des vérifications rapides.
MindsDB (image vulnérable) : empaqueté à partir de la version vulnérable référencée dans le README. Il stocke les données dans Postgres et fournit des points de terminaison API intentionnellement vulnérables dans les versions plus anciennes.
Postgres : stocke la configuration et les artefacts de MindsDB. Le SQL d'initialisation et les données de départ sont fournis dans configs/postgres/*.sql.
Pile ELK (Elasticsearch, Logstash, Kibana) : collecte les journaux du proxy et de l'application afin que vous puissiez créer des règles de détection et des tableaux de bord.
Wazuh (facultatif) : agent et gestionnaire de surveillance de sécurité. Inclus comme espace réservé pour démontrer l'intégration ; les certificats TLS et les identifiants dans la configuration sont des espaces réservés et doivent être provisionnés pour une fonctionnalité complète.
Conteneur attaquant : un environnement avec des utilitaires (curl, netcat, python) et le dossier exploits/ monté pour exécuter des scripts de défi depuis l'intérieur du même réseau Docker (isolé de votre réseau hôte si souhaité).
Service de sauvegarde : conteneur d'exemple pour démontrer des flux de travail d'entreprise réalistes (sauvegardes extrayant des dumps de base de données depuis Postgres).
docker compose exec -it attacker /bin/bash), effectuez une reconnaissance contre le proxy (port 80/8080) et l'API MindsDB (47334).exploits/ et docs/challenges/ avec des conseils et des vérifications de sécurité.Exemple : exécuter une reconnaissance de base depuis le conteneur attaquant
# entrer dans le conteneur attaquant
docker compose exec -it attacker /bin/bash
# scanner le réseau ou interroger les points de terminaison
curl -v http://nginx-proxy:80/
curl -v http://mindsdb:47334/api/status
Un script de test de fumée est fourni à scripts/smoke_test.sh (s'il est présent). Il effectue les vérifications suivantes :
/api/status répondepg_isreadyExécutez-le localement :
chmod +x scripts/smoke_test.sh
./scripts/smoke_test.sh
Si le test de fumée échoue, collectez les journaux dans smoke_compose_logs.txt et partagez-les pour le débogage :
docker compose logs --no-color > smoke_compose_logs.txt
Un pipeline Logstash est fourni dans configs/logstash/logstash.conf pour transférer les journaux vers Elasticsearch. La règle Sigma incluse rules/sigma/cve-2026-27483.yml est un exemple simple qui signale les modèles suspects de traversée de chemin (requêtes contenant ..). Utilisez-la comme point de départ et affinez-la pour réduire les faux positifs.
Créez des tableaux de bord Kibana pour visualiser :
.env et docker-compose.yml. Assurez-vous que les deux utilisent le même secret.docker compose logs -f mindsdb pour les traces de pile et les erreurs de connectivité de la base de données.ES_JAVA_OPTS dans docker-compose.yml (exemple : -Xms256m -Xmx256m) pour les petits hôtes.mindsdb:47334) et que le conteneur mindsdb est sain.Si vous avez besoin d'aide pour le débogage, exécutez le test de fumée et partagez smoke_compose_logs.txt.
Les contributions sont les bienvenues. Façons suggérées d'aider :
docs/ (déploiement, défis, détection, réponse aux incidents)exploits/ avec des guides d'apprentissage étape par étapeVeuillez ouvrir des PR vers main et suivre les directives CONTRIBUTING lorsque vous ajoutez du matériel d'exploitation pédagogique.
Fait avec ❤️ pour la communauté de la sécurité.