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]
主要な概念と専門用語
swatchdog- このZimbra経路でログを監視し、サービス状態の行を検出して通知処理を起動するプロセスです。[1]
SNMP Trap- イベント発生時に管理対象システムからSNMP監視先へ送られる通知です。[1]
フレームワーク対応
- このガイドで説明する弱点の 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 通知が有効。 | 文書化された通知経路には3条件すべてが必要です。Microsoft は、細工された SMTP 入力がサービス状態の値に影響し、その後 dosnmp で処理される可能性を報告しています。 | 10.1.20 以降に更新します。露出期間の関連ログとプロセステレメトリを確認し、痕跡は侵害の証明ではなく調査の手掛かりとして扱います。 |
zimbra-snmp パッケージがない、または SNMP 通知が無効。 | この構成では、説明された dosnmp 通知経路は有効ではありません。サーバーに他の脆弱性がないことを示すものではありません。 | サーバーを修正するまでは機能を無効にするか、パッケージを入れない状態にします。すべての mailbox ノードを棚卸しし、各ノードで設定を確認します。 |
| Zimbra Collaboration Suite 10.1.20 以降で、ベンダー修正済みパッケージが導入済み。 | 文書化された shell コマンド構築は 10.1.20 で修正されました。バージョン文字列だけでは全ノードやローカル変更を確認できません。 | 各ノードの導入バージョンとパッケージを確認します。過去に3つの露出条件を満たしていた期間は、通常のインシデント調査を行います。 |
ステップ・バイ・ステップの攻撃フロー
前提条件が成立
10.1.20未満、zimbra-snmpをインストール済み、SNMP通知が有効。[1]
メールが監視値に影響
Microsoftによると、SMTP入力がログ内の状態値に影響し得ました。exploit文字列やネットワーク手順は省略しています。[1]
swatchdogが値を引き渡す
ルールがサービス欄を取得し、通知有効時にdonotifyからdosnmpへ渡します。[1]
shellが値をコマンドとして解析
修正前はPerlのバッククォートが取得値を含む文字列をZimbraサービス権限でshellへ渡していました。[1]
10.1.20でshellを経路から除去
修正は引数を分けてsnmptrapを実行します。更新後も露出環境を調査してください。修正は過去の活動を否定するものではありません。[1]
ソースコード比較:脆弱 vs 堅牢化
脆弱なバッククォートは展開済み文字列をshellに渡します。上流の修正は複数引数のsystemを使い、実行ファイルと各引数を個別に渡すため、SERVICE内のメタ文字がshell命令になりません。これは変更箇所を示す抜粋であり、実行可能なexploitやファイル全体ではありません。[3], [4], [8], [9]
ソース抜粋: rpmconf/Conf/swatchrc: dosnmp
# 影響を受けたdosnmpの要約。exploit入力は示さない。
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}}
);
}
エンジニアリング&システム堅牢化チェックリスト
- ✓Zimbra Collaboration Suite 10.1.20未満の環境をすべて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]
- ✓サービス値が1つのリテラル引数として渡され、shellが起動しないことを確認する回帰テストを追加します。隔離テスト環境では無害なメタ文字列を使用します。[3], [9]
参考資料
- Microsoft Threat Intelligence:CVE-2026-73570の悪用と修正
- Zimbra 10.1.20リリースノート — SNMP修正
- 上流パッチ:Zimbra/zm-build commit 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