
Lab basato su Docker che dimostra CVE-2019-15107, la RCE non autenticata di Webmin, coprendo distribuzione, sfruttamento, rilevamento e correzione.
Questo progetto dimostra CVE-2019-15107, una vulnerabilità critica di Remote Code Execution (RCE) in Webmin, all'interno di un ambiente Docker controllato e isolato. Il laboratorio copre l'intero ciclo di vita della vulnerabilità, dal deployment e sfruttamento fino al rilevamento e alla remediation.
1.Docker Desktop (installato e in esecuzione)
2.Docker Compose
3.Terminale / PowerShell con supporto a curl.exe
1.OS (ambiente host locale)
2.Disponibilità porte: la porta 10000 deve essere libera sulla macchina host.
1.Applicazione: Webmin
2.Versione vulnerabile: 1.910 (versioni interessate: da 1.880 a 1.920)
3.Versione corretta/patched: 1.930 e successive
4.Tipo di vulnerabilità: Neutralizzazione impropria di elementi speciali usati in un comando OS (CWE-78)
5.Punteggio CVSS: 9.8 (Critico)
1.Clona o scarica questo repository di progetto sulla tua macchina locale.
2.Apri il terminale e naviga nella directory del progetto contenente docker-compose.yml.
3.Assicurati che Docker Desktop sia attivo sul tuo sistema.
Esegui il seguente comando dalla directory principale del progetto per scaricare e avviare il container vulnerabile in modalità detached: docker-compose up -d
Puoi verificare lo stato del container eseguendo: docker compose ps
Accedi all'interfaccia dell'applicazione nel browser web all'indirizzo: https://localhost:10000 (accetta l'avviso relativo al certificato SSL locale).
Per arrestare e rimuovere l'ambiente container in esecuzione, esegui: docker-compose down
La vulnerabilità risiede nell'endpoint non autenticato per il cambio password (/password_change.cgi), dove i parametri di input vengono passati direttamente alla shell di sistema senza una corretta sanificazione.
Esegui il seguente comando nel tuo terminale (PowerShell/Bash) per eseguire un comando diagnostico (id) come proof-of-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"
Sfruttamento riuscito: il server elabora il carattere pipe iniettato (|), attivando l'esecuzione di comandi non autenticata con privilegi di root. Il terminale restituirà come output l'evidenza della risposta HTML insieme al feedback della shell del container (uid=0(root)), confermando il successo dell'esecuzione remota di codice.
1.Identificazione della versione: ispezionare la versione dell'istanza Webmin in esecuzione per verificare se rientra nell'intervallo vulnerabile (da 1.880 a 1.920).
2.Monitoraggio di rete / log: ispezionare i log di accesso del web server o del WAF per individuare richieste HTTP POST in ingresso dirette a /password_change.cgi contenenti caratteri di controllo della shell sospetti (come | o ;) all'interno dei valori dei parametri.
1.Aggiornamento: aggiorna Webmin alla versione 1.930 o superiore, che sanifica correttamente gli input passati ai moduli sottostanti.
2.Controllo degli accessi: limita l'accesso di rete alla porta 10000 tramite firewall o tunnel VPN per prevenire l'esposizione diretta a reti non attendibili.
1.Docker Daemon non in esecuzione: se riscontri errori di connessione, assicurati che Docker Desktop sia completamente avviato e verifica con docker version.
2.Conflitto di porte (10000 già in uso): assicurati che nessun'altra applicazione o servizio locale occupi la porta 10000.
3.Errore di sintassi curl in PowerShell: usa curl.exe invece del curl standard in Windows PowerShell per evitare problemi di mappatura dei parametri con l'alias integrato Invoke-WebRequest di PowerShell.