
يكتشف CVE-2026-19478 في GitLab CE/EE عبر قالب Nuclei غير مدمر يقوم بتشغيل استدعاء طريقة الحقل الاحتياطي في GraphQL عبر touch ويؤكد وجود الحالات الضعيفة دون استدعاءات مدمرة.
قالب كشف غير تدميري باستخدام Nuclei لثغرة CVE-2026-19478، وهي خلل حرج (CVSS 9.4) يتمثل في استدعاء طرق تعسفي دون مصادقة في واجهة برمجة تطبيقات GitLab GraphQL، تم إصلاحه بواسطة GitLab في 17 أغسطس 2026.
مخطط GraphQL الخاص بـ GitLab يدعم توجيهًا @gl_introduced(version: "X.Y.Z") يقيّد ظهور حقل لإصدار أدنى من GitLab. عندما يشير التوجيه إلى إصدار من النسخة قيد التشغيل، يقوم GitLab بإنشاء لاسم الحقل (غير المعروف بخلاف ذلك). يستدعي ذلك الحقل الاحتياطي مباشرةً على كائن Ruby الأساسي — و وما شابه — .
object.public_send(method_name)ProjectUserالنتيجة: يمكن لمهاجم غير مصادق يتمكن من الوصول إلى /api/graphql ويعرف fullPath لأي مشروع عام (أو اسم مستخدم أي ملف شخصي عام) استدعاء أي طريقة عامة لا تتطلب وسائط على ذلك الكائن. يشمل ذلك طرق القراءة فقط مثل touch، وكذلك الطرق التدميرية مثل destroy / delete، والطرق المغيّرة للحالة مثل deactivate / block / ban.
قالب هذا المستودع يستدعي touch فقط دائمًا (يحدّث updated_at ويعيد true) — انظر السلامة أدناه.
| المسار | المتأثر | الإصلاح |
|---|---|---|
| 18.2.x – 18.11.x | >= 18.2, < 18.11.11 | 18.11.11 |
| 19.0.x | < 19.0.8 | 19.0.8 |
| 19.1.x | < 19.1.6 | 19.1.6 |
| 19.2.x | < 19.2.4 | 19.2.4 |
الإصدارات ذاتية الاستضافة GitLab CE/EE فقط — لم تتأثر GitLab.com وGitLab Dedicated.
هذا القالب مُجرّد عمدًا من الجوانب الخطرة لمسح مجموعات الخوادم المصرح لك باختبارها:
touch فقط دائمًا عبر الحقل الاحتياطي (طريقة ActiveRecord تكتفي بتحديث updated_at وإرجاع true).destroy أو delete أو deactivate أو block أو ban — وجميعها يمكن الوصول إليها عبر الخلل نفسه وتدميرية فعليًا.root. إذا لم يمكن الوصول إلى أي منهما، يكتفي بالإبلاغ "غير مكتشف" بدلًا من التخمين.لا تعيد استخدام استعلام GraphQL في هذا القالب لاستدعاء طرق تغيّر الحالة ضد أنظمة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها.
| الخطوة | الطلب | الغرض |
|---|---|---|
| 1 | GET /api/v4/projects?visibility=public | العثور على مشروع عام لاستخدامه كهدف غير ضار |
| 2 | POST /api/graphql — touch @gl_introduced(version: "999.0.0") على ذلك المشروع | تشغيل محلل الحقل الاحتياطي؛ تعيد النسخة المعرّضة للخطر "touch": true |
| 3 (احتياطي) | POST /api/graphql — نفس الاستعلام ضد user(username: "root") | يُستخدم فقط إذا لم يتم العثور على مشروع عام في الخطوة 1 |
ترفض النسخة المصلحة الحقل غير المعروف فورًا ("... doesn't exist on type ...")، لذا يتطلب مطابق القالب إشارة touch الإيجابية و غياب رسالة الرفض تلك.
# single target
nuclei -t CVE-2026-19478.yaml -u https://gitlab.example.com
# validate the template itself
nuclei -t CVE-2026-19478.yaml -validate
# a list of targets, JSON output
nuclei -t CVE-2026-19478.yaml -l targets.txt -j -o results.json
يتطلب nuclei v3 (يستخدم هذا القالب كتلة بروتوكول http: ومستخرج json بأسلوب jq المقدَّم في محرك قوالب v3؛ لن يتم تحميله على nuclei v2.x).
[CVE-2026-19478] [http] [critical] https://gitlab.example.com/api/graphql
قم بالترقية إلى 18.11.11 أو 19.0.8 أو 19.1.6 أو 19.2.4 (أو أحدث). راجع ملاحظات إصدار التصحيح 19.2.4 الخاصة بـ GitLab للحصول على النشرة الكاملة.
يُنشر هذا القالب لأغراض أمنية دفاعية — لفحص البنية التحتية التي تملكها أو المصرح لك صراحةً باختبارها. تشغيله (أو PoC المرتبط) ضد أنظمة دون إذن يعد غير قانوني في معظم الولايات القضائية. لا يتحمل المؤلف أي مسؤولية عن سوء الاستخدام.