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 إلى المرفقات

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

الأكثر شعبية

عرض الكل →

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

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

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

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

Abraxas Labs - forgejo-restore-file-open

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

المقال التفصيلي: https://abraxaslabs.tech/research/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. استخدم المختبر .. وليس رابطًا رمزيًا
نقطة الوصول نفسها على رقع طلبات السحبيُعاد كتابة PatchURL في pull_request.yml بالطريقة نفسها، ثم uri.Open إلى repo/pulls/<n>.patchاستطلاعمُستنتج من restore.go GetPullRequests. استعاد المختبر الإصدارات فقط
قارئو المستودع المستعاد ينزّلون ملف المضيفGET /<owner>/<repo>/releases/download/<tag>/<name>استطلاعمُثبت مختبريًا باستخدام Basic للمستخدم labadmin على المستودع العام المستعاد
ملفات المضيف النموذجية: app.ini، INTERNAL_TOKEN، SECRET_KEY، كلمة مرور قاعدة البياناتيستطيع مستخدم forgejo قراءة شجرة الإعداداتاستطلاعمُستنتج. كان شاهد المختبر ملفًا مزروعًا بجوار النسخة الاحتياطية، وليس أسرارًا حية

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

كيف وجدته

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

مسارات خاطئة سُجّلت بالفعل: هروب من الانضمام إلى جذر التفريغ عبر DownloadURL مطلق؛ ترحيل حيّ لـ file:// LFI؛ 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 فقط. دون أي ضمان.

تنزيل الأداة