zimbra10.1.4补丁分析

在10.1.4的补丁公告中有几个比较感兴趣的安全补丁:
在这里插入图片描述

1. ssrf漏洞

来看看第一个问题,首先寻找问题出处,rss feed parser直接搜找到两个相关的。先看第一处:

在这里插入图片描述
这个resthead.tag与rest.tld关联
在这里插入图片描述
最终是/h/rest在处理请求时嵌入了rest:view模板。
在这里插入图片描述
反过来很容易构造一个攻击代码:
在这里插入图片描述
明显href被输入给控制了。但是这和ssrf没有关系,于是通过搜索,发现zimbra在web端的文件夹功能中带有rss订阅功能(https://blog.zimbra.com/2015/09/know-add-rss-feed/)。最终找到了问题代码。在创建新的rss时,是发送“/service/soap/CreateFolderRequest”请求,最后由FeedManager的retriveRemoteData去获取远程数据。
在这里插入图片描述
第一处标记禁止了本地ip的一些ip的访问,按理说无法进行本地的ssrf,但是第二、三处的标记却打开了意想之外的大门。可以通过看这篇文章聊聊HttpClient的RedirectStrategy,了解为什么这出了问题。通过构建中转网站,将本地的请求作为302,301返回给httpclient即可实现本地ssrf访问。但是利用也有局限性,目前只能get请求。下面是补丁代码:
在这里插入图片描述

2. sql注入漏洞

zimbrasyncservice包含以下service:
在这里插入图片描述
所有注册的handlers都是继承自DocumentHandler,导致所有请求需要进行csrf检验。
在这里插入图片描述
doCsrfCheck为true是因为CsrfFilter对请求进行过滤时,添加了请求的CsrfTokenCheck attribute为true。
在这里插入图片描述
首先来看看不同版本之间的代码变化:
在这里插入图片描述
很明显,老版本直接将deviceId放入到sql语句中,导致sql注入攻击,而新版本对此采用?进行预编译,有效避免了sql注入。下面给出payload看看效果。
在这里插入图片描述

3. 密码重置问题

changepasswd请求由ChangePassword handler来处理,该handler重写了needAuth方法,返回为false,这就导致了soapengine不校验cookie。
在这里插入图片描述
由此构造payload:
在这里插入图片描述
其中只是dryrun值为0会返回一个新的用户cookie。这个安全修复只能算是一个bug,因为重置密码成功的前提是原密码输入正确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值