D-Link DAP-1860:远程命令执行和认证绕过漏洞
介绍
2019年9月,我在D-Link Access Point(DAP-1860)上发现了两个漏洞,分别是命令注入导致的远程代码执行和身份验证绕过。这两个漏洞能帮助攻击者在不进行身份验证的情况下远程控制设备。如果你的上网设备是从D-Link购买的,并且型号是DAP-1860,请立刻更新固件或联系厂商寻求帮助,因为我发现的漏洞影响了当时最新版本的DAP-1860固件。
以下是DAP-1860的Web管理界面:
漏洞细节
CVE-2019-19597
发现者:chung96vn, VinCSS(Vingroup成员)
主题:命令注入导致的远程代码执行(无需权限验证)
当我尝试了解DAP-1860的网页管理页面如何进行身份认证时,发现这个设备的uhttpd服务器在用户发送HNAP请求时出现了问题。当用户发送HNAP请求时,若需身份认证,uhttpd服务器将检查HNAP_AUTH
请求头的值。相关代码如下(用于验证HNAP_AUTH
)。
请注意第243到246行的代码,就是这里存在命令注入。普通用户可以控制HNAP_TIME
和SOAPAction
的值。在这种情况下,我成功通过HNAP_TIME
参数注入了命令。下面是相关请求:
请记住,如果想在不进行身份验证的情况下发起攻击,必须绕过某些限制。但在这篇文章中我不能提供相关细节,这是为了D-Link用户的安全考虑。
CVE-2019-19598
发现者:chung96vn,VinCSS(Vingroup成员)
主题:认证绕过
在报告了上述漏洞后,我后续还发现了DAP-1860的身份认证缺陷。当用户发送HNAP请求时,服务会将HNAP_AUTH
请求头的值分成两部分:hnap_code
和hnap_timestamp
。hnap_timestamp
值会和存储在/var/hnap/timestamp
文件(current_timestamp)中的值进行验证。随后,hnap_timestamp
值会存储在/var/hnap/timestamp
中。通过下面的代码片段,你可以看到如果hnap_timestamp<=current_timestamp
,并且hnap_timestamp>=current_timestamp-9
,local_3c
变量的值被设置为0。
查看下图中的241行,如果变量local_3c!=1
,我们就进入了HNAP_AUTH
验证函数,此时就可以绕过身份验证并访问所有HNAP api。
总而言之,为了绕过认证,首先要发送请求来覆盖服务器的current_timestamp
,然后利用hnap_timestamp
等于服务器current_timestamp
的请求在未经身份验证的情况下访问所有的HNAP api。
时间线
2019/09/30:向D-Link报告了DAP-1860的漏洞。
2019/10/02:再次向D-Link报告,D-Link未回复。
2019/10/02:D-Link回复邮件,表示漏洞已发送给研发团队验证。
2019/10/09:D-Link确认漏洞存在并研发补丁。
2019/10/09:向D-Link报告DAP-1860的其他漏洞。
2019/10/09:D-Link回复邮件,表示漏洞已发送给研发团队验证。
2019/10/09:D-Link确认2个漏洞存在并在研发补丁。
2019/10/09:D-Link发布安全补丁并公开漏洞。
参考
https://supportannouncement.us.dlink.com/announcement/publication.aspx?name=SAP10135
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-19597
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-19598
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://securityaffairs.co/wordpress/94872/hacking/pathauditor-tool.html
最新评论