
تحليل استغلال CVE-2023-22518 لخادم Atlassian Confluence يغطي الإعداد، ومقارنة ملفات JAR، والسبب الجذري، والاستعادة غير المصرح بها لاستعادة وصول المسؤول.
Exploit-CVE-2023-22518 CVE-2023-22518 في Confluence
CVE-2023-22518 : تم وصف هذه الثغرة بأنها “ثغرة التفويض غير الصحيح في قاعدة بيانات وخوادم Confluence”. يؤثر الخطأ على الإصدارات المحلية (On-premises) من منتجات Atlassian.
قم بإعداد البيئة باستخدام الإصدار المتأثر 8.0.4 رابط التحميل : https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-8.0.4-x64.exe

اختر Trial Installation، ثم انقر على الرابط للحصول على مفتاح تجربة مجاني. بعد ذلك قم بإعداد cluster : اختر non-cluster

ثم انتقل إلى إعداد قاعدة البيانات -> اختر MySQL

اتبع الإرشادات :
قم بتنزيل برنامج تشغيل MySQL
ضع ملف .jar في /home/lily/atlassian/confluence/confluence/WEB-INF/lib
أعد تشغيل Confluence وتابع عملية الإعداد.
قم بتكوين قاعدة البيانات، وإنشاء مستخدم وكلمة مرور لها
CREATE DATABASE securedb CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'admin123'@'localhost' IDENTIFIED BY 'supersecure';
GRANT ALL PRIVILEGES ON securedb.* TO 'admin123'@'localhost';
GRANT SUPER ON *.* TO 'your_username'@'your_host';
FLUSH PRIVILEGES;
بعد ذلك edit /etc/mysql/my.cnf . أضف الأسطر التالية :
transaction-isolation = READ-COMMITTED
log_bin_trust_function_creators = 1

بعد ذلك أعد تشغيل MySQL وConfluence. ثم انتقل إلى صفحة الإعداد على localhost:8090 واستخدم قاعدة البيانات التي تم إنشاؤها لملء البيانات.

تحقق من نجاح الاتصال ، انقر فوق Next . بعد ذلك قم بالتسجيل .

** قارن بين ملفي jar للإصدارين في IntelliJ **

SystemAdminOnly : هي ميزة تقيّد وظائف الإدارة لحسابات المسؤولين فقط. يساعد ذلك في ضمان أن الحسابات المصرح بها فقط هي القادرة على تنفيذ العمليات المهمة التي تؤثر على النظام.
ضع نقطة توقف عند validate() في RestoreAction.class

الدالة التي تحفظ الملف المرفوع هي getRestoreFileFromUpload

يُستخدم GetExportDescriptor لفك ضغط (unzip) وقراءة محتويات ملف zip


ومع ذلك، بعد التصحيح (debug)، لم يتم العثور على السبب الجذري للثغرة.
السبب الموصوف في CVE هو ثغرة في التفويض. هذا يقودنا إلى توجيه الانتباه إلى الأبحاث حول ثغرات لغة جافا أثناء قيام المطورين بتحديد الصلاحيات.
حوّل الانتباه إلى ملف struts.xml، حيث يحتوي هذا الملف على معلومات حول الإجراءات والتوجيه بناءً على مساحات الأسماء وكذلك المعترضات (interceptors).



نلاحظ أن namespace /json يعزز وظائف namespace /admin. لذلك، يمكن الوصول إلى المسارات التي تم إنشاؤها لـ namespace /admin عبر namespace /json.
في سياق namespace /json، تتضمن عملية توجيه الطلب المرور عبر سلسلة من المعترضات (interceptors). أحد هذه المعترضات، المسمى WebSudoInterceptor، يقوم بالتحقق بناءً على URI للطلب.
على وجه التحديد، ينفذ WebSudoInterceptor خطوات الفحص التالية:
إذا كان مسار الطلب هو /authenticate.action فسيتم تجاهله. إذا كان مسار الطلب هو /admin، فسيتحقق مما إذا كانت خاصية WebSudoNotRequired فارغة أم لا.
إذا تم إرسال طلب إلى '/json'، فسيتم توجيه الطلب إلى '/json/action' وتحويله إلى '/setup/action' و'admin/action'. في هذا CVE، المسار الضعيف هو '/json/setup-restore.action?synchronous=true'
التقط الطلب باستخدام Burp Suite ، GET /json/setup-restore.action . ومع ذلك، تم استلام استجابة "Method Not Allowed response" . جرّب إرسال POST /json/setup-restore.action?synchronous=true وحصلت على استجابة 200.


ارفع الملف xmlexport-200123123001.zip

أرسل واستلم الاستجابة

الآن يمكننا تسجيل الدخول باستخدام account admin :admin

وتكون النتيجة كما يلي
