flawopen.com/Teardowns/cve-2026-73570-zimbra-snmp-command-injection
CVE-2026-73570:Zimbra 的 SNMP 通知链如何导致命令注入
CVE-2026-73570 是 Zimbra 可选 SNMP 通知路径中的未认证命令注入漏洞。特制邮件可能影响一个状态值,该值随后被插入 shell 命令;Zimbra 在 10.1.20 中修复了调用方式。Microsoft 后来报告称,在公开披露前有扫描工具探测过这条易受攻击的路径。[1], [2], [5]
邮件分拣员把信封上的标签抄到工作单上。旧流程把整张工作单交给命令解释器,解释器可能把标签中的字符误当成额外指令。修复后,通知程序接收一组彼此分开的参数,标签始终只是数据。[8], [9], [3]
核心概念与专有名词
框架映射
- 本指南所述弱点的 CWE 参考: CWE-78
- CISA KEV — 收录日期 2026-08-21 — CVE-2026-73570
根本原因剖析 (Root Cause)
受影响代码位于 rpmconf/Conf/swatchrc 的 dosnmp 函数。swatch 规则从状态行中捕获服务名称,并通过 donotify 以 SERVICE 传递;dosnmp 随后把该值插入包含 $snmptrap 的反引号命令。反引号会调用 shell,因此来自日志的值可能被解析为命令语法。文档列出的前提必须同时成立:Zimbra Collaboration Suite 版本低于 10.1.20、安装了可选 zimbra-snmp 软件包且启用了 SNMP 通知。Microsoft 报告称,特制 SMTP 输入可到达此通知路径。该公司观察到扫描工具在 2026 年 7 月 28 日至 8 月 7 日探测易受攻击的注入点;这发生在 7 月 20 日补丁发布后、8 月 13 日公开披露前。Zimbra 修复将 shell 字符串替换为列表形式的 system(...),把可执行文件和参数分别传入,执行路径中不再经过 shell。本文仅分析 SNMP 通知代码,并不表示所有 Zimbra 安装或 SMTP 邮件都存在漏洞。[1], [2], [3], [5], [7]
CVE-2026-73570 受影响条件与修复矩阵
| 部署条件 | 文档所述路径是否适用? | 防御措施 |
|---|---|---|
Zimbra Collaboration Suite 低于 10.1.20;已安装可选的 zimbra-snmp 软件包;已启用 SNMP 通知。 | 文档所述通知路径需要同时满足这三个条件。Microsoft 报告称,特制 SMTP 输入可能影响服务状态值,随后由 dosnmp 处理。 | 升级到 10.1.20 或更高版本。检查暴露期间的相关日志和进程遥测;将指标视为调查线索,而非已遭入侵的证据。 |
未安装 zimbra-snmp 软件包,或已禁用 SNMP 通知。 | 此配置下,文档所述 dosnmp 通知路径未启用。这不能证明服务器不存在其他漏洞。 | 修复服务器前保持该功能关闭或不安装该软件包。盘点所有 mailbox 节点并逐一确认设置。 |
| Zimbra Collaboration Suite 10.1.20 或更高版本,且已安装供应商修复的软件包。 | 文档所述 shell 命令构造问题已在 10.1.20 修复。仅凭版本号无法确认所有节点或本地修改情况。 | 逐个节点核实安装版本和软件包;如果先前时期满足全部三个暴露条件,按常规事件响应流程进行调查。 |
攻击执行流程分解
前置条件成立
版本低于 10.1.20、安装 zimbra-snmp 且启用了 SNMP 通知。[1]
邮件影响服务监控值
Microsoft 报告称 SMTP 请求可能影响日志中的状态值。本文省略利用字符串和网络指令。[1]
swatchdog 转交该值
规则捕获服务字段,并在通知启用时通过 donotify 将其传到 dosnmp。[1]
Shell 把数据当作命令解析
修复前,Perl 反引号把含有捕获值的字符串交给 shell,并以 Zimbra 服务账户运行。[1]
10.1.20 从链路中移除 shell
修复以独立参数调用 snmptrap。完成升级并检查暴露实例;修复不能排除历史活动。[1]
源代码对比:漏洞与安全实现
有漏洞的反引号会把插值后的整条字符串交给 shell。上游补丁使用多参数 system,分别传递程序和参数,因此 SERVICE 中的元字符不会成为 shell 指令。该片段聚焦于实际改动,不是可运行的 exploit,也不是完整文件副本。[3], [4], [8], [9]
源码摘录: rpmconf/Conf/swatchrc: dosnmp
# 受影响 dosnmp 的精简片段;未展示利用输入。
sub dosnmp {
my %args = (@_);
`$snmptrap $snmpsvctrap $snmpsvcname s $args{SERVICE} $snmpsvcstatus i $statuses{$args{STATUS}}`;
}
# Zimbra 10.1.20 修复:直接启动程序并分别传入参数。
sub dosnmp {
my %args = (@_);
system(
"/opt/zimbra/common/bin/snmptrap",
"-v", "2c", "-c", "zimbra", $traphost, "",
$snmpsvctrap, $snmpsvcname, "s", $args{SERVICE},
$snmpsvcstatus, "i", $statuses{$args{STATUS}}
);
}
工程与系统安全加固清单
- ✓将所有低于 10.1.20 的 Zimbra Collaboration 部署升级到 10.1.20 或更高版本,并核对每个 mailbox 节点上的软件包版本。[2], [1]
- ✓检查是否安装
zimbra-snmp以及是否启用了 SNMP 通知。若无法立即打补丁,按实际情况移除可选软件包或禁用通知,并仅允许可信系统访问 SMTP 和 SNMP。[1] - ✓将同时满足两个前提且可从互联网访问的未修补实例视为暴露。检查日志和终端遥测,寻找异常服务状态值及由 Perl 或 swatchdog 启动的异常子进程。[1], [6]
- ✓若补丁前存在暴露,保留日志,界定受影响的 mailbox 节点,检查持久化和账户活动,并根据证据或暴露程度轮换密钥。[1], [6]
- ✓代码审查中禁止把来自日志、邮件或其他外部输入的值拼进 shell 命令字符串。优先使用接收参数数组的 API;若仍需 shell,必须严格验证允许值。[8], [9], [7], [3]
- ✓添加回归测试,验证服务值作为单个字面参数传递且不会启动 shell;在隔离测试环境中使用无害的元字符字符串。[3], [9]
参考来源
- Microsoft Threat Intelligence:CVE-2026-73570 利用活动与修复
- Zimbra 10.1.20 发行说明 — SNMP 修复
- 上游补丁:Zimbra/zm-build 提交 92b6ebe
- Zimbra/zm-build PR #333
- NVD/GitHub Advisory Database:CVE-2026-73570、CWE-78、CVSS 8.9
- CISA 已知遭利用漏洞目录条目
- MITRE CWE-78: OS command injection
- Perl perlop: command execution with backticks
- Perl system function documentation
- NVD: CVE-2026-73570