D-LINK任意文件读取漏洞(CVE-2021-27250)分析
2021-03-24
来源: 关键基础设施安全应急响应中心
一、前言
近日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路径的合理过滤,导致用户可以任意修改该标签内容,触发文件操作,造成信息泄露。建议程序开发的时候全面考虑文件的安全使用场景并对参数路径做安全检查,避免产生敏感数据泄露导致的进一步网络攻击。