الأمن · 2 نوفمبر 2026
أخطاء في محرك التعبيرات النمطية لغة Ruby تسبب ثغرات أمنية حرجة في GitLab
أصدر فريق Ruby الإصدارات 4.0.9 و3.4.12 و3.3.13 لمعالجة ثلاثة أخطاء في محرك التعبيرات النمطية Onigmo، والتي قد تسمح بتنفيذ رموز برمجية ضارة على الخوادم المتضررة.
تعتبر الثغرات التي ظهرت في GitLab خلال الأسابيع الماضية هي الحالة الأبرز لهذه المشكلة، حيث يعتمد GitLab على لغة Ruby. وتتأثر جميع تطبيقات Ruby التي تنشئ تعبيرات نمطية من مدخلات خارجية، بينما لا يواجه المستخدمون الذين يستخدمون أنماطاً مكتوبة ذاتياً أي مخاطر وفقاً لفريق Ruby. وتحدث هذه الأخطاء أثناء عملية تجميع النمط إلى برنامج داخلي قبل تطبيقه على النص، وليس أثناء عملية المطابقة.
حدد الباحث الأمني Johan Carlsson أربع ثغرات في GitLab عبر برنامج مكافآت الثغرات، وهي CVE-2026-89078 وCVE-2026-93577 بقيمة 9.9 وفق مقياس CVSS، بالإضافة إلى CVE-2026-97229 وCVE-2026-110264 بقيمة 10.0، وكلاهما يمكن استغلاله دون تسجيل دخول. قامت GitLab بإغلاق هذه الثغرات في الفترة ما بين 23 سبتمبر و21 أكتوبر من خلال إصلاح نسخة Ruby المرفقة، وشمل التحديث الأخير جميع إصدارات GitLab منذ إصدار 7.0 في عام 2014.
ربط فريق Ruby الثغرات الأربع بثلاثة أخطاء تقنية: تحرير مزدوج للذاكرة عند قراءة النمط في CVE-2026-89078، وتجاوز سعة عدد صحيح عند حساب حجم البرنامج المجمع في CVE-2026-93577 وCVE-2026-97229، وتجاوز العدادات الداخلية في الأنماط ذات التكرارات الكثيرة في CVE-2026-110264.
لم تكن جميع الإصلاحات جديدة، حيث تم تصحيح تحرير الذاكرة المزدوج في فرع التطوير منذ مايو 2025، بينما تم إصلاح عدادات CVE-2026-110264 في أبريل 2026، وإصلاح حجم البرنامج في سبتمبر 2026. وصل إصلاح حجم البرنامج إلى الإصدار 4.0.8 في 22 أكتوبر كجزء من تحديث روتيني دون الإشارة إلى الأمن، ثم ظهر الإصدار 4.0.9 في اليوم التالي بالإصلاح الأخير، بينما حصلت الفروع المستقرة 3.4 و3.3 على جميع الإصلاحات الثلاثة معاً. وتجدر الإشارة إلى أن الإصدار 3.3 يتلقى عادةً تصحيحات أمنية فقط، لكن الإصدار 3.3.13 صدر كاستثناء بسبب تعيين ثغرات CVE من قبل GitLab، بينما لا توجد تحديثات للإصدار 3.2 وما قبله.
في أسوأ الحالات، يمكن للمهاجم تشغيل رمز برمجى بصلاحيات عملية Ruby، مما يمنحه الوصول إلى قاعدة البيانات والأسرار البيئية ونظام الملفات، أو التسبب في تعطل العملية مما يؤدي إلى هجوم حجب الخدمة دون تسجيل دخول. ولم تبلغ GitLab أو Ruby عن أي هجمات نشطة حتى الآن.
أوضح فريق Ruby أن ميزة المهلة الزمنية الموصى بها في التوثيق لا تحمي من هذه الثغرات لأنها تقطع المطابقة التي تستغرق وقتاً طويلاً، بينما تحدث هذه الأخطاء أثناء التجميع. كما أن تحديد طول النمط لا يوفر حماية موثوقة لأن بعض الأخطاء تحدث حتى مع الأنماط القصيرة. وينصح الفريق بعدم تجميع أنماط من مدخلات خارجية لمن لا يستطيع التحديث فوراً.
لم يطلب مشروع Ruby معرفات CVE خاصة به حتى الآن، انطلاقاً من وجهة نظر تعتبر تجميع الأنماط الخارجية غير آمن بطبيعته، وبالتالي تكمن الثغرة في التطبيق وليس في المفسر. ومع ذلك، يسعى الفريق لتوضيح هذا الموقف واتخاذ قرار بشأن استخدام CVEs مستقبلاً.