
عرض تجريبي مكتمل بذاته لاستغلال ثغرة RCE في GitLab عبر ثغرتين لتلف الذاكرة في محلل Oj الخاص بلغة Ruby من خلال عرض فروقات دفاتر الملاحظات.
يحتوي هذا المستودع على عرض توضيحي ذاتي الاحتواء لسلسلة GitLab notebook-diff RCE الموضحة في بحثنا. يبدأ حاوية GitLab 18.11.3 جديدة، وينشئ مستخدمًا عاديًا عبر واجهة HTTP العامة، ويشغّل الـ PoC ضد هذا المثيل.
التفاصيل التقنية: Going depthfirst: Achieving GitLab RCE via Two Ruby Memory Corruption Vulnerabilities
amd64)أولاً، قم ببناء بيئة GitLab جديدة:
./setup_env.sh
يزيل هذا السكربت حاوية العرض التوضيحي السابقة ووحدات التخزين الخاصة بها، ويشغّل GitLab، وينتظر حتى يصبح جاهزًا، وينشئ مستخدمًا عاديًا. قد يستغرق إقلاع GitLab الجديد عدة دقائق.
افتح طرفيتين. ابدأ مستمع الاسترجاع في الأولى:
./run_poc.sh listen 4555
شغّل الاستغلال في الثانية:
./run_poc.sh exploit 4555
عند وصول الاسترجاع، انتقل إلى طرفية المستمع ونفّذ أوامر مثل id أو whoami. يختلف زمن البحث عن ASLR بين التشغيلات.

يعرض GitLab فروقات دفاتر Jupyter notebooks عن طريق تمرير JSON المتحكم فيه من المستودع إلى Oj، وهو محلل JSON أصلي بلغة Ruby. تجمع السلسلة بين خطأين في المحلل: أحدهما يفسد حالة المحلل ويتحكم في النهاية بمؤشر استدعاء، بينما يكشف الآخر مؤشر heap يُستخدم لتضييق نطاق البحث عن ASLR. يحمّل الـ PoC جدول بحث محسوبًا مسبقًا، ويعثر على تخطيط المكتبة المطابق عبر طلبات HTTP العادية إلى GitLab، ويجعل عامل Puma يتصل مرة أخرى بالمستمع كمستخدم git.
استخدم هذا العرض التوضيحي فقط في بيئة المختبر المحلية المرفقة.