0x01 关键词: Zimbra 远程代码执行 0x02 背景: 近日,补天漏洞响应平台监测到网络上出现了Zimbra 远程代码执行漏洞,通过此漏洞可导致服务器任意文件上传,从而达到远程代码执行的危害。 补天漏洞平台对此次事件进行了技术分析,鉴于该漏洞可直接任意文件上传至服务器,建议相关企业尽快进行安全评估。 0x03 情报通告: 发现时间 | 2019年03月18日 | 威胁目标 | 采用Zimbra邮件系统的企业 | 主要风险 | 远程代码执行 | 攻击入口 | localconfig.xml 配置文件 | 使用漏洞 | CVE-2019-9621 | 受影响应用 | ZimbraCollaboration Server 8.8.11 之前的版本都受到影响。 | 已知影响 | 导致服务器信息泄露 | 威胁程度 | 高 |
0x04 威胁程度:个人风险评级:低危 企业风险评级:高危 情报风险预警:对公司影响等级为高,对使用ZimbraCollaboration Server的企业均有被攻击的风险。
0x05 情报描述:当 Zimbra 存在像任意文件读取、XXE(xml外部实体注入)这种漏洞时,攻击者可以利用此漏洞读取 localconfig.xml配置文件,获取到 zimbra admin ldap password,并通过 7071 admin 端口进行 SOAP AuthRequest 认证,得到 admin authtoken,然后就可以利用 admin authtoken 进行任意文件上传,从而达到远程代码执行的危害。即使在 7071 admin 端口做了防火墙配置、不对外开放的情况下,也可以利用存在于 443 普通用户端口服务里身份认证的一个特性,配合 ProxyServlet.doProxy() 方法里的 SSRF,同样也能完成 admin SOAP AuthRequest 认证,得到 admin authtoken。0x06 漏洞描述:
漏洞是利用XXE和ProxyServlet SSRF 漏洞拿到 admin authtoken 后,通过文件上传在服务端执行任意代码,威胁程度极高。当Zimbra服务端打来Memcached缓存服务是,可以利用SSRF攻击进行反序列化执行远程代码。不过由于Zimbra在单服务器安装中尽管Memcached虽然启动但是并没有进行使用,所以其攻击场景受到限制。 
在Zinbra安装时,系统为其SOAP通信设置了一个全局管理员,用户名为“Zinbra”,并生成随机密码将其存储在localconfig.xml的本地文件中,而XXE漏洞允许攻击者获取具有所有管理员权限的用户的登录信息,这已经在CVE-2013-7091 LFI漏洞利用中得到证明,在某些条件下,可以使用此类凭证来获得RCE。但是Zimbra通过令牌管理用户权限,并设置一个应用程序模型,使得管理令牌只能被授予进入管理端口的请求,默认情况下是7071,而CVE-2013-7091 LFI漏洞是假设开启7071端口的,但是基本所有企业是不会将7071端口公开在外网的。 所以当没有7071端口时,CVE-2019-9621漏洞便可以跨越这个限制。ProxyServlet.doProxy()函数的作用是将请求代理到另一个指定位置,而且这个函数可以在普通的webapp上使用,因此可以作为公共访问。但是,代码具有额外的保护,它会检查代理目标是否与一组预定义的白名单域匹配。但是管理员检查存在缺陷。它检查的第一件事是请求是否来自端口7071。它使用ServletRequest.getServerPort()获取传入端口。此方法返回的信息可被攻击者修改,可修改主机头中“:”之后的部分。之后从参数中获取管理令牌的检查才会发生,同时我们可以通过cookie完全发送令牌,如果我们在cookie中发送带有'foo:7071'主机头和有效令牌的请求,我们可以将请求代理到任意目标。 
所以黑客的攻击思路就是流程是通过XXE读取配置文件,通过正常的AuthRequest生成低私钥令牌,通过ProxyServlet将管理员AuthRequest代理到本地管理端口,最后使用全局管理令牌通过ClientUploader扩展上传webshell。 
0x07影响面ZimbraCollaboration Server 8.8.11 之前的版本都受到影响。具体来说: 1. Zimbra < 8.7.11 版本中,攻击者可以在无需登录的情况下,实现远程代码执行。 2. Zimbra < 8.8.11 版本中,在服务端使用 Memcached 做缓存的情况下,经过登录认证后的攻击者可以实现远程代码执行。 0x08相关漏洞CVE-2019-9670
|