Labo basé sur Docker démontrant CVE-2019-15107, la RCE non authentifiée de Webmin, couvrant le déploiement, l'exploitation, la détection et la remédiation.
Ce projet démontre la CVE-2019-15107, une vulnérabilité critique d'exécution de code à distance (RCE) dans Webmin, au sein d'un environnement Docker contrôlé et isolé. Le laboratoire couvre l'intégralité du cycle de vie de la vulnérabilité, du déploiement et de l'exploitation à la détection et à la remédiation.
1.Docker Desktop (installé et en cours d'exécution)
2.Docker Compose
3.Terminal / PowerShell avec prise en charge de curl.exe
1.OS (environnement hôte local)
2.Disponibilité du port : le port 10000 doit être libre sur la machine hôte.
1.Application : Webmin
2.Version vulnérable : 1.910 (versions affectées : 1.880 à 1.920)
3.Version corrigée/patched : 1.930 et supérieures
4.Type de vulnérabilité : Neutralisation incorrecte d'éléments spéciaux utilisés dans une commande OS (CWE-78)
5.Score CVSS : 9.8 (Critique)
1.Clonez ou téléchargez ce dépôt de projet sur votre machine locale.
2.Ouvrez votre terminal et naviguez vers le répertoire du projet contenant docker-compose.yml.
3.Assurez-vous que Docker Desktop est actif sur votre système.
Exécutez la commande suivante depuis le répertoire racine du projet pour récupérer et démarrer le conteneur vulnérable en mode détaché : docker-compose up -d
Vous pouvez vérifier l'état du conteneur en exécutant : docker compose ps
Accédez à l'interface de l'application dans votre navigateur web à l'adresse : https://localhost:10000 (acceptez l'avertissement de certificat SSL local).
Pour arrêter et supprimer l'environnement de conteneur en cours d'exécution, exécutez : docker-compose down
La vulnérabilité existe dans le point de terminaison de changement de mot de passe non authentifié (/password_change.cgi), où les paramètres d'entrée sont transmis directement au shell système sans assainissement approprié.
Exécutez la commande suivante dans votre terminal (PowerShell/Bash) pour exécuter une commande de diagnostic (id) comme preuve de concept :
curl.exe -k https://localhost:10000/password_change.cgi -e "https://localhost:10000" -d "user=root&pam=&old=test|id&new1=test&new2=test"
Exploitation réussie : le serveur traite le caractère pipe injecté (|), déclenchant une exécution de commande non authentifiée avec les privilèges root. Le terminal affichera une preuve de réponse HTML accompagnée du retour du shell du conteneur (uid=0(root)), confirmant la réussite de l'exécution de code à distance.
1.Identification de version : inspecter la version de l'instance Webmin en cours d'exécution pour vérifier si elle se situe dans la plage vulnérable (1.880 à 1.920).
2.Surveillance réseau / des journaux : inspecter les journaux d'accès du serveur web ou du WAF pour les requêtes HTTP POST entrantes dirigées vers /password_change.cgi contenant des caractères de contrôle shell suspects (tels que | ou ;) dans les valeurs des paramètres.
1.Mise à niveau : mettez à niveau Webmin vers la version 1.930 ou supérieure, qui assainit correctement les entrées transmises aux modules sous-jacents.
2.Contrôle d'accès : restreignez l'accès réseau au port 10000 à l'aide de pare-feu ou de tunnels VPN pour éviter toute exposition directe aux réseaux non fiables.
1.Démon Docker non démarré : si vous rencontrez des erreurs de connexion, assurez-vous que Docker Desktop est complètement démarré et vérifiez à l'aide de docker version.
2.Conflit de port (10000 déjà utilisé) : assurez-vous qu'aucune autre application ou service local n'occupe le port 10000.
3.Erreur de syntaxe curl dans PowerShell : utilisez curl.exe au lieu de curl standard dans Windows PowerShell pour éviter les problèmes de mappage de paramètres avec l'alias Invoke-WebRequest intégré à PowerShell.