Back to Intelligence

Rapid7 Discloses 80+ Zimbra Collaboration Suite Vulnerabilities: Identity Boundary Breaks, Detection, and Remediation Guide

SA
Security Arsenal Team
October 14, 2026
14 min read

Rapid7 has begun publishing a staged disclosure covering more than 80 vulnerabilities in Zimbra Collaboration Suite (ZCS) — one of the most widely deployed self-hosted enterprise mail platforms on the planet. The first installment, "From One Account to Every Mailbox: Breaking Zimbra's Identity Boundaries (Part 1)," focuses on the most consequential category of findings: flaws in authentication and mailbox authorization that allow an attacker holding a single low-privilege account to cross identity boundaries and reach other users' mailboxes.

I've led IR engagements against compromised mail infrastructure more times than I can count. Here's the uncomfortable truth: a mail server is not just an email store. It is an identity anchor. It delivers password-reset links for every downstream SaaS app, hosts calendars that leak meeting metadata and internal org structure, and sends mail that employees and third-party systems implicitly trust. When Rapid7 says "from one account to every mailbox," what they are really describing is the collapse of the trust boundary that your entire organization's communications rest on. Because affected components are being fixed on different schedules — and Rapid7's accompanying GitHub repository is serving as a live tracker with full write-ups and proof-of-concept code — defenders need to act before the PoCs land in exploitation frameworks.

This post breaks down the defensive picture: what was disclosed, why the attack class is dangerous, how to hunt for abuse today, and how to harden ZCS while patches roll out.


What Was Disclosed

During a broader security assessment of Zimbra Collaboration Suite, Rapid7 identified 80+ vulnerabilities spanning:

  • Authentication — flaws in how ZCS validates sessions, tokens, and credentials
  • Mailbox authorization — failures to enforce per-mailbox access control, enabling cross-account mailbox access from a single authenticated session
  • Calendar processing — parsing and handling weaknesses in the calendar subsystem
  • Web clients — issues in the modern and classic webmail interfaces
  • Document services — weaknesses in Zimbra Docs / document preview handling
  • Host operating system — issues in the bundled OS-level components and scripts

Part 1 concentrates on the identity-boundary failures: an attacker with one valid account can, through the vulnerable authorization logic, reach mailboxes that do not belong to them. No zero-day exploit chain is required — the primitive is an authenticated session plus abuse of Zimbra's internal service APIs, which are historically SOAP-based endpoints exposed on the same web tier as webmail.

Critically, no CVE assignments or CVSS scores have been published yet for this disclosure batch. Rapid7 is staggering publication as fixes ship per component, and the GitHub repository with write-ups and PoCs will be updated as findings and fixes go public. That means we are in the highest-risk window: the research community knows the vulnerability classes and target surface, PoCs are staged for release, but complete patch coverage is not yet available across all components.

Affected Products and Platforms

  • Zimbra Collaboration Suite (ZCS) — both Network Edition and Open Source Edition deployments should be presumed in scope until per-component advisories confirm otherwise
  • Deployment model: self-hosted Linux servers (RHEL/Rocky/Alma and Ubuntu LTS families), frequently internet-facing on ports 443 (webmail), 7071 (admin console), 993/995/587/25 (mail protocols), and 8443 in some proxy configurations

Zimbra's installed base is significant — it is a favorite for service providers, universities, government-adjacent organizations, and cost-sensitive enterprises. If you run it, assume exposure.

Exploitation Status

  • Confirmed: Rapid7 has working PoCs and is publishing them in stages via its GitHub tracker
  • In-the-wild exploitation: Not confirmed as of this writing — but Zimbra is one of the most historically exploited mail platforms in the world, and prior Zimbra disclosures have been weaponized within days of publication. Threat actors, including state-aligned groups, actively monitor Zimbra advisories.
  • CISA KEV: Not yet listed for this disclosure batch — treat that as a lagging indicator, not a comfort signal

Assessment: Assume weaponization on a compressed timeline. The mailbox-authorization flaw class is exactly what APT actors and BEC operators want: quiet, authenticated, low-noise access to arbitrary mailboxes without tripping perimeter controls.


Why the Identity-Boundary Flaw Class Is So Dangerous

From a defender's perspective, mailbox authorization bypasses are worse than classic RCE in one specific way: they look like legitimate traffic. The attacker authenticates as a real user — often via credential stuffing, phishing, or a purchased password — then abuses authorization gaps in Zimbra's service layer to read, search, or exfiltrate other users' mail. The observable artifacts are:

  1. Authenticated SOAP/API requests to Zimbra service endpoints that are legitimate endpoints doing illegitimate work
  2. A single account touching an abnormal number of distinct mailboxes in mailbox.log
  3. No malware, no shell, no persistence required for the data theft itself — the server does the work

This collapses detection down to two disciplines: authentication telemetry (who is logging in, from where, at what velocity) and authorization telemetry (what is each session actually touching). Most Zimbra deployments I assess have the first half-baked and the second entirely absent.

Compounding the risk: Zimbra processes password-recovery flows for downstream systems. An attacker reading an executive's mailbox can intercept reset links for payroll, banking, cloud consoles, and VPN portals — turning a mail-server authorization flaw into full organizational identity takeover. This is the same blast radius that made prior email-platform compromises so damaging.


Detection & Response

The detections below target the observable behaviors this attack class produces: abuse of Zimbra's service/SOAP layer, anomalous mailbox fan-out from a single account, and post-exploitation artifacts (webshells, spawned processes) for the findings that do involve code execution against the web tier. All rules assume you are shipping Zimbra logs (mailbox.log, nginx.log, audit.log) and Linux telemetry to your SIEM — if you are not, that is remediation item zero.

Sigma Rules

YAML
---
title: Zimbra Admin SOAP Endpoint Access from Unusual Source
id: 3f9c1a72-6b4e-4d28-9c1a-7e2f5b8d0a31
status: experimental
description: Detects HTTP requests to Zimbra's admin SOAP endpoint (/service/admin/soap), which should only originate from the local admin console proxy. External or user-subnet access to this endpoint is a strong indicator of authorization abuse or API attack surface probing, consistent with Rapid7's disclosed ZCS identity-boundary research.
references:
  - https://www.rapid7.com/blog/post/ve-breaking-zimbra-identity-boundaries-part-1
  - https://attack.mitre.org/techniques/T1190/
author: Security Arsenal
date: 2026/04/06
tags:
  - attack.initial_access
  - attack.t1190
logsource:
  product: linux
  service: nginx
detection:
  selection:
    cs-uri|contains:
      - '/service/admin/soap'
      - ':7071'
  filter_local_proxy:
    c-ip|startswith:
      - '127.'
      - '10.'
      - '192.168.'
  condition: selection and not filter_local_proxy
falsepositives:
  - Legitimate admin activity from internal management networks (tighten the filter to your exact management CIDRs)
  - Zimbra proxy nodes in multi-server deployments forwarding admin requests
level: high
---
title: Zimbra Web Tier Spawning Shell or Downloader Process
id: 8d2e4b16-9a3c-4f71-b6d5-2c8e7a1f9045
status: experimental
description: Detects the Zimbra Java mailbox process or Jetty web tier spawning shells, interpreters, or downloaders. Zimbra's java process should never execute sh/bash/curl/wget/python as a child in normal operations — this is a high-fidelity indicator of webshell or post-exploitation activity against the ZCS web tier.
references:
  - https://www.rapid7.com/blog/post/ve-breaking-zimbra-identity-boundaries-part-1
  - https://attack.mitre.org/techniques/T1505/003/
author: Security Arsenal
date: 2026/04/06
tags:
  - attack.persistence
  - attack.t1505.003
  - attack.execution
  - attack.t1059
logsource:
  category: process_creation
  product: linux
detection:
  selection_parent:
    ParentCommandLine|contains:
      - '/opt/zimbra'
    ParentImage|endswith:
      - '/java'
      - '/nginx'
  selection_child:
    Image|endswith:
      - '/sh'
      - '/bash'
      - '/dash'
      - '/curl'
      - '/wget'
      - '/python'
      - '/python3'
      - '/perl'
      - '/nc'
      - '/ncat'
  condition: selection_parent and selection_child
falsepositives:
  - Rare Zimbra maintenance scripts invoked via zmmailboxdctl wrapper scripts (verify command line for /opt/zimbra/bin paths)
level: critical
---
title: JSP File Written to Zimbra Web Application Directory
id: b71c5e93-2d8a-4f46-a3c9-5e1d8b6f2a07
status: experimental
description: Detects creation or modification of JSP files under Zimbra's Jetty webapp directories. New JSP files appearing outside of a Zimbra patch or upgrade window are a canonical webshell artifact and have been observed in every major Zimbra exploitation campaign.
references:
  - https://www.rapid7.com/blog/post/ve-breaking-zimbra-identity-boundaries-part-1
  - https://attack.mitre.org/techniques/T1505/003/
author: Security Arsenal
date: 2026/04/06
tags:
  - attack.persistence
  - attack.t1505.003
logsource:
  category: file_event
  product: linux
detection:
  selection_path:
    TargetFilename|contains:
      - '/opt/zimbra/jetty/webapps/zimbra/'
      - '/opt/zimbra/jetty/webapps/zimbraAdmin/'
      - '/opt/zimbra/jetty/webapps/service/'
  selection_ext:
    TargetFilename|endswith:
      - '.jsp'
      - '.jspx'
  condition: selection_path and selection_ext
falsepositives:
  - Zimbra patch installations and upgrades — suppress during documented maintenance windows and re-enable immediately after
level: critical

KQL (Microsoft Sentinel / Defender)

The highest-signal hunt for the mailbox-authorization attack class is mailbox fan-out: one authenticated account touching an abnormal number of distinct mailboxes. This assumes you are ingesting Zimbra mailbox.log and nginx.log via Syslog/CEF into Sentinel (the AMA Syslog connector or a CEF forwarder from the Zimbra host).

KQL — Microsoft Sentinel / Defender
// Hunt 1: Single account accessing an abnormal number of distinct mailboxes
// Parses Zimbra mailbox.log lines ingested via Syslog. Tune the threshold to your baseline.
Syslog
| where Computer has_any ("zimbra", "mail", "mbox")
| where SyslogMessage has "mbox"
| extend Parsed = extract_all(@"o=([^,;\s]+)", SyslogMessage)
| where SyslogMessage has_any ("soap", "imap", "pop3")
| extend AuthAccount = tostring(extract(@"a=([^;\]\s]+)", 1, SyslogMessage)),
         TargetMbox  = tostring(extract(@"mid=([0-9]+)", 1, SyslogMessage)),
         ClientIP    = tostring(extract(@"oip=([0-9a-fA-F:\.]+)", 1, SyslogMessage))
| where isnotempty(AuthAccount) and isnotempty(TargetMbox)
| summarize DistinctMailboxes = dcount(TargetMbox),
            Operations = count(),
            SourceIPs = make_set(ClientIP)
    by AuthAccount, bin(TimeGenerated, 1h)
| where DistinctMailboxes > 25
| order by DistinctMailboxes desc
;

// Hunt 2: External access to Zimbra admin/service SOAP endpoints (CEF-ingested nginx logs)
CommonSecurityLog
| where DeviceProduct has_any ("nginx", "zimbra") or LogSource has "zimbra"
| where RequestURL has_any ("/service/admin/soap", "/service/soap")
| where not (SourceIP startswith "10." or SourceIP startswith "192.168." or SourceIP startswith "127.")
| summarize Requests = count(), DistinctURIs = dcount(RequestURL), UserAgents = make_set(RequestClientApplication)
    by SourceIP, DestinationHostName, bin(TimeGenerated, 15m)
| where Requests > 30 or DistinctURIs > 10
| order by Requests desc
;

// Hunt 3: Authentication anomaly — velocity and failure bursts against ZCS webmail
Syslog
| where SyslogMessage has_any ("AuthRequest", "authentication failed")
| extend AuthAccount = tostring(extract(@"a=([^;\]\s]+)", 1, SyslogMessage)),
         ClientIP    = tostring(extract(@"oip=([0-9a-fA-F:\.]+)", 1, SyslogMessage))
| where isnotempty(AuthAccount)
| summarize FailedAttempts = countif(SyslogMessage has "authentication failed"),
            TotalAttempts = count(),
            DistinctIPs = dcount(ClientIP)
    by AuthAccount, bin(TimeGenerated, 10m)
| where FailedAttempts > 10 or DistinctIPs > 5
| order by FailedAttempts desc

Velociraptor VQL

For rapid host-level triage of a Zimbra server — checking for webshells planted under the Jetty webapps tree and unexpected processes spawned by the Zimbra daemons:

VQL — Velociraptor
-- Security Arsenal: Zimbra compromise triage
-- 1) Recently modified/created JSP files under Zimbra webapp directories (webshell indicator)
SELECT FullPath, Size, Mtime, Ctime
FROM glob(globs='/opt/zimbra/jetty*/webapps/**/*.jsp',
          accessor='file')
WHERE Mtime > now() - 2592000   -- modified within last 30 days
ORDER BY Mtime DESC
;

-- 2) Suspicious child processes spawned by Zimbra java or nginx daemons
SELECT Pid, Ppid, Name, Exe, CommandLine, Username, CreateTime
FROM pslist()
WHERE (Ppid IN (SELECT Pid FROM pslist()
                WHERE Exe =~ 'java' AND CommandLine =~ '/opt/zimbra')
       OR Ppid IN (SELECT Pid FROM pslist() WHERE Name =~ 'nginx'))
  AND Name =~ '(sh|bash|dash|curl|wget|python|perl|nc|ncat)'
;

-- 3) Unexpected listening services on the Zimbra host (persistence / tunnel check)
SELECT Pid, Name, Family, Type, Status, Laddr, Raddr
FROM netstat()
WHERE Status =~ 'LISTEN'
  AND NOT Laddr =~ ':(25|110|143|389|443|465|587|993|995|3310|7025|7071|7072|7073|7143|7171|7780|8443|8465|10024|10025|10026|10027|10028|10029|10030)$'
ORDER BY Laddr

The third query whitelists Zimbra's standard service ports (adjust to your deployment) and surfaces anything else listening — reverse-proxy implants and tunneling tools frequently show up here in post-exploitation.

Remediation & Verification Script (Bash)

Bash / Shell
#!/bin/bash
# Security Arsenal - Zimbra exposure triage & hardening verification
# Run as root on each ZCS node. Review output before applying any changes.
set -uo pipefail

echo "=== [1] Zimbra version & patch level ==="
su - zimbra -c 'zmcontrol -v' 2>/dev/null || echo "zmcontrol not found"

echo "=== [2] Pending Zimbra security updates (apt/yum) ==="
if command -v apt-get >/dev/null; then
  apt-get update -qq && apt-get --just-print upgrade 2>/dev/null | grep -i zimbra | head -40
elif command -v dnf >/dev/null; then
  dnf check-update 'zimbra-*' 2>/dev/null | head -40
fi

echo "=== [3] Webshell sweep: JSP files modified in last 45 days under webapps ==="
find /opt/zimbra/jetty*/webapps -type f \( -name '*.jsp' -o -name '*.jspx' \) -mtime -45 -ls 2>/dev/null

echo "=== [4] Suspicious children of Zimbra daemons (live) ==="
for pid in $(pgrep -f '/opt/zimbra.*java'; pgrep -x nginx); do
  children=$(ps --ppid "$pid" -o pid=,comm=,args= 2>/dev/null)
  echo "$children" | grep -E '(sh|bash|curl|wget|python|perl|nc)' && echo "  ^^ child of PID $pid"
done

echo "=== [5] Admin SOAP endpoint exposure check ==="
echo "-- nginx access log hits to /service/admin/soap from non-local sources:"
grep 'service/admin/soap' /opt/zimbra/log/nginx.log* 2>/dev/null \
  | grep -vE '^127\.|^10\.|^192\.168\.|^172\.(1[6-9]|2[0-9]|3[01])\.' | tail -20

echo "=== [6] Mailbox fan-out quick check (single account, many mailboxes) ==="
grep -h 'mbox' /opt/zimbra/log/mailbox.log* 2>/dev/null \
  | grep -oE 'a=[^;\]]+; mid=[0-9]+' \
  | awk -F';' '{a=$1; m=$2; if(!(m in seen[a])){seen[a][m]=1; cnt[a]++}} END{for(a in cnt) if(cnt[a]>25) print cnt[a], a}' \
  | sort -rn | head -20

echo "=== [7] Restrict admin console (7071) to loopback/management only ==="
echo "Confirm firewall/iptables rules limit TCP 7071. Example (adjust MGMT_CIDR):"
echo "  iptables -A INPUT -p tcp --dport 7071 ! -s <MGMT_CIDR> -j DROP"

echo "=== [8] Enforce 2FA & external-auth review ==="
su - zimbra -c 'zmprov gacf | grep -i twofactor' 2>/dev/null
echo "Ensure zimbraTwoFactorAuthEnabled=TRUE for all COS and admin accounts."

echo "=== Done. Correlate findings with Rapid7 tracker before opening firewall exceptions. ==="

Remediation

  1. Track Rapid7's disclosure repository and vendor advisories. Rapid7 is publishing per-component write-ups and PoCs on a rolling basis via its GitHub tracker, linked from the Part 1 post. Subscribe to it and to Zimbra's official security advisories. Each stage will land with its own fix — do not assume one patch cycle covers all 80+ findings. Monitor: Rapid7 Part 1 disclosure and Zimbra's official security center.

  2. Apply Zimbra patches immediately as they ship. Use the vendor package repos (apt-get / dnf per the script above) and verify zmcontrol -v post-upgrade. Zimbra's fix cadence for this disclosure is staggered — plan for multiple maintenance windows, not one.

  3. Isolate the admin attack surface today. TCP 7071 (admin console) and /service/admin/soap should never be reachable from user subnets or the internet. Enforce at the perimeter firewall and host firewall, then verify with an external scan.

  4. Enforce MFA on all accounts — including service and admin accounts. The identity-boundary flaw class requires one valid account to bootstrap. MFA raises the cost of obtaining that foothold. Enable Zimbra's native two-factor auth across all Classes of Service.

  5. Centralize Zimbra logging now. Ship mailbox.log, nginx.log, and audit.log to your SIEM with retention of at least 90 days. You cannot detect mailbox fan-out from logs that never leave the host.

  6. Baseline mailbox-access patterns. Run the fan-out hunt (KQL Hunt 1 / script section 6) against historical data. If you find a single account touching dozens of mailboxes without a business justification (shared-mailbox delegates, archival tools), treat it as an incident.

  7. Reduce session/token lifetime and review auth-token issuance. Pending full fixes for the authentication findings, shorter sessions shrink the window a stolen token stays valid. Audit for tokens issued to unusual clients or geographies.

  8. Prepare for post-PoC scanning waves. Once PoCs are public, internet-wide scanning for ZCS fingerprints follows within hours to days — this pattern has held for every prior Zimbra disclosure. Ensure your Zimbra hosts are in your attack-surface-management inventory and that any shadow/forgotten instances are patched or taken offline.

  9. Hunt retroactively after patching. Patches close holes; they do not evict intruders. Run the webshell sweep, process-parentage check, and listener audit above on every node after each patch cycle.


The Bottom Line

Rapid7's Zimbra research is a reminder that the most damaging vulnerabilities in collaboration platforms are often not memory corruption — they are broken assumptions about who is allowed to touch whose data. A mailbox authorization flaw turns one phished password into an enterprise-wide communications breach, delivered through legitimate-looking authenticated API traffic. If you run ZCS, your work this week is: firewall the admin plane, centralize the logs, baseline mailbox fan-out, and stand up a patch loop that can absorb a staggered, multi-stage fix rollout. The PoCs are coming; your detections should already be live.

Related Resources

Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.