D-link DAP-1860命令注入远程代码执行漏洞分析
2019-12-18 11:05:38 Author: www.4hou.com(查看原文) 阅读量:272 收藏

0x01  漏洞介绍

在2019年9月,我在D-Link路由器(DAP-1860)上发现了2个漏洞,这些 命令注入导致未经身份验证的远程代码执行和身份验证绕过。存在一些严重漏洞,因为我无需身份验证即可成功进行攻击。如果你的路由器是从D-Link及其DAP-1860购买的,请更新固件或与供应商联系以寻求帮助,因为我发现的漏洞在DAP-1860的最新版本固件中依然存在。

以下是DAP-1860的Web Admin界面:

0x02  CVE 2019-19597(命令注入导致RCE)

当我试图了解如何在DAP-1860的Web Admin上进行身份验证时,当用户发送HNAP请求时,我在此设备的uhttpd服务器中发现了一个问题。用户发送HNAP请求时,如果需要身份验证,则uhttpd服务器将检查HNAP_AUTH header的值。下面是用于验证HNAP_AUTH的代码。

查看第243至246行的代码,我发现了一个命令注入漏洞。用户可以控制HNAP_TIME和SOAPAction的值,在这种情况下,通过HNAP_TIME参数注入命令,以下是在设备上运行命令的请求。

如果你要执行未经身份验证的请求,则必须绕过某些条件,在这篇文章中我无法提供这种方法,因为这对D-Link的客户是危险的。

0x03  CVE 2019-19598(验证绕过)

在为供应商报告了上面的漏洞之后,我还在DAP-1860上发现了另一个漏洞。当用户发送HNAP请求时,服务器会将HNAP_AUTH header分为hnap_code和hnap_timestamp两部分。使用已存储在/ var / hnap / timestamp文件(current_timestamp)中的值来验证Hnap_timestamp值。之后,hnap_timestamp值存储在/ var / hnap / timestamp中。查看下图,如果hnap_timestamp <= current_timestamp并且hnap_timestamp> = current_timestamp – local_3c,变量的值9设置为0。

查看下图中的第241行,如果变量local_3c!= 1,可以通过HNAP_AUTH验证函数。通过这种方式,可以绕过身份验证并访问所有HNAP API。

最后,要绕过身份验证,首先必须发送请求以覆盖服务器的current_timestamp,此后,用hnap_timestamp等于服务器的current_timestamp发出请求,此请求将访问所有HNAP api而无需证书。

0x04  漏洞披露

· 30/09/2019:已将DAP-1860中的漏洞报告给D-Link。

· 2019年2月10日:在2天前再次向D-Link报告了D-Link没有回应。

· 2019年2月10日:D-Link回复电子邮件以通知该漏洞已发送给研发团队进行验证。

· 2019年9月10日:D-Link确认此问题并正在修补。

· 2019年9月10日:向D-Link报告DAP-1860中的其他漏洞。

· 2019年11月10日:D-Link回复电子邮件以通知该漏洞已发送给研发团队进行验证。

· 24/10/2019:D-Link确认2个问题。

· 14/11/2019:D-Link发行版固件已修复并  发布该漏洞

0x05  总结学习

命令注入漏洞:

用户可以控制HNAP_TIME和SOAPAction的值,可以通过HNAP_TIME参数注入命令,可以发现挖掘命令注入漏洞要注意身份验证接口的相关参数。

验证绕过漏洞:

当用户发送HNAP请求时,服务器会将HNAP_AUTH header分为hnap_code和hnap_timestamp两部分。使用已存储在/ var / hnap / timestamp文件(current_timestamp)中的值来验证Hnap_timestamp值。

要绕过身份验证,首先必须发送请求以覆盖服务器的current_timestamp文件,此后,用hnap_timestamp等于服务器的current_timestamp发出请求,此请求将访问所有HNAP api而无需证书。

这两个漏洞组合就可以完成登录验证绕过再实现命令注入攻击。


文章来源: https://www.4hou.com/info/news/22144.html
如有侵权请联系:admin#unsafe.sh