浅析 CVE-2025-68645 Zimbra 属性覆盖导致本地文件包含漏洞
原创
KCyber
KCyber
自在安全
2026年1月3日 10:04
上海
在小说阅读器读本章
去阅读
近日 Zimbra 披露了一个本地文件包含漏洞 CVE-2025-68645 ,从公开信息看应该与前期朋友分享给我的一个漏洞撞了,下面就将简要分析过程分享给大家。该漏洞源于 RestFilter 过滤器对参数处理不当,导致未经身份认证的用户可以构造恶意请求,读取服务器 WebRoot 目录下的敏感文件。
RestFilter
Zimbra 使用Jetty作为底层Web容器。在Zimbra和ZimbraAdmin这两个应用的web.xml中均可以找到RestFilter配置,该Filter匹配/h/* 请求:
查看 com.zimbra.webClient.filters.RestFilter 实现代码,存在非常明显的 request 属性覆盖过程,即请求参数的值将会被复制给同名的属性:
那么此处的属性覆盖是否可以利用呢?
JspServlet
继续查看 web.xml ,发现多个 /h/* 请求被定义在 jsp-config 中,对应处理的 Servlet 类为 org.apache.jasper.servlet.JspServlet :
<jsp-config>
<jsp-property-group>
<url-pattern>/h/changepass</url-pattern>
<url-pattern>/h/imessage</url-pattern>
<url-pattern>/h/postLoginRedirect</url-pattern>
<url-pattern>/h/printcalls</url-pattern>
<url-pattern>/h/printcalendar</url-pattern>
<url-pattern>/h/printvoicemails</url-pattern>
<url-pattern>/h/printappointments</url-pattern>
<url-pattern>/h/rest</url-pattern>
<url-pattern>/h/printcontacts</url-pattern>
<url-pattern>/h/printconversations</url-pattern>
<url-pattern>/h/printmessage</url-pattern>
<url-pattern>/h/printtasks</url-pattern>
<url-pattern>/h/viewimages</url-pattern>
<url-pattern>/modern/</url-pattern>
</jsp-property-group>
</jsp-config>
在 JspServlet 中,当从 request 中提取 javax.servlet.include.servlet_path 属性非空时,url 将被赋值为该属性的值:
很容易想到 RestFilter 和 JspServlet 组合起来存在被利用的可能性。
组合实现文件包含
我们知道 Jetty 正常情况下无法直接访问类似 /WEB-INF/web.xml 的文件资源,原因是 Jetty 在 Handler 层会对 /WEB-INF 和 /META-INF 的访问进行拦截,处理代码位于 org.eclipse.jetty.server.handler.ContextHandler.doHandle ,该函数将调用 isProtectedTarget 判断请求是否属于被保护对象:
public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
DispatcherType dispatch = baseRequest.getDispatcherType();
boolean new_context = baseRequest.takeNewContext();
try {
if (new_context) {
this.requestInitialized(baseRequest, request);
}
if (dispatch != DispatcherType.REQUEST || !this.isProtectedTarget(target)) {
this.nextHandle(target, baseRequest, request, response);
return;
}
baseRequest.setHandled(true);
response.sendError(404);
} finally {
if (new_context) {
this.requestDestroyed(baseRequest, request);
}
}
}
回顾 RestFilter 和 JspServlet 的处理逻辑可知,如果将两者结合起来就可以绕过上述检查机制,从而实现对 /WEB-INF 等限制目录的访问:
前面已经提到,Zimbra 和 ZimbraAdmin 都配置了 RestFilter ,因此这两个接口均可以实现 WebRoot 目录下的文件包含。读取 /WEB-INF/web.xml 过程如下:
由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,公众号及文章作者不为此承担任何责任。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论