
إثبات المفهوم لاستغلال الثغرة CVE-2021-46398
ستجد في هذا المستودع إثبات مفهوم لاستغلال ثغرة CVE-2021-46398 عبر docker compose، بالإضافة إلى تحليل لآثار هذه الثغرة على أنظمة المعلومات.
# Exploit Title: FileBrowser 2.17.2 - Cross Site Request Forgery (CSRF) to Remote Code Execution (RCE)
# Date: 05/02/2022
# Exploit Author: FEBIN MON SAJI
# Vendor Homepage: https://filebrowser.org/
# Software Link: https://github.com/filebrowser/filebrowser
# Version:
FileBrowser <= 2.17.2
# Tested on: Ubuntu 20.04
# CVE : CVE-2021-46398
وفقًا لموقع FileBrowser، فإن FileBrowser هو برنامج شهير من نوع "اصنع سحابتك الخاصة"، يمكنك تثبيته على خادم، وتوجيهه إلى مسار معين، ثم الوصول إلى ملفاتك عبر واجهة ويب أنيقة مكتوبة بلغة Go، مع العديد من الميزات. إنه يشبه إلى حد ما Google Drive، إلا أن بإمكان أي شخص امتلاك واستضافة نسخته الخاصة.
يمكن لمسؤولي FileBrowser إنشاء عدة مستخدمين، وحتى مستخدمًا آخر بصلاحيات مسؤول، ومنحه الوصول إلى أي دليل يريده. يتم التعامل مع إنشاء المستخدمين عبر نقطة نهاية /api/users. تقبل نقطة النهاية المدخلات بصيغة لإنشاء المستخدمين، لكنها تفشل في التحقق من ترويسة التي يجب أن تكون قيمتها ، إذ تقبل ، وهنا تنشأ الثغرة. كما لا يتم التحقق من ولا توجد رموز مضادة لـ مطبقة. ومن ثم يمكن للمهاجم استغلال هذه الثغرة بسهولة لإنشاء مستخدم خلفي بصلاحيات مسؤول والوصول إلى الدليل الرئيسي أو أي دليل يريد المهاجم الوصول إليه، فقط عن طريق إرسال رابط صفحة ويب خبيثة إلى المسؤول الشرعي والوصول إلى نظام الملفات الكامل للخادم (مزيد من الشرح لهذه العملية في قسم العرض التوضيحي).
Content-Typeapplication/jsontext/plainOriginبالإضافة إلى ذلك، يمكن للمسؤول تنفيذ أوامر على النظام، لذا تؤدي هذه الثغرة إلى RCE.
في ما يلي مخطط تسلسلي يلخص عملية الهجوم (Alice هي المهاجمة و Bob هو المسؤول ومستضيف نسخة FileBrowser):
sequenceDiagram
Alice (hacker) ->> Alice (hacker): *Maliciously creates the malicious HTML page*
Alice (hacker) ->> Bob (admin): Here is a cool page! You must check that bro!
Bob (admin) ->> Alice (hacker): Thanks dude, let's open that!
Bob (admin) ->> Bob (admin): *Opens the page thinking it's something cool*
Bob (admin) -->> FileBrowser: *Sends a request to create a user without knowing it*
FileBrowser -->> FileBrowser: *Creates a new admin privileged user as requested*
Alice (hacker) ->> FileBrowser: Eheheh Bob is so dumb! *Connect to FileBrowser with the backdoor user*
FileBrowser ->> Alice (hacker): *Accept Alice connection with the new user created*
Alice (hacker) ->> FileBrowser: *Request shell access to FileBrowser with the appropriate button then makes sytem calls on Bob's computer*الهدف من هذا العرض التوضيحي هو إنشاء بنية مصغّرة تتكون من جهازين/ثلاثة أجهزة:
إنها بنية مبسطة للغاية تهدف إلى إبراز الجانب التقني للثغرة.
لهذه التجربة، ستحتاج فقط إلى docker.
في هذا الإعداد، تعتمد الآلة المستهدفة على صورة FileBrowser إصدار v2.17.2 (وهو إصدار قابل للاختراق بهذه الثغرة)، حيث يكون حساب FileBrowser الوحيد هو حساب المسؤول الذي يملك admin/admin كاسم مستخدم وكلمة مرور.
تشغيل الآلة المستهدفة:
mkdir srv && docker compose up
من جانب المهاجم، ستسمح لنا صفحة الويب الخبيثة بتنفيذ استدعاء واجهة برمجة تطبيقات FileBrowser وإنشاء مستخدمنا الخلفي من جهاز المسؤول.
تم توفير مثال لهذه الصفحة في هذا المستودع باسم index.html. إنها صفحة HTML بسيطة تحتوي على نموذج مخفي ينفذ طلب POST إلى نقطة نهاية FileBrowser /api/users مع الحمولة في اسم الإدخال. تنشئ هذه الحمولة مستخدمًا بصلاحيات مسؤول اسم تسجيل دخوله "oui" وكلمة مروره "oui"، ويتم تشغيلها عند النقر على الزر.
كان بإمكاننا بوضوح إنشاء صفحة أجمل وأكثر جاذبية من هذه وإخفاء إرسال طلب HTTP في عنصر آخر من الموقع، لكن الأمر فقط لتتمكن من رؤية الجانب التقني لاستغلال الثغرة. تذكّر أن الهدف من صفحة الويب الخبيثة هذه هو أن يفتحها مسؤول FileBrowser دون أن يشك في أي شيء!
من جانب المسؤول، نقوم بهدوء بأمور إدارية على FileBrowser. انتقل إلى 127.0.0.1:8080 وسجّل الدخول ببيانات اعتماد المسؤول admin/admin.
بعد ذلك، نتلقى صفحة الويب الخبيثة بأي وسيلة، مثل رسالة تصيد احتيالي، وننفذ الإجراء الذي يشغّل الاستغلال. افتح صفحة index.html وانقر على الزر؛ سيؤدي ذلك إلى تشغيل الحمولة.
الآن، نعود إلى جانب المهاجم، فقد أصبح لدينا مستخدم خلفي بصلاحيات مسؤول على خادم FileBrowser.
افتح متصفح الويب المفضل لديك في وضع التصفح الخاص للتأكد من أنك لا تستخدم أيًا من وسائل مصادقة المسؤول. انتقل إلى localhost:8080 وسجّل الدخول ببيانات اعتماد المستخدم الخلفي oui/oui.
تهانينا! أصبح لديك الآن إمكانية الوصول إلى نظام ملفات خادم FileBrowser وبالتالي إلى جميع ملفات مستخدمي الخادم!
ونظرًا لأن FileBrowser منصة رائعة بها الكثير من الميزات، يمكنك تشغيل نافذة طرفية بالضغط على زر "toggle shell"... جرب كتابة whoami، وافعل ما تشاء بصلاحيات root :)
لكي يتمكن المستخدم الخلفي من استخدام أوامر الصدفة، يجب التصريح بها صراحةً في الحمولة. انظر إلى
index.htmlلإضافة ما يخصك!
تم تصحيح الثغرة بدءًا من الإصدار v2.18.0. المعلومات حول ذلك متاحة على GitHub الخاص بالمشروع. لم يكن نشر التصحيح مكلفًا للغاية، إذ تطلّب تغيير 6 أسطر فقط في ملف برنامج واحد. وبما أن الثغرة نشأت عن فشل في التحليل (انظر وصف الثغرة)، فقد كان كافيًا التأكد من تحليل أي طلب بصيغة application/json قبل معالجته لأي شيء آخر.
تم إنجاز هذا العمل كجزء من مقرر أمن نظم المعلومات الذي يُدرَّس في السنة الأخيرة من تخصص هندسة نظم المعلومات في Grenoble INP - Ensimag, UGA.