
استغلال CVE-2018-18925، وهو تنفيذ أكواد عن بُعد ضد أداة Git المستضافة ذاتيًا: Gogs.
استغلال CVE-2018-18925 هو تنفيذ تعليمات برمجية عن بُعد ضد أداة Git المُستضافة ذاتيًا: Gogs.
Gogs مبني على إطار عمل Macaron. نظام إدارة الجلسات مشابه جدًا لما يفعله PHP. يتم تعيين معرف الجلسة في ملف تعريف الارتباط إلى ملف على نظام الملفات. عندما يستقبل خادم الويب طلبًا مع معرف جلسة (كملف تعريف ارتباط)، يبحث عن الملف على نظام الملفات.
الثغرة هي اجتياز بسيط للدليل عند استرجاع الملف المستخدم للجلسة على نظام الملفات. يمكنك مثلاً تعيين ملف تعريف الارتباط i_like_gogits إلى ../../../../../../etc/passwd للحصول على خطأ من الخادم.

لاستغلال تجاوز الجلسة، سنحتاج إلى طريقة لرفع ملف مصمم خصيصًا، ثم سنستخدم هذا الملف كمعرف جلسة خاص بنا، ويمكننا إنشاء ملف معرف جلسة مصمم خاص بنا باستخدام https://github.com/RyouYoo/CVE-2018-18925/blob/main/main.go.
go run main.go
عند إنشاء نسخة من المستودع محليًا، يضع Gogs الملفات في /data/gogs/data/tmp/local-repo/[REPO_ID]/[FILENAME] (يتم إنشاء هذا المستودع فقط عند استخدام وظيفة "رفع ملف").

حيث [FILENAME] هو اسم الملف الذي ترفعه و [REPO_ID] هو معرف المستودع الذي يمكن العثور عليه باستخدام رابط Fork:

حيث 5 هو معرف المستودع.
افتراضيًا، يتم تخزين الجلسات في /data/gogs/data/sessions/. لذلك، يمكنك استخدام المسار النسبي التالي لمعرف جلسة الخاص بك: ../tmp/local-repo/[REPO_ID]/[FILENAME]. باستخدام هذا المسار في ملف تعريف الارتباط i_like_gogits الخاص بك، يجب أن يتم تسجيل الدخول كـ administrator.

للحصول على RCE، يمكنك استخدام وظيفة git hooks في مستودع معين لتشغيل نص شل.

في pre-receive قم بحقن الكود الخاص بك:

ثم قم بعمل طلب دفع (push)، باستخدام git أو وظيفة إنشاء ملف لتنفيذ الخطاف.