D-Link DAP-1860:远程命令执行和认证绕过漏洞

iso60001  294天前

22.png

介绍

2019年9月,我在D-Link Access Point(DAP-1860)上发现了两个漏洞,分别是命令注入导致的远程代码执行和身份验证绕过。这两个漏洞能帮助攻击者在不进行身份验证的情况下远程控制设备。如果你的上网设备是从D-Link购买的,并且型号是DAP-1860,请立刻更新固件或联系厂商寻求帮助,因为我发现的漏洞影响了当时最新版本的DAP-1860固件。

以下是DAP-1860的Web管理界面:

33.png

漏洞细节

CVE-2019-19597

发现者:chung96vn, VinCSS(Vingroup成员)

主题:命令注入导致的远程代码执行(无需权限验证)

当我尝试了解DAP-1860的网页管理页面如何进行身份认证时,发现这个设备的uhttpd服务器在用户发送HNAP请求时出现了问题。当用户发送HNAP请求时,若需身份认证,uhttpd服务器将检查HNAP_AUTH请求头的值。相关代码如下(用于验证HNAP_AUTH)。

44.png

请注意第243到246行的代码,就是这里存在命令注入。普通用户可以控制HNAP_TIMESOAPAction的值。在这种情况下,我成功通过HNAP_TIME参数注入了命令。下面是相关请求:

55.png

请记住,如果想在不进行身份验证的情况下发起攻击,必须绕过某些限制。但在这篇文章中我不能提供相关细节,这是为了D-Link用户的安全考虑。

CVE-2019-19598

发现者:chung96vn,VinCSS(Vingroup成员)

主题:认证绕过

在报告了上述漏洞后,我后续还发现了DAP-1860的身份认证缺陷。当用户发送HNAP请求时,服务会将HNAP_AUTH请求头的值分成两部分:hnap_codehnap_timestamphnap_timestamp值会和存储在/var/hnap/timestamp文件(current_timestamp)中的值进行验证。随后,hnap_timestamp值会存储在/var/hnap/timestamp中。通过下面的代码片段,你可以看到如果hnap_timestamp<=current_timestamp,并且hnap_timestamp>=current_timestamp-9local_3c变量的值被设置为0。

77.png

查看下图中的241行,如果变量local_3c!=1,我们就进入了HNAP_AUTH验证函数,此时就可以绕过身份验证并访问所有HNAP api。

88.png

总而言之,为了绕过认证,首先要发送请求来覆盖服务器的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

最新评论

昵称
邮箱
提交评论