
Roundcube 1.0.0 <= 1.2.2 استغلال تنفيذ التعليمات البرمجية عن بُعد وحاوية معرضة للثغرات
Roundcube هو برنامج ويب مفتوح المصدر للبريد الإلكتروني واسع الانتشار، تستخدمه العديد من المؤسسات والشركات حول العالم. على سبيل المثال، تحسب المرآة على SourceForge أكثر من 260,000 تنزيل خلال آخر 12 شهرًا، وهو جزء صغير فقط من المستخدمين الفعليين. بمجرد تثبيت Roundcube على خادم، فإنه يوفر واجهة ويب للمستخدمين المصادق عليهم لإرسال واستقبال رسائل البريد الإلكتروني عبر متصفح الويب.
في Roundcube 1.2.2 والإصدارات الأقدم، يتدفق إدخال يتحكم فيه المستخدم دون تعقيم إلى الوسيطة الخامسة لاستدعاء دالة PHP المدمجة mail()، وهي موثقة على أنها حرجة أمنيًا. المشكلة هي أن استدعاء دالة mail() سيؤدي إلى قيام PHP بتنفيذ برنامج sendmail. تسمح الوسيطة الخامسة بتمرير وسائط إلى هذا التنفيذ، وهو ما يسمح بتهيئة sendmail. وبما أن sendmail يوفر الخيار -X لتسجيل كل حركة البريد في ملف، يمكن للمهاجم إساءة استخدام هذا الخيار واستحداث ملف PHP خبيث في دليل webroot الخاص بالخادم المستهدف. أسطر التعليمات البرمجية التالية هي ما تؤدي إلى تشغيل الثغرة.
تتطلب الثغرة الشروط التالية لاستغلالها:
mail() الخاصة بـ PHP (افتراضيًا، إذا لم يتم تحديد SMTP [1])mail() الخاصة بـ PHP مهيأة لاستخدام sendmail (افتراضيًا، انظر sendmail_path [2])safe_mode معطلاً (افتراضيًا، انظر safe_mode [3])هذه المتطلبات ليست صعبة بشكل خاص، وهو ما يعني بدوره وجود عدد كبير من الأنظمة القابلة للاستغلال في البيئات الحقيقية.
لإعداد بيئة قابلة للاستغلال لاختبارك، ستحتاج إلى تثبيت Docker، ثم قم بتشغيل الأمر التالي:
docker build -t vuln/cve-2016-9920 .
docker run --rm -it -p 80:80 vuln/cve-2016-9920
وسيقوم بتشغيل تطبيق ويب قابل للاستغلال على مضيفك على المنفذ 80
في Roundcube 1.2.2 والإصدارات الأقدم، يتدفق إدخال يتحكم فيه المستخدم دون تعقيم إلى الوسيطة الخامسة لاستدعاء دالة PHP المدمجة
mail()، وهي موثقة على أنها حرجة أمنيًا. المشكلة هي أن استدعاء دالةmail()سيؤدي إلى قيام PHP بتنفيذ برنامج sendmail. تسمح الوسيطة الخامسة بتمرير وسائط إضافية إلى هذا التنفيذ، وهو ما يسمح بتهيئة sendmail. وبما أن sendmail يوفر الخيار-Xلتسجيل كل حركة البريد في ملف، يمكن للمهاجم إساءة استخدام هذا الخيار واستحداث ملف PHP خبيث في دليل webroot الخاص بالخادم المستهدف. على الرغم من أن هذه الثغرة نادرة وغير معروفة على نطاق واسع، فقد اكتشفها RIPS في غضون ثوانٍ. [4]
لاستغلال هذا الهدف، قم فقط بتشغيل:
./exploit.py --host HOST --user USERNAME --pwd PASSWORD --path PATH --www_path WEB_DIRECTORY
إذا كنت تستخدم هذه الصورة القابلة للاستغلال، يمكنك ببساطة تشغيل:
./exploit.py --host 127.0.0.1 --user username --pwd password --path roundcube --www_path "/var/www/html/roundcube"
بعد الاستغلال، سيتم تخزين ملف باسم backdoor.php في المجلد الجذر لدليل الويب. وسيمنحك الاستغلال قشرة (shell) يمكنك من خلالها إرسال الأوامر إلى الباب الخلفي:
./exploit.py --host 127.0.0.1 --user username --pwd password --path roundcube --www_path "/var/www/html/roundcube"
[+] CVE-2016-9920 exploit by t0kx
[+] Exploiting 127.0.0.1
[+] Target exploited, acessing shell at http://127.0.0.1/roundcube/backdoor.php
[+] Running whoami: www-data
[+] Done
تم اكتشاف هذا الخلل بواسطة Robin Peraglie [4]. أما النص الرئيسي وفكرة هذه المادة التعليمية فقد أعدّهما opsxcq.
هذا البرنامج أو البرنامج السابق هو لأغراض تعليمية فقط. لا تستخدمه دون إذن. ينطبق إخلاء المسؤولية المعتاد، ولا سيما حقيقة أنني (t0kx) لست مسؤولًا عن أي أضرار ناتجة عن الاستخدام المباشر أو غير المباشر للمعلومات أو الوظائف التي توفرها هذه البرامج. لا يتحمل المؤلف أو أي مزود إنترنت أي مسؤولية عن المحتوى أو إساءة استخدام هذه البرامج أو أي مشتقات منها. باستخدام هذه البرامج، فإنك تقبل حقيقة أن أي ضرر (فقدان البيانات، تعطل النظام، اختراق النظام، وما إلى ذلك) ناتج عن استخدام هذه البرامج ليس مسؤولية t0kx.