Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
forgejo-restore-file-open — Forgejo 16.0.5 - عالي - عن بُعد - قراءة ملف - restore-repo يتبع file:// من جهة dump إلى المرفقات | Kitploit
أدوات/GitHubGitHub/abraxas/forgejo-restore-file-open
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبجمع المعلوماتاختبار الاختراقمختبرات وتدريب عملي
GitHubabraxas/forgejo-restore-file-open

forgejo-restore-file-open

Forgejo 16.0.5 - عالي - عن بُعد - قراءة ملف - restore-repo يتبع file:// من جهة dump إلى المرفقات

عرض المستودع
3منذ 4 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

Abraxas Labs - forgejo-restore-file-open

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  forgejo-restore-file-open

forgejo-restore-file-open

الفئة: قراءة ملفات الوصول: محلي

Forgejo 16.0.5 (8d24b7d) - Forgejo

forgejo restore-repo لنسخة احتياطية غير موثوقة يعيد كتابة روابط أصول الإصدارات باستخدام filepath.Join(baseDir, download_url) الخام ويضيف البادئة file://. لا يزال uri.Open ينفذ os.Open على ذلك المسار. --units الفارغ يستعيد الإصدارات. أضاف Gitea 1.27.0 الدالة localFileURL وتخطى تهريب المدخلات. تلك الدالة المساعدة غير موجودة هنا.

استعادة المشغّل لنسخة احتياطية غير موثوقة تنسخ ملفاً على المضيف يمكن لمستخدم forgejo فتحه إلى مرفق إصدار.

المعرّفلا يوجد CVE بعد
الفئةقراءة ملفات
الوصولمحلي (المشغّل forgejo restore-repo لنسخة احتياطية غير موثوقة)
CWECWE-22 / CWE-73
CVSSمرتفع: 7.3 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N
المنتجForgejo
المتأثرحتى v16.0.5 (8d24b7d)؛ استعادة المشغّل المحلي
المصادقةاستعادة المشغّل المحلي لنسخة احتياطية غير موثوقة
الترخيصGNU Affero GPL v3.0
المختبر127.0.0.1 فقط

ما يمكن للمهاجم فعله

سلّم المشغّل دليل نسخة احتياطية (أو امتلك بالفعل INTERNAL_TOKEN ومساراً يمكن للخادم قراءته). تشمل الوحدات releases / release_assets.

الصلاحيةالطريقة / نقطة الوصولالاستطلاع / السلامة / التوافرمُثبت مختبرياً أو مُستنتج
قراءة ملف على المضيف يمكن لمستخدم forgejo فتحه، عبر .. خارج النسخة الاحتياطيةrelease.yml download_url: ../FORGEJO-FILE-WITNESS.txt؛ الاستعادة تجري الدمج، uri.Open ينفذ os.Open، تُخزَّن البايتات كـ witness.txtاستطلاع (سرية ملفات المضيف)مُثبت مختبرياً. جسم المرفق هو FORGEJO-RESTORE-FILE-OPEN-WITNESS. لم يُقدَّم الطُعم داخل النسخة الاحتياطية INSIDE-DUMP-NOT-HOST
النتيجة نفسها مع رابط رمزي مزروع داخل النسخة الاحتياطيةيبقى المسار المدمج تحت baseDir؛ os.Open يتبع الرابطاستطلاعمُستنتج من uri.Open file -> os.Open. استخدم المختبر ..، وليس رابطاً رمزياً
نقطة الوصول نفسها على رقع PRيُعاد كتابة pull_request.yml PatchURL بالطريقة نفسها، ثم uri.Open إلى repo/pulls/<n>.patchاستطلاعمُستنتج من restore.go GetPullRequests. استعاد المختبر الإصدارات فقط
قارئو المستودع المُستعاد يحمّلون ملف المضيفGET /<owner>/<repo>/releases/download/<tag>/<name>استطلاعمُثبت مختبرياً كـ labadmin Basic على المستودع العام المُستعاد
ملفات المضيف النموذجية: app.ini، INTERNAL_TOKEN، SECRET_KEY، كلمة مرور قاعدة البياناتيمكن لمستخدم forgejo قراءة شجرة الإعداداتاستطلاعمُستنتج. كان شاهد المختبر ملفاً مزروعاً بجوار النسخة الاحتياطية، وليس أسراراً حية

مغلق هنا: LFI الحي عبر POST /repos/migrate file:// (تم تعيين DownloadFunc؛ يتم فحص بادئة PatchURL للـ PR مقابل قاعدة HTTP للاستنساخ). هروب دمج جذر النسخة الاحتياطية عبر DownloadURL المطلق (في Go يبقى filepath.Join("/dump", "/etc/passwd") كـ /dump/etc/passwd). استعادة HTTP بدون مصادقة (CLI / رمز داخلي فقط). النسخ الاحتياطي dump الذي يحزم app.ini (أسرار بحكم التصميم، وضع الأرشيف 0600). ليس تصعيد صلاحيات على مستوى نظام التشغيل. ليس LFI عن بُعد.

كيف وجدته

كانت لدي فكرتان للاستعادة. تخيلت اختبار دمج Gitea المطلق أولاً في ذهني. لا يُسقط filepath.Join في Go وسيطاً ثانياً مطلقاً كما تفعل os.path.join في Python. المدخل العامل هو .. النسبي. دالة localFileURL في Gitea ليست في هذه الشجرة.

المنعطفات الخاطئة المسجلة مسبقاً: هروب دمج جذر النسخة الاحتياطية عبر DownloadURL مطلق؛ LFI الحي عبر migrate file://؛ X-Forgejo-Internal-Auth (الاستعادة هي CLI كمستخدم forgejo، وليس /api/internal)؛ معاملة استعادة HTTP كأنها عن بُعد بدون مصادقة؛ صدفة عكسية. مسرحية.

المختبر

python3 forgejo-restore-file-open-Abraxas-Labs.py

أو:

cd lab
./run.sh

الهدف فقط http://127.0.0.1:19340. الصورة codeberg.org/forgejo/forgejo:16.0.5. الشاهد FORGEJO-RESTORE-FILE-OPEN-WITNESS.

IOC asset name='witness.txt' ...
IOC download status=200 bytes=34 snippet=b'FORGEJO-RESTORE-FILE-OPEN-WITNESS\n'
SUCCESS forgejo-restore-file-open how=live ..-join file:// os.Open FORGEJO-RESTORE-FILE-OPEN-WITNESS

الإصلاح

احصر المسارات المدمجة تحت baseDir بعد EvalSymlinks (Gitea PR 38215 localFileURL). ارفض ... لا تتبع الروابط الرمزية من جهة النسخة الاحتياطية خارجها. أزل file:// من uri.Open باستثناء دالة مساعدة ذات جذر في النسخة الاحتياطية.

المراجع

  • codeberg.org/forgejo/forgejo وسم v16.0.5
  • restore.go · uri.go
  • الفئة نفسها على Gitea: gitea-restore-file-open
  • CWE-22 · CWE-73

الترخيص

GNU Affero GPL v3.0. انظر LICENSE. مختبر loopback فقط. لا ضمان.

تنزيل الأداة