Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
cve-2026-85706 — أداة استغلال PoC بلغة Python للثغرة CVE-2026-85706، وهي قراءة ملفات عشوائية دون مصادقة في GitLab CE/EE عبر تجاوز ترميز المسار في Workhorse، مع تحليل مكتوب وبدائل للتجاوز. | Kitploit
أدوات/GitHubGitHub/guneykabel/cve-2026-85706
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبجمع المعلوماتالمحاكاة الافتراضية للأمانأمن الويباختبار الاختراق
GitHubguneykabel/cve-2026-85706

cve-2026-85706

أداة استغلال PoC بلغة Python للثغرة CVE-2026-85706، وهي قراءة ملفات عشوائية دون مصادقة في GitLab CE/EE عبر تجاوز ترميز المسار في Workhorse، مع تحليل مكتوب وبدائل للتجاوز.

عرض المستودع
4منذ 12س 9دلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

cve-2026-85706

قراءة ملف محلي عشوائي بدون مصادقة في GitLab CE/EE. يؤثر على 18.7–19.1.7، 19.2.0–19.2.5، 19.3.0–19.3.1. تم إصلاحه في 19.1.8 / 19.2.6 / 19.3.2 (2026-09-10). CVSS 10.0، ويُقال إنه استُغل فعليًا في البرية. التقرير الأصلي بواسطة s3ntago وهذا المستودع مجرد تدوينتي + PoC.

إخلاء المسؤولية

نُشر هذا الـ PoC لأغراض تعليمية وبحثية دفاعية فقط، لمساعدة المسؤولين والباحثين على فهم الثغرة واختبارها. شغّله حصريًا ضد الأنظمة التي تملكها أو لديك تفويض كتابي صريح لاختبارها. إذا كان نسختك ضمن النطاق المتأثر، توقف عن القراءة وقم بالترقيع إلى 19.1.8 / 19.2.6 / 19.3.2 أولًا.

كيف يعمل

ثلاثة نقاط نهاية للمستودع (POST :id/repository/commits، POST/PUT :id/repository/files/:file_path) تقع خلف requestBodyUploader الخاص بـ Workhorse. يقرأ معالج Rails المسار على القرص مباشرةً من حقل الطلب الخام file.path ويقوم بـ File.open له قبل أي مصادقة. لا يعمل كمصادقة لأن round-tripper الموقّع الخاص بـ Workhorse يرفق JWT صالحًا بكل طلب يمرره، لذا أي شيء يمر إلى وكيل API العام يجتاز هذا الفحص.

require_gitlab_workhorse!
Gitlab-Workhorse-Api-Request

السبب الوحيد لعدم كون هذا LFI فوريًا للجميع هو أنه يُفترض أن يقوم Workhorse بإعادة كتابة الطلب أولًا. لكن regex المسار الخاص به يطابق المسار المُهرَّب (EscapedPath() بالإضافة إلى نسخة path.Clean لا تفك ترميز %XX أبدًا)، بينما يقوم Puma بفك ترميز %XX قبل توجيه Grape. لذا قم بترميز النسبة المئوية لأي حرف من مقطع ثابت (%63ommits، %72epository، %66iles)، أو أضف شرطة مائلة زائدة، أو ألحق .json الذي يفوته regex الخاص بـ Workhorse، وسيظل Rails يوجه إلى المعالج المصاب. عدم تطابق الترميز هذا هو مكان تجاوز الحماية. (متغيرات //، /./، %2F، ; كهذه لا تعمل لأن path.Clean يطبّع الأولين و Puma يرفض %2F.)

ثم فقط أرسل بيانات وصفية لرفع مزوّرة غير موقّعة كمعاملات استعلام:

root@kitploit:~
POST /api/v4/projects/1/repository/%63ommits?file=&file.path=<ABSOLUTE_PATH>&file.size=1&Content-Type=application/x-www-form-urlencoded

file= الفارغ يفي بتحقق requires :file, WorkhorseFile (الفراغ يُحوَّل إلى nil). تحدث القراءة قبل المصادقة. الحصول على البايتات مرة أخرى هو الجزء الممتع: في فرع urlencoded يقوم المساعد بتشغيل Rack::Utils.parse_nested_query(File.read(path)) ويُدرج أخطاء المحلل في جسم الاستجابة 400. أي % غير متبوع برقمين سداسيين عشريين يرفع InvalidParameterError: invalid %-encoding (<raw file bytes>) ويعود محتوى الملف داخل رسالة الخطأ. فرع JSON (Oj) لا يسرب شيئًا، ولهذا يهم نوع المحتوى urlencoded هنا.

الإصلاح (master 0d9ce3e7، backports 1fe30154 / b43c8b26 / 0ff7b6b2) يضيف authenticate! إلى جميع نقاط النهاية الثلاث بالإضافة إلى خطوة /authorize المسبقة، ويثق فقط بـ UploadedFile المنتج من الوسيط للمسار/الحجم، ويتوقف عن إرجاع أخطاء المحلل. أُدخل الخطأ في ديسمبر 2025، ولهذا يبدأ النطاق المتأثر من 18.7.

الاستخدام

root@kitploit:~
./exploit.py --url http://localhost:8080 --file /etc/hostname
./exploit.py --url http://localhost:8080 --file /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

يتنقل السكربت عبر جميع أشكال التجاوز المُتحقق منها (مقاطع مُرمَّزة، شرطة مائلة زائدة، .json؛ نقاط نهاية commits + files، POST و PUT) ويصنّف كل استجابة حتى تتمكن من معرفة أين فشل الفحص في السلسلة. أهداف مُصرَّح بها فقط، بالطبع.

العيوب / القيود / الشروط المسبقة

  • لا يحدث الإرجاع إلا إذا كان الملف يحتوي على % غير متبوع بحرفين سداسيين عشريين.
  • regex التسريب جشع ((.*) حتى آخر ) في الجسم). جيد ضد خطأ JSON الافتراضي، لكنه سيلتقط أكثر من اللازم إذا غلّف شيء ما الاستجابة في HTML. الإصلاح الصحيح هو تحليل حقل رسالة JSON.
  • تحتاج واجهة commits API إلى معرّف مشروع قابل للقراءة مجهولًا (كتلة before تُرجع 404 بخلاف ذلك).

المراجع

  • commit الإصلاح (master): https://gitlab.com/gitlab-org/gitlab/-/commit/0d9ce3e758a85f0690be751e213625f7902c0361
  • ملاحظات إصدار الترقيع: https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-3-2-released/
  • التدوينة: https://securityonline.info/gitlab-vulnerabilities-cve-2026-85706-cvss-10/
تنزيل الأداة