← All hunts high TLP:CLEAR Part 3 of 3

Zimbra Post-Exploitation and Cluster Exfiltration

An attacker who has compromised a Zimbra server is harvesting service credentials and moving laterally to peer nodes using the Zimbra SSH identity to exfiltrate mailbox data via specialized Go implants.

Based on research by Microsoft 2026-10-20 12 steps · 5 queries T1003 T1021.004 T1041 T1071.001 T1105 T1552.004 T1560 T1564.010

Brief

Detecting Late-Stage Zimbra

CompromiseaaMicrosoft security researchers recently identified a critical vulnerability (CVE-2026-73570) allowing unauthenticated command injection on internet-facing Zimbra mail servers. While initial exploit detection is vital, adversaries often move quickly to establish persistence and exfiltrate data. This hunt focuses on the post-exploitation behaviors that follow the initial breach.aa

HypothesisaAn adversary who has compromised a

Zimbra server is harvesting service credentials and moving laterally to peer nodes using the Zimbra SSH identity to exfiltrate mailbox data via specialized Go implants.aa

Scoping the

ClusteraThe hunt begins by mapping the Zimbra environment. We query software inventory surfaces to identify every host running Zimbra components, such as mailbox nodes and MTAs. This initial step ensures the hunt focuses on the specific cluster at risk and avoids processing telemetry from unrelated systems.aa

Credential Theft and Lateral

MovementaThe next phase examines process activity for signs of internal discovery. The adversary uses native tools like zmlocalconfig to dump LDAP passwords, authentication tokens, and two-factor secrets. Simultaneously, we track the usage of the shared Zimbra SSH identity. Because Zimbra nodes often communicate using this identity, the hunt looks for rare or one-off SSH connections between nodes that do not match established administrative baselines.aa

Deployment of Go-Based

ImplantsaFollowing credential theft, attackers often deploy custom implants to maintain access and manage exfiltration. The hunt searches for anomalous execution within the /opt/zimbra/ directory tree. We specifically look for binaries running from paths outside the standard bin or libexec directories. Additionally, we monitor for the use of OpenSSL to create encrypted reverse shells, which adversaries use to mask their command-and-control traffic.aa

Data Staging and

ExfiltrationaThe final phase of the hunt tracks the preparation of data for removal. The adversary typically creates compressed archives—such as .tar.gz or .zip files—containing mailbox fragments or configuration data. We query file activity for these archives when created by the Zimbra user or associated processes, especially in temporary or hidden directories. This step links the earlier lateral movement to the ultimate goal of data theft.aa

Blind Spots and

LimitationsaThis hunt relies on comprehensive process and file telemetry across the mail cluster. If specific nodes lack monitoring agents, an adversary can perform harvesting or staging tasks without detection. Furthermore, while the hunt identifies the use of OpenSSL for encrypted tunnels, the specific commands and data sent through these tunnels remain invisible without network-level TLS decryption.aa

In this series

Steps

  1. Identify Zimbra Servers

    Query · scoping

    Identify the mail cluster by finding hosts with Zimbra software installed to narrow the hunt scope.

    reads hb_software_inventorysql
    SELECT DISTINCT device_hostname, package_name, package_version FROM hb_software_inventory WHERE LOWER(package_name) LIKE '%zimbra%'

    What a hit looks like. A list of hostnames belonging to the mail cluster. Silence means no Zimbra software is recorded in inventory.

  2. Zimbra Credential Harvesting

    Query · detection candidate

    Detect usage of Zimbra tools or manual inspection of configuration files to dump service credentials.

    reads hb_process_activitysql
    SELECT device_hostname, user_name, process_cmd_line, time FROM hb_process_activity WHERE (LOWER(process_cmd_line) LIKE '%zmlocalconfig -s%' OR LOWER(process_cmd_line) LIKE '%zimbrapreauthkey%' OR LOWER(process_cmd_line) LIKE '%zimbraauthtokenkey%' OR LOWER(process_cmd_line) LIKE '%zimbratwofactorauthsecret%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Process command lines showing the zimbra user dumping global configuration or authentication secrets. Silence means no such commands were captured.

  3. Cluster Lateral Movement

    Query · baseline

    Identify lateral movement by searching for usage of the shared Zimbra SSH identity across the cluster.

    reads hb_process_activitysql
    SELECT process_cmd_line, COUNT(DISTINCT device_hostname) AS host_count, MIN(time) AS first_seen FROM hb_process_activity WHERE (LOWER(process_cmd_line) LIKE '%/opt/zimbra/.ssh/zimbra_identity%' OR LOWER(process_cmd_line) LIKE '%stricthostkeychecking=no%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY process_cmd_line HAVING host_count <= 2

    What a hit looks like. SSH or rsync commands using the Zimbra identity file that appear on only one or two hosts. Silence means no rare cluster-wide SSH activity was seen.

  4. Triage Early Evidence

    Agent triage

    Evaluate whether the observed credential dumping and cluster movement indicates a malicious actor.

  5. Follow-on Implants

    Query · triage

    Detect anomalous binary execution from within /opt/zimbra/ subdirectories and encrypted shells.

    reads hb_process_activitysql
    SELECT device_hostname, user_name, process_path, process_cmd_line, time FROM hb_process_activity WHERE (LOWER(process_path) LIKE '/opt/zimbra/%' AND LOWER(process_path) NOT LIKE '/opt/zimbra/bin/%' AND LOWER(process_path) NOT LIKE '/opt/zimbra/libexec/%' AND LOWER(process_path) NOT LIKE '/opt/zimbra/common/%' OR (LOWER(process_cmd_line) LIKE '%openssl s_client%' AND LOWER(process_cmd_line) LIKE '%/tmp/s%') OR (LOWER(process_cmd_line) LIKE '%memfd_create%')) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Processes running from non-standard Zimbra paths or openssl sessions used as reverse shells. Silence means no anomalous Zimbra-user execution was found.

  6. Exfiltration Staging

    Query · enrichment

    Search for the creation of hidden archives or temporary data fragments by the Zimbra process.

    reads hb_file_activitysql
    SELECT device_hostname, actor_user_name, file_path, file_name, time FROM hb_file_activity WHERE (LOWER(file_path) LIKE '%/tmp/.%' OR LOWER(file_name) LIKE '%.tar.gz' OR LOWER(file_name) LIKE '%.zip' OR LOWER(file_name) LIKE '%.7z') AND (LOWER(process_name) LIKE '%zimbra%' OR LOWER(actor_user_name) = 'zimbra') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Creation of archives in /tmp or hidden directories by Zimbra-associated processes. Silence means no suspicious file staging was seen.

  7. Final Intrusion Triage

    Agent triage

    Correlate early harvesting with the deployment of follow-on agents and staging.

  8. Route on Intrusion Verdict

    Decision

    Determine the response path based on the confirmed presence of malicious activity.

  9. Isolate Compromised Node

    Response action

    Immediately contain the mail server before further exfiltration.

  10. Analyst Forensic Review

    Analyst task

    Perform manual analysis of anomalous binaries and cluster-wide movement.

  11. Close Out Negative

    Analyst task

    Document the absence of post-exploitation markers in the cluster.

Coverage

Scenario coverage

StageCoveredHow, or why not
Zimbra credential harvesting
T1552.004 · T1003
Yes credential-harvesting
Lateral movement via SSH
T1021.004
Yes cluster-lateral-movement
Multi-stage Go implant C2
T1105 · T1071.001 · T1564.010
Yes follow-on-implants
Mailbox and auth exfiltration
T1041 · T1560
Yes exfiltration-staging
Unauthenticated RCE via SNMP path
T1190 · T1059.004
Out of scope Belongs to another part of the 'Unauthenticated command injection on internet-facing mail servers: tracking CVE-2026-73570' series.
Webshell deployment and reconstruction
T1505.003 · T1027
Out of scope Belongs to another part of the 'Unauthenticated command injection on internet-facing mail servers: tracking CVE-2026-73570' series.
Zimbra environment reconnaissance
T1082 · T1087
Out of scope Belongs to another part of the 'Unauthenticated command injection on internet-facing mail servers: tracking CVE-2026-73570' series.
PAM abuse privilege escalation
T1548.003 · T1556
Out of scope Belongs to another part of the 'Unauthenticated command injection on internet-facing mail servers: tracking CVE-2026-73570' series.
Systemd service persistence
T1543.002 · T1070.006
Out of scope Belongs to another part of the 'Unauthenticated command injection on internet-facing mail servers: tracking CVE-2026-73570' series.

Blind spots

  • Needs hb_process_activity on all mail cluster nodes. An attacker can move to an unmonitored node in the cluster and perform exfiltration there without being recorded. It would answer whether commands ran on nodes without telemetry agents.
  • Needs Network TLS decryption. While the shell activity is visible as a process, the exact content of the commands and exfiltrated data remains hidden. It would answer the specific commands sent over the openssl s_client tunnel.

Parameters & data

Parameters

ParameterTypeDefaultWhat it is
lookback_daysnumber14Days of history to examine.
scope_hostslist[host]—Hostnames identified in the scoping step; leave empty to hunt the whole estate.

Telemetry

SourceCategoryTelemetry
Endpoint telemetry (hb_ surfaces)endpointendpoint

Source

Download hunt.md Definition (JSON) An open hunt.md file; it runs anywhere that reads the format.
---
analysis: A single rule on zmlocalconfig may be too noisy or easily bypassed by grepping
  localconfig.xml directly; this hunt correlates harvesting, cluster-wide SSH movement,
  and anomalous Go binary execution into a single high-confidence verdict.
blind_spots:
- id: missing-process-telemetry
  question: whether commands ran on nodes without telemetry agents
  requires: hb_process_activity on all mail cluster nodes
  risk: An attacker can move to an unmonitored node in the cluster and perform exfiltration
    there without being recorded.
- id: encrypted-c2-content
  question: the specific commands sent over the openssl s_client tunnel
  requires: Network TLS decryption
  risk: While the shell activity is visible as a process, the exact content of the
    commands and exfiltrated data remains hidden.
  stage: multi-stage-go-implant-c2
coverage:
- stage: zimbra-credential-harvesting
  status: covered
  steps:
  - credential-harvesting
- stage: lateral-movement-via-ssh
  status: covered
  steps:
  - cluster-lateral-movement
- stage: multi-stage-go-implant-c2
  status: covered
  steps:
  - follow-on-implants
- stage: mailbox-and-auth-exfiltration
  status: covered
  steps:
  - exfiltration-staging
- reason: 'Belongs to another part of the ''Unauthenticated command injection on internet-facing
    mail servers: tracking CVE-2026-73570'' series.'
  stage: unauthenticated-rce-snmp-path
  status: out_of_scope
- reason: 'Belongs to another part of the ''Unauthenticated command injection on internet-facing
    mail servers: tracking CVE-2026-73570'' series.'
  stage: webshell-deployment-and-reconstruction
  status: out_of_scope
- reason: 'Belongs to another part of the ''Unauthenticated command injection on internet-facing
    mail servers: tracking CVE-2026-73570'' series.'
  stage: zimbra-environment-reconnaissance
  status: out_of_scope
- reason: 'Belongs to another part of the ''Unauthenticated command injection on internet-facing
    mail servers: tracking CVE-2026-73570'' series.'
  stage: pam-abuse-privilege-escalation
  status: out_of_scope
- reason: 'Belongs to another part of the ''Unauthenticated command injection on internet-facing
    mail servers: tracking CVE-2026-73570'' series.'
  stage: systemd-service-persistence
  status: out_of_scope
guardrails:
  claims: no_unsupported
  evidence: citation_required
  missing_data: not_benign
  telemetry: untrusted
hunt:
  applicability: campaign-specific
  handoff: promote-to-detection
  justification: Zimbra servers contain the organization's entire communication history
    and authentication secrets; confirmed post-exploitation activity here represents
    a total data breach scenario requiring immediate response.
  methodology: model-assisted
  trigger: intel-report
hypothesis: An attacker who has compromised a Zimbra server is harvesting service
  credentials and moving laterally to peer nodes using the Zimbra SSH identity to
  exfiltrate mailbox data via specialized Go implants.
labels:
- hunt
- attack.t1552.004
- attack.t1003
- attack.t1021.004
- attack.t1105
- attack.t1071.001
- attack.t1564.010
- attack.t1041
- attack.t1560
- command and control
- credential access
- discovery
- exfiltration
- initial access
- lateral movement
- persistence
- privilege escalation
name: Zimbra Post-Exploitation and Cluster Exfiltration
parameters:
  lookback_days:
    default: '14'
    description: Days of history to examine.
    from:
      kind: manual
      observed: '2026-09-30'
      ref: hunt-config
    type: number
  scope_hosts:
    default: []
    description: Hostnames identified in the scoping step; leave empty to hunt the
      whole estate.
    from:
      kind: manual
      observed: '2026-09-30'
      ref: hunt-config
    type: list[host]
provenance:
  authors:
  - name: Huntbase hunt generation
    org: huntbase.io
  generated:
    by: huntbase-hunt-generation
    from: https://www.microsoft.com/en-us/security/blog/2026/09/30/unauthenticated-command-injection-on-internet-facing-mail-servers-tracking-cve-2026-73570/
    gates:
    - dry-run
    - lint
    model: hb_google/gemini-3-flash-preview
rationale: Start with servers running Zimbra (Mailbox nodes, MTAs). Use the identified
  hosts to populate the scope_hosts parameter for subsequent steps.
references:
- name: 'Microsoft Security Blog: Unauthenticated command injection on internet-facing
    mail servers: tracking CVE-2026-73570'
  url: https://www.microsoft.com/en-us/security/blog/2026/09/30/unauthenticated-command-injection-on-internet-facing-mail-servers-tracking-cve-2026-73570/
related:
- hunt: zimbra-unauth-rce-initial-access
  reason: This hunt focuses on the post-exploitation phase after the initial RCE exploit.
  relation: follows
scenario:
  stages:
  - name: Unauthenticated RCE via SNMP path
    observables:
    - CVE-2026-73570
    - swatchdog
    - snmptrap
    - ZB73570 User-Agent
    - oast.fun
    - oast.online
    - dnslog.pp.ua
    - requestrepo.com
    - bypass.eu.org
    slug: unauthenticated-rce-snmp-path
    tactic: initial-access
    techniques:
    - T1190
    - T1059.004
  - name: Webshell deployment and reconstruction
    observables:
    - JSP webshells in Jetty application paths
    - JSP webshells in mailboxd application paths
    - Payload reconstruction from staged fragments
    - webroot permission modification
    slug: webshell-deployment-and-reconstruction
    tactic: persistence
    techniques:
    - T1505.003
    - T1027
  - name: Zimbra environment reconnaissance
    observables:
    - zmprov to map mailbox nodes
    - zmprov to map MTA nodes
    - Checking /opt/zimbra/.ssh/zimbra_identity
    slug: zimbra-environment-reconnaissance
    tactic: discovery
    techniques:
    - T1082
    - T1087
  - name: PAM abuse privilege escalation
    observables:
    - Symlink zmmailboxd.out -> /etc/pam.d/sudo
    - zmmailboxdmgr invocation
    - pam_exec session hook
    - zmstat-fd invocation
    - 'NOPASSWD: ALL added to sudoers'
    slug: pam-abuse-privilege-escalation
    tactic: privilege-escalation
    techniques:
    - T1548.003
    - T1556
  - name: Systemd service persistence
    observables:
    - /etc/systemd/system/zimlog.service
    - timestomping to match rsync.service
    - timestomping to match sshd.service
    - systemctl enable zimlog.service
    slug: systemd-service-persistence
    tactic: persistence
    techniques:
    - T1543.002
    - T1070.006
  - name: Zimbra credential harvesting
    observables:
    - zmlocalconfig -s
    - ldapsearch for zimbraPreAuthKey
    - ldapsearch for zimbraAuthTokenKey
    - ldapsearch for zimbraTwoFactorAuthSecret
    slug: zimbra-credential-harvesting
    tactic: credential-access
    techniques:
    - T1552.004
    - T1003
  - name: Lateral movement via SSH
    observables:
    - ssh -i /opt/zimbra/.ssh/zimbra_identity
    - StrictHostKeyChecking=no
    - rsync to peer mailbox nodes
    slug: lateral-movement-via-ssh
    tactic: lateral-movement
    techniques:
    - T1021.004
  - name: Multi-stage Go implant C2
    observables:
    - agent2.sh downloader
    - zimdown2 installer
    - zimclient2 agent
    - named pipe /tmp/s
    - openssl s_client to remote endpoint
    - memfd_create execution
    slug: multi-stage-go-implant-c2
    tactic: command-and-control
    techniques:
    - T1105
    - T1071.001
    - T1564.010
  - name: Mailbox and auth exfiltration
    observables:
    - zimbra-exfil/client-dump module
    - hidden archive creation for exfiltration
    slug: mailbox-and-auth-exfiltration
    tactic: exfiltration
    techniques:
    - T1041
    - T1560
  summary: An unauthenticated RCE campaign exploiting CVE-2026-73570 in Zimbra's SNMP
    notification path to execute commands as the zimbra user. Attackers deployed JSP
    webshells, escalated to root by abusing pam_exec and sudo helpers, and utilized
    custom Go-based agents to exfiltrate service authentication keys and mailbox data.
series:
  index: 3
  slug: unauthenticated-command-injection-on-internet-facing-mail-servers-tracking-cve-2026-73570
  title: 'Unauthenticated command injection on internet-facing mail servers: tracking
    CVE-2026-73570'
  total: 3
severity: high
targets:
  analyst:
    name: Tier-2 analyst
    role: analyst
  endpoint:
    category: endpoint
    name: Endpoint telemetry (hb_ surfaces)
    telemetry:
    - endpoint
  hunter:
    agent: true
    name: Hunt agent
tlp: clear
type: investigation
---


# Zimbra Post-Exploitation and Cluster Exfiltration

This hunt focuses on the late-stage actions following the exploitation of CVE-2026-73570. It examines the harvest of high-value authentication keys from local configurations, the use of shared SSH identities to move laterally across the mail cluster, and the deployment of advanced Go-based agents. The hunt follows a phased approach: first identifying the mail cluster servers, then triaging early movement and credential theft, and finally searching for the complex implants and exfiltration staging files. By looking for anomalous execution within the Zimbra directory structure and openssl-backed encrypted shells, this hunt distinguishes targeted server compromise from generic scanning activity.

## identify-zimbra-hosts
<!-- Identify Zimbra Servers -->
Identify the mail cluster by finding hosts with Zimbra software installed to narrow the hunt scope.

```sqlite target=endpoint role=scoping
~~~yaml
expected: A list of hostnames belonging to the mail cluster. Silence means no Zimbra
  software is recorded in inventory.
reads:
- device_hostname
- package_name
- package_version
silence: not_evidence_of_absence
source: hb_software_inventory
verified: dry-run
verified_at: '2026-10-20'
~~~
SELECT DISTINCT device_hostname, package_name, package_version FROM hb_software_inventory WHERE LOWER(package_name) LIKE '%zimbra%'
```

## parallel-early-activity
<!-- Examine Early Activity -->
parallel:
- → credential-harvesting
- → cluster-lateral-movement
join: → triage-early-evidence

## credential-harvesting
<!-- Zimbra Credential Harvesting -->
Detect usage of Zimbra tools or manual inspection of configuration files to dump service credentials.

```sqlite target=endpoint role=detection-candidate params=(lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
expected: Process command lines showing the zimbra user dumping global configuration
  or authentication secrets. Silence means no such commands were captured.
reads:
- device_hostname
- user_name
- process_cmd_line
- time
silence: not_evidence_of_absence
source: hb_process_activity
verified: dry-run
verified_at: '2026-10-20'
~~~
SELECT device_hostname, user_name, process_cmd_line, time FROM hb_process_activity WHERE (LOWER(process_cmd_line) LIKE '%zmlocalconfig -s%' OR LOWER(process_cmd_line) LIKE '%zimbrapreauthkey%' OR LOWER(process_cmd_line) LIKE '%zimbraauthtokenkey%' OR LOWER(process_cmd_line) LIKE '%zimbratwofactorauthsecret%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```

## cluster-lateral-movement
<!-- Cluster Lateral Movement -->
Identify lateral movement by searching for usage of the shared Zimbra SSH identity across the cluster.

```sqlite target=endpoint role=baseline params=(lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
baseline:
  compare: first_seen
  window: '{{lookback_days}}d'
expected: SSH or rsync commands using the Zimbra identity file that appear on only
  one or two hosts. Silence means no rare cluster-wide SSH activity was seen.
prevalence:
  by: device_hostname
  key:
  - process_cmd_line
  rare_below: 3
reads:
- process_cmd_line
- device_hostname
- time
silence: not_evidence_of_absence
source: hb_process_activity
verified: dry-run
verified_at: '2026-10-20'
~~~
SELECT process_cmd_line, COUNT(DISTINCT device_hostname) AS host_count, MIN(time) AS first_seen FROM hb_process_activity WHERE (LOWER(process_cmd_line) LIKE '%/opt/zimbra/.ssh/zimbra_identity%' OR LOWER(process_cmd_line) LIKE '%stricthostkeychecking=no%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY process_cmd_line HAVING host_count <= 2
```

## triage-early-evidence
<!-- Triage Early Evidence -->
```agent target=hunter
cite: required
context:
- credential-harvesting
- cluster-lateral-movement
max_iterations: 3
objective: Determine if the zmlocalconfig usage or SSH identity usage is consistent
  with an attacker moving between nodes or harvesting secrets.
success_criteria: A verdict of malicious | suspicious | benign per host citing the
  command patterns.
tools:
- endpoint
```

## parallel-follow-on-activity
<!-- Follow-on Activity Search -->
parallel:
- → follow-on-implants
- → exfiltration-staging
join: → triage-final-intrusion

## follow-on-implants
<!-- Follow-on Implants -->
Detect anomalous binary execution from within /opt/zimbra/ subdirectories and encrypted shells.

```sqlite target=endpoint role=triage params=(lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
expected: Processes running from non-standard Zimbra paths or openssl sessions used
  as reverse shells. Silence means no anomalous Zimbra-user execution was found.
reads:
- device_hostname
- user_name
- process_path
- process_cmd_line
- time
silence: not_evidence_of_absence
source: hb_process_activity
verified: dry-run
verified_at: '2026-10-20'
~~~
SELECT device_hostname, user_name, process_path, process_cmd_line, time FROM hb_process_activity WHERE (LOWER(process_path) LIKE '/opt/zimbra/%' AND LOWER(process_path) NOT LIKE '/opt/zimbra/bin/%' AND LOWER(process_path) NOT LIKE '/opt/zimbra/libexec/%' AND LOWER(process_path) NOT LIKE '/opt/zimbra/common/%' OR (LOWER(process_cmd_line) LIKE '%openssl s_client%' AND LOWER(process_cmd_line) LIKE '%/tmp/s%') OR (LOWER(process_cmd_line) LIKE '%memfd_create%')) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```

## exfiltration-staging
<!-- Exfiltration Staging -->
Search for the creation of hidden archives or temporary data fragments by the Zimbra process.

```sqlite target=endpoint role=enrichment params=(lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
expected: Creation of archives in /tmp or hidden directories by Zimbra-associated
  processes. Silence means no suspicious file staging was seen.
reads:
- device_hostname
- actor_user_name
- file_path
- file_name
- time
silence: not_evidence_of_absence
source: hb_file_activity
verified: dry-run
verified_at: '2026-10-20'
~~~
SELECT device_hostname, actor_user_name, file_path, file_name, time FROM hb_file_activity WHERE (LOWER(file_path) LIKE '%/tmp/.%' OR LOWER(file_name) LIKE '%.tar.gz' OR LOWER(file_name) LIKE '%.zip' OR LOWER(file_name) LIKE '%.7z') AND (LOWER(process_name) LIKE '%zimbra%' OR LOWER(actor_user_name) = 'zimbra') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```

## triage-final-intrusion
<!-- Final Intrusion Triage -->
```agent target=hunter
cite: required
context:
- triage-early-evidence
- follow-on-implants
- exfiltration-staging
max_iterations: 5
objective: Weigh the Phase 1 movement and harvest against the Phase 2 agents and staging
  activity to confirm a completed mailbox exfiltration operation.
success_criteria: A final verdict citing the linkage between initial harvest and follow-on
  agent deployment.
tools:
- endpoint
```

## decision-route
<!-- Route on Intrusion Verdict -->
if~: "the triage-final-intrusion verdict is malicious for at least one host" (confidence: high, judge=hunter)
then: → isolate-compromised-node
indeterminate: → analyst-forensic-review
unavailable: → analyst-forensic-review (blind_spot: missing-process-telemetry)
else: → close-out-negative

## isolate-compromised-node
<!-- Isolate Compromised Node -->
```action target=endpoint
~~~yaml
approval: required
~~~
Isolate the host from the network. Revoke the Zimbra SSH identity across the entire cluster and rotate all LDAP, Postfix, and service account credentials immediately.
```
→ analyst-forensic-review

## analyst-forensic-review
<!-- Analyst Forensic Review -->
```manual target=analyst
Examine the /opt/zimbra/ directory for binaries running as the zimbra user that do not belong to the standard install. Verify the other hosts in the mail cluster for the presence of the same SSH identity usage or hidden archive files.
```
→ end

## close-out-negative
<!-- Close Out Negative -->
```manual target=analyst
Record that no evidence of Zimbra credential harvesting or follow-on implant activity was found. Recommend verifying that the zimbra-snmp package is either updated or disabled.
```
→ end

Run it

Take this hunt into your environment.

Open it in Huntbase to run every step against your own connections, with Scout weighing the evidence and your analysts in command. Or take the open hunt.md file anywhere that reads the format.

Machine-drafted by huntbase-hunt-generation using hb_google/gemini-3-flash-preview, gated by dry-run, lint, then reviewed by a person.