أعلن مشروع ألباين لينكس يوم 28 أكتوبر أن مهاجما حاول استغلال ثغرة حرجة في جيت لاب على خادم المشروع نفسه، بعد أسبوع من إصدار جيت لاب إصلاحا لها. والثغرة هي CVE-2026-97229، وبلغت درجة خطورتها 10.0 وفق مقياس CVSS، وتتيح لمهاجم تنفيذ تعليمات برمجية على خادم جيت لاب عبر تعبير نمطي مصمم خصيصا داخل إعدادات التكامل المستمر. ولم يعثر ألباين على دليل على نجاح الهجوم، لكنه لا يستطيع استبعاده، فأعاد بناء الخادم من الصفر وأعاد تعيين كلمات مرور جميع الحسابات.
وتكمن المفارقة في أن إصلاح جيت لاب عبارة عن رقع تطبق على لغة روبي المرفقة ضمن حزمه وصور الحاويات الرسمية. وبما أن صورة ألباين استخدمت روبي القياسية، فإن ترقية الخادم إلى الإصدار 19.3.6 في 22 أكتوبر لم تعالج الثغرة. وقال ألباين إن من يشغّلون جيت لاب على نسخة روبي خاصة بهم، سواء مبنية من المصدر أو داخل صورة حاوية خاصة، لا تكفيهم ترقية جيت لاب، بل عليهم كذلك الانتقال إلى روبي 3.3.13 أو 3.4.12 أو 4.0.9 أو أحدث. وعلى مستخدمي صورة alpinelinux/gitlab سحب الإصدار 19.3.6 مجددا.
ويستضيف الخادم gitlab.alpinelinux.org مستودع aports الذي تُبنى منه حزم ألباين. وبحسب المشروع، فإن الحزم المبنية بين 20 و24 أكتوبر، وإصدارات 21 أكتوبر، جاءت من تغييرات في aports جرى التحقق منها مقابل سجلات خارج جيت لاب. وتشمل تلك الإصدارات ملفات minirootfs التي تبنى منها صور دوكر الرسمية لألباين، ويمدد المشروع هذه الفحوص إلى 27 أكتوبر، تاريخ إغلاق الخادم. أما مفاتيح توقيع الحزم والإصدارات فلم تكن يوما على خادم جيت لاب.
كيف جرى الهجوم؟
ترقى ألباين الخادم في 13 أكتوبر إلى جيت لاب 19.3.4 بدل 19.3.5، وهو ما تصفه بأنه خطأ. وظل الخادم على هذا الإصدار، دون إصلاح 12 أكتوبر، حين بدأ حساب مسجل حديثا فحصه في 20 أكتوبر. وأرسل الحساب إعدادات تكامل مستمر مصممة لهذا الغرض يومي 20 و21 أكتوبر، فتسببت في تعطل عمليات العمل في جيت لاب ثماني مرات، وأدى الهجوم الرئيسي في 21 أكتوبر كذلك إلى أخطاء 502 وفشل مهام التكامل المستمر. وفي أربع من تلك الحالات، قطع المهاجم شوطا في الاستغلال ثم فشل في الخطوة التالية. كما نزّل المهاجم صورة حاوية جيت لاب الخاصة بألباين، وهو ما يرى المشروع أنه يوحي بأنه كان يضبط الاستغلال على البناء المحدد للخادم.
وحجب ألباين الحساب في 23 أكتوبر، وعاد المهاجم يومي 25 و26 أكتوبر محاولا الدخول مجددا لكن محاولاته فشلت. وفي 26 أكتوبر اكتشف المشروع أن الخادم ما زال عرضة للثغرة رغم ترقية 22 أكتوبر، فأغلقه في اليوم التالي أمام الجميع عدا المطورين وخوادم البناء وبدأ إعادة بنائه. واكتملت إعادة البناء في 28 أكتوبر، مع استبدال مفاتيح جيت لاب السرية، ويعمل الخادم الجديد على روبي 3.3.13 أو أحدث، ويجري اختباره قبل إعادة فتحه للعموم.
ما الذي يمكن استبعاده وما الذي لا يمكن؟
لم يجد ألباين ما يشير إلى تنفيذ شيفرة المهاجم على الخادم، فلم تظهر تأخيرات في اختبارات التوقيت، ولا ملفات أو مفاتيح أو خطافات أو عمليات غير متوقعة، ولا بيانات خاصة أُرسلت إلى المهاجم عبر طلبات ويب أو واجهات برمجية يمكن للمشروع رؤيتها. غير أنه يقر بأن الاستغلال الناجح لا يترك تعطلا ولا أثرا في سجلات الويب، وبأن بعض سجلات يوم الهجوم فُقدت، ومنها سجلات المهام الخلفية ونظام ملفات الحاوية القديمة، ولم يسجل ألباين ولا مزود الاستضافة الاتصالات الصادرة من الشبكة. ولأن الأدلة اللازمة لتأكيد التنفيذ لم تعد موجودة، عامل المشروع الخادم على أنه مخترق وأعاد بناءه لإزالة أي موطئ قدم قد يكون الاستغلال خلّفه.
وفي حال نجاح الهجوم، قد تكون البيانات التالية انكشفت: عناوين البريد الإلكتروني وأسماء جميع المستخدمين وعناوين الإنترنت الخاصة بهم، وبصمات كلمات المرور، وأسرار المصادقة الثنائية ومتغيرات التكامل والنشر المستمرين ورموز المشغّلات، وبيانات اعتماد الخطافات والتكاملات والنسخ المرآتية، ورموز الوصول الشخصية المخزنة على هيئة بصمات، والمستودعات الخاصة والمسائل وطلبات الدمج السرية. ولم يوضح ألباين، إلى جانب إعادة تعيين كلمات المرور وتجديد المفاتيح السرية، ما إذا كانت رموز المشغّلات ومتغيرات التكامل والنشر المستمرين ورموز الوصول وبيانات اعتماد التكاملات المخزنة على الخادم قد استُبدلت.
وللتحقق من حزمه، تأكد ألباين من أن كل تغيير أُضيف إلى aports بين 20 و22 أكتوبر وصل عبر دفع مسجل من مطور معروف، وذلك مقابل سجلات يقول إن المهاجم لا يستطيع الوصول إليها، هي نسخة مطور من المستودع وخوادم البناء الخمسة والأربعون جميعها. وكل حزمة بُنيت بين 20 و24 أكتوبر جاءت من تغييرات aports المنشورة على git.alpinelinux.org.
لماذا لم تعالج ترقية جيت لاب الثغرة؟
يستخدم جيت لاب لغة روبي لتجميع التعبيرات النمطية في إعدادات التكامل المستمر، ويقع الخلل الذي تقوم عليه الثغرة في Onigmo، محرك التعبيرات النمطية المدمج في روبي. وعالج إصدار جيت لاب الصادر في 12 أكتوبر المشكلة بترقيع روبي داخل حزمة لينكس وصور الحاويات الخاصة به، بينما صدرت الإصدارات المصححة من روبي نفسها في 22 و23 أكتوبر. ولأن ترقية جيت لاب لا تغير روبي الخاصة بالخادم، يبقى أي تثبيت على روبي قياسية معرضا للثغرة إلى أن تُحدّث روبي ذاتها، كما اكتشف ألباين. أما حزم جيت لاب الجاهزة لنظام لينكس وصور حاوياته الرسمية فتحمل روبي المرقعة، بخلاف التثبيتات المبنية من المصدر والصور التي تثبت روبي بمعزل عن ذلك كما فعلت صورة ألباين.
وحتى 29 أكتوبر، لا تدعو نشرتا إصدارات جيت لاب الصادرتان في 12 و21 أكتوبر مديري التثبيتات المبنية من المصدر إلى تحديث روبي. ولا يزال دليل التثبيت المبني من المصدر يذكر روبي 3.2 حدا أدنى، علما أن دعم هذا الإصدار انتهى في أبريل ولن يحصل على إصلاح.
أي خوادم جيت لاب معرضة للخطر؟
تقول نشرة جيت لاب إن الثغرة قد تتيح لمستخدم غير موثق تنفيذ تعليمات برمجية على الخادم في ظروف معينة، وقد جرى بالفعل ترقيع GitLab.com وGitLab Dedicated. وكانت شركة رابيد7 قد بنت استغلالا عمليا في بيئة اختبار ونشرت شيفرة إثبات المفهوم في 13 أكتوبر، ونفّذ الاستغلال أوامر بصلاحيات مستخدم git على صورة جيت لاب 19.4.1 الرسمية غير المرقعة، بينما لم تنفذ المدخلات نفسها على الصورة المرقعة 19.4.2.
ويتطلب هذا الاستغلال صلاحية كتابة مسبقة، إذ يجب على المهاجم رفع ملف .gitlab-ci.yml خبيث ومسار ملف بحروف UTF-8 إلى فرع في مشروع عام، ولا ينطبق هذا الشرط على الخوادم التي تسمح للمستخدمين الجدد بالتسجيل بأنفسهم وإنشاء المشاريع. وبحسب رابيد7، في المسار الذي اختبرته لا يكون غير موثق إلا طلب فحص التكامل المستمر الأخير، وتشير ملاحظات الكشف لدى جيت لاب إلى أن المهاجم يجب أن ينشئ مسار الملف أولا عبر واجهات المستودع المعتادة. ولا تعرف الشركة بعد كيف يتجنب الهجوم المذكور في البلاغ الأصلي المقدم إلى جيت لاب، وهو لا يزال سريا، خطوة الكتابة. ولم يوضح ألباين كيف وصلت إعدادات مهاجمه إلى جيت لاب، ولا ما إذا كان بإمكان الحسابات الجديدة على خادمه إنشاء مشاريع عامة. ولم تكن الثغرة ضمن كتالوج الثغرات المستغلة المعروفة لدى CISA حتى تحديث الكتالوج في 28 أكتوبر.
ما الذي ينبغي على مديري جيت لاب فعله؟
إصدارات 21 أكتوبر هي الأحدث في كل فرع. ففي الفرع 19.5 غير مدرج كمتأثر والأحدث 19.5.1، وفي الفرع 19.4 الإصلاح في 19.4.2 والأحدث 19.4.3، وفي الفرع 19.3 الإصلاح في 19.3.5 والأحدث 19.3.6، وفي الفرع 19.2 الإصلاح في 19.2.8 والأحدث 19.2.9، أما الفروع 19.1 و19.0 و18.11 فغير مدرجة كمتأثرة وأحدث إصداراتها 19.1.9 و19.0.10 و18.11.13. وتعالج هذه الإصدارات كذلك ثغرة تعبير نمطي منفصلة هي CVE-2026-110264.
وتختلف الخطوات بحسب طريقة التثبيت. فمستخدمو حزمة لينكس الرسمية أو الصور الرسمية يرقّون إلى أحدث إصدار في فرعهم. أما أصحاب التثبيتات المبنية من المصدر أو الصور التي تثبت روبي خاصة بها فعليهم ترقية جيت لاب وتحديث روبي إلى 3.3.13 أو 3.4.12 أو 4.0.9 أو أحدث، ومن يشغّل روبي 3.2 فعليه الانتقال إلى أحد هذه الإصدارات. وكانت نشرة جيت لاب حددت 19.3.4 إصدارا مصححا للفرع 19.3 عند صدورها في 12 أكتوبر، ثم عُدلت لتسمّي 19.3.5 وتدرج 19.3.4 ضمن المتأثرة، فعلى من بقي على 19.3.4 الانتقال إلى 19.3.6.
وإن تعذرت الترقية فورا، تقترح رابيد7 تقييد الوصول المجهول إلى المشاريع العامة، ومنع المستخدمين غير الموثوقين من إنشاء المشاريع العامة أو الكتابة إليها، أو حجب مسار فحص التكامل المستمر. وتقول الشركة إن هذه الخطوات تغطي مسار استغلالها وحده ولا تعالج مصرّف التعبيرات النمطية الضعيف. ونشرت جيت لاب ست قواعد كشف بصيغة Sigma لمحاولات الاستغلال ضد الخوادم المدارة ذاتيا، منها أربع قواعد تصنفها تجريبية تبحث عن أنماط عدائية في تحذيرات التعبيرات النمطية وطلبات ciLint عبر GraphQL، ومسارات ملفات طويلة بحروف غير لاتينية، وتقارير تعطل روبي المرتبطة بـOnigmo.
وتحذر إرشادات القواعد من أن الاستغلال الناجح قد لا يترك تعطلا، وتوصي بالبحث عن ملفات يملكها مستخدم git في /tmp وعمليات فرعية غير متوقعة لـPuma أو Sidekiq واتصالات صادرة وتعديلات في crontab أو مفاتيح SSH لهذا المستخدم. وعند ظهور علامات على تنفيذ شيفرة، يجب اعتبار الخادم مخترقا وتدوير الأسرار في gitlab-secrets.json وجميع متغيرات التكامل والنشر المستمرين ورموز المشغّلات ورموز الوصول، مع تقييد من يستطيع إنشاء الحسابات ورموز الوصول الشخصية.
ما الذي ينبغي على مستخدمي ألباين فعله؟
سيحتاج أصحاب الحسابات إلى تعيين كلمة مرور جديدة عبر خيار نسيان كلمة المرور في صفحة الدخول عند إعادة فتح gitlab.alpinelinux.org. ورصد ألباين كذلك محاولات دخول آلية ضد خادمه باستخدام كلمات مرور مسربة من مواقع أخرى، وعلى من استخدم كلمة مروره هناك في مواقع أخرى تغييرها. وعلى مستخدمي صورة alpinelinux/gitlab سحب alpinelinux/gitlab:19.3.6 مجددا، فالصورة المنشورة في 27 أكتوبر تحتوي روبي 3.3.13، بينما أي صورة 19.3.6 سُحبت قبل ذلك وكل الوسوم الأقدم معرضة للثغرة.
وتحمل حزم روبي في ألباين الإصلاح بالفعل، وهي روبي 3.4.12 في ألباين 3.22 و3.23 و3.24 وedge، وروبي 3.3.13 في ألباين 3.21، ويكفي تشغيل apk upgrade لتثبيتها. ويقول القائمون على روبي إن الخلل لا يهم إلا البرامج التي تجمّع تعبيرا نمطيا من نص يتحكم فيه المهاجم، وإن إعداد Regexp.timeout في روبي لا يحمي منه.































