一、前言
近日D-Link發布公告[1]稱旗下產品DAP-2020存在任意文件讀取漏洞,CVE編號為CVE-2021-27250,目前已在硬件版本:A1,固件版本:1.01 上測試了PoC,由于漏洞影響核心組件,因此其他版本也可能受到此漏洞的影響。
二、漏洞影響分布
當前網上大概暴露有 1,882,813 潛在脆弱主機。其中分布在哥倫比亞的機器最多。查看當地互聯網用戶統計信息[2],可以注意到該地使用互聯網的人口占總人口的 65%。根據哥倫比亞總人口 4965 萬中的 65%可以估算大約有 3200 萬互聯網用戶。
數據來源:綠盟科技威脅情報中心
三、體系結構與固件提取
由于廠商的官方“固件更新”鏡像沒有加密,所以可以直接使用而無需通過UART或SPI閃存轉儲固件。
固件下載地址:
ftp://ftp.dlink.de/dap/dap-2020/driver_software/DAP-2020_fw_reva_102rc002_ALL_en_20200322.zip
從D-Link的FTP 服務器下載固件后,可以使用binwalk提取文件系統。
binwalk -e DAP-2020_RevA_Firmware_102rc002.bin
重要文件存儲在 webroot 中,路徑為\usr\www,包含Web服務器使用的一些 html 文件以及一個 cgi-bin目錄,功能實現的二進制文件如下:
Webproc:用于處理Web界面的 Main Binary。
Webupg:用于文件上傳,固件升級,配置更改。
相關的系統保護措施可以使用checksec程序進行檢測,結果如下:
通過檢測結果可以發現編譯時未啟用安全性功能。
四、漏洞分析
在登錄時,POST請求中有很多可選的標簽供使用,其中errorpage標簽用于跳轉頁面顯示登陸失敗時的信息。由于程序沒有對用戶的輸入做足夠的過濾,在用戶登陸失敗時,攻擊者通過修改errorpage標簽的值即可重定向到任意文件,實現任意文件讀取。
登陸時的HTTP POST請求
由于在文件操作前并沒有對用戶輸入路徑進行必要的過濾,errorpage標簽指定的文件內容會顯示在Response中,因此攻擊者可以利用這個標簽來讀取目標系統的敏感文件。
讀取日志文件
修改errorpage標簽,讀取/var/log/sysevent.txt 日志文件:
POST請求
Response中返回的/var/log/sysevent.txt 日志內容
讀取passwd等敏感文件
五、總結
由于欠缺對errorpage路徑的合理過濾,導致用戶可以任意修改該標簽內容,觸發文件操作,造成信息泄露。建議程序開發的時候全面考慮文件的安全使用場景并對參數路徑做安全檢查,避免產生敏感數據泄露導致的進一步網絡攻擊。