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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
gitlab-gitea-import-ssrf — GitLab - عالي - استيراد Gitea عبر HTTPS SSRF - إسقاط دبوس UrlBlocker | Kitploit
أدوات/GitHubGitHub/abraxas/gitlab-gitea-import-ssrf
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبأمن الويباختبار الاختراقمختبرات وتدريب عملي
GitHubabraxas/gitlab-gitea-import-ssrf

gitlab-gitea-import-ssrf

GitLab - عالي - استيراد Gitea عبر HTTPS SSRF - إسقاط دبوس UrlBlocker

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

الأكثر شعبية

عرض الكل →

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

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

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

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

Abraxas Labs - gitlab-gitea-import-ssrf

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  gitlab-gitea-import-ssrf

gitlab-gitea-import-ssrf

GitLab CE 19.4.1 - GitLab Inc.

استيراد Gitea يستدعي UrlBlocker.validate! مرة واحدة، ثم بالنسبة إلى https يتخلص من URI المثبّت على IP ويسلّم Faraday اسم المضيف الأصلي. يتحقق Octokit UrlValidation مرة أخرى ولا يعيد كتابة env[:url]. أعد ربط الاسم بين هذين الاستعلامين وسيقوم GitLab بعمل GET على loopback كما لو كان Gitea. تعود JSON الخاصة بقائمة المستودعات عبر GET /import/gitea/status.json. تحتفظ عمليات استيراد HTTP بالتثبيت. يتم حظر https://127.0.0.1 المباشر.

مستخدم مسجّل الدخول يمكنه فتح استيراد Gitea في مساحته الشخصية يمكنه جعل GitLab يجلب مضيفًا يعيد ربطه بـ loopback، ويحصل على المحتوى.

IDلا يوجد CVE بعد
CWECWE-918، CWE-367
CVSSHigh: 7.7 CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:L/A:N
المنتجGitLab CE
المتأثر19.4.1-ce.0 (26212baacadb على شجرة v19.4.1-ee)
المصادقةمستخدم موثّق، استيراد Gitea، مساحة شخصية
الترخيصGNU Affero GPL v3.0
المختبر127.0.0.1 فقط

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

اضبط Gitea Host URL على https://<name-they-control>/. يسمح UrlBlocker بأول سجل A عام. تحتفظ client_options الخاصة بـ HTTPS باسم المضيف هذا. أعد الربط بـ 127.0.0.1. يقوم Faraday بعمل GET على الـ catcher على loopback الخاص بعامل GitLab. provider_repos في status.json هو ما أعاده الـ catcher.

على omnibus الكل في واحد، هذا يعني Workhorse وPuma والمصدّرات وأي شيء آخر يستمع على العامل. ليس RCE على المضيف. ليس بدون مصادقة. يبقى HTTP Host URL على IP المثبّت.

نفس المنتج، بقايا شقيقة: Gitaly fetch omits resolved_address، webhook 0.0.0.0/8.

كيف وجدته

قرأت ملاحظات التصحيح الخاصة بـ 23 سبتمبر 2026 لإصدارات 19.4.1 / 19.3.3 / 19.2.7 أولاً، ثم شجرة v19.4.1-ee. ثغرات CI regex RCE وMR diff XSS وWorkhorse file.path read مغلقة على هذا الإصدار. لم يكن استيراد SSRF مكتملاً.

Import::GiteaController#client_options هو البقايا:

host: verified_url.scheme == 'https' ? provider_url : verified_url.to_s,

يستخدم HTTP verified_url (IP). يستخدم HTTPS provider_url (الاسم الذي كتبه المستخدم). يبني LegacyGithubImport::Client نقطة نهاية Octokit api_endpoint من ذلك المضيف. يستدعي Gitlab::Octokit::UrlValidation الدالة validate! ثم @app.call(env) دون أي إعادة كتابة.

قمت بتشغيل gitlab/gitlab-ce:19.4.1-ce.0 الجاهز. الطلبات المحلية معطّلة. شهادة CA الخاصة بالمختبر في /etc/gitlab/trusted-certs لأن Faraday ssl.verify تساوي true. DNS لـ gitea.lab: الاستعلامات 1-2 تعيد 1.1.1.1، والاستعلامات اللاحقة تعيد 127.0.0.1. يتشارك الـ catcher شبكة GitLab netns على :443. أعاد GET /import/gitea/status.json قيمة provider_repos باسم GITLAB-GITEA-IMPORT-SSRF-WITNESS. سجل الـ catcher: GET /api/v1/user/repos peer=127.0.0.1 host=gitea.lab.

https://127.0.0.1/ المباشر: "Specified URL cannot be used". بقي http://gitea.lab/ على التثبيت ولم يُعد الشاهد.

المنعطفات الخاطئة المسجّلة مسبقًا: /users/sign_in مع Accept: application/json يعيد 404 (HTML يعيد 200)؛ كلمة مرور البذرة CveLabRoot9! مرفوضة لأنها تحتوي على root؛ ربط CA بـ bind-mount ro يعطي EROFS بعد أن يربط reconfigure الملف؛ أول استعلامين ثم loopback في الاستعلام الثاني يجعل UrlValidation يحظر قبل أن يتصل Faraday. وضع الأزواج (فردي عام، زوجي loopback) هو ما نجح. reverse shell. مسرحية. الدليل هو الشاهد في status.json بالإضافة إلى peer الخاص بالـ catcher.

المختبر

cd lab
./run.sh

الهدف فقط http://127.0.0.1:18400. يحتاج GitLab CE إلى عدة GB من RAM. الإقلاع الأول بطيء. مختبر مصرّح به فقط.

status.json status=200 ... provider_repos ... GITLAB-GITEA-IMPORT-SSRF-WITNESS
catcher GET /api/v1/user/repos peer=127.0.0.1 host=gitea.lab status=200 witness=True
negative-a https://127.0.0.1 blocked
negative-b http://gitea.lab no-witness
SUCCESS GITLAB-GITEA-IMPORT-SSRF status.json mode=pairs http=200 GITLAB-GITEA-IMPORT-SSRF-WITNESS

البقايا

def client_options
  verified_url, provider_hostname = verify_blocked_uri
  {
    host: verified_url.scheme == 'https' ? provider_url : verified_url.to_s,
    api_version: 'v1',
    hostname: provider_hostname
  }
end

استخدم verified_url.to_s لـ https بالطريقة نفسها التي يستخدمها HTTP بالفعل. أعد كتابة env[:url] في Octokit UrlValidation إلى IP المثبّت.

المراجع

  • gitlab.com/gitlab-org/gitlab وسم v19.4.1-ee
  • gitea_controller.rb · legacy_github_import/client.rb · octokit/url_validation.rb
  • نفس المنتج: gitlab-gitaly-fetch-ssrf · gitlab-webhook-0net-ssrf
  • CWE-918 · CWE-367

الترخيص

GNU Affero GPL v3.0. راجع LICENSE. مختبر loopback فقط. دون أي ضمان.

تنزيل الأداة