
GitHub RCE عبر حقن خيار الدفع X-Stat
لأغراض تعليمية وأبحاث أمنية مرخصة فقط.
لا تستخدم ضد أي نظام دون إذن كتابي صريح.
CVE-2026-3854 هي ثغرة تنفيذ تعليمات برمجية عن بُعد في خط أنابيب الدفع git في GitHub Enterprise Server (و GitHub.com).
عندما يقدم عميل خيارات الدفع (git push -o)، يقوم كود Ruby الداخلي لـ GitHub ببناء رأس X-Stat عن طريق ربط كل قيمة خيار بفاصلة منقوطة كمحددات للحقول. نظرًا لإدراج القيم حرفيًا (بدون تعقيم)، يمكن للمهاجم تضمين فواصل منقوطة في خيار دفع لحقن أزواج مفتاح-قيمة تعسفية في الرأس وتجاوز الإعدادات الحساسة للأمان — مما يؤدي في النهاية إلى RCE غير معزول كمستخدم git.
X-Stat: repo_id=12345;user_id=alice;rails_env=production;...;push_option_0=<USER INPUT>
حقن normal_value;rails_env=staging كقيمة خيار الدفع يتحول إلى:
...;push_option_0=normal_value;rails_env=staging
يأخذ المحلل آخر حدوث لكل مفتاح، لذا يصبح rails_env الآن staging (غير معزول)، متجاوزًا القيمة الشرعية production التي تم تعيينها سابقًا.
list[str] / dict[str, str])python3 exploi-git.py
يقوم البرنامج النصي بتشغيل ثلاثة عروض توضيحية متتالية بالكامل في الذاكرة — لا اتصالات شبكة، ولا أوامر شل، ولا كتابة ملفات:
| العرض | ما يظهره |
|---|---|
| 1 | حقن فاصلة منقوطة أساسي لتجاوز rails_env |
| 2 | سلسلة RCE المفاهيمية كاملة بثلاث خطوات |
| 3 | السلوك المصحح — يتم ترميز الفواصل المنقوطة بنسبة مئوية ويتم تحييد الحقن |
أصلحت GitHub الثغرة عن طريق ترميز الفواصل المنقوطة بنسبة مئوية في قيم خيارات الدفع قبل إدراجها في رأس X-Stat:
normal_value;rails_env=staging → normal_value%3Brails_env=staging
هذا يجعل الفاصلة المنقوطة جزءًا حرفيًا من القيمة ويكسر الحقن.
تم توفير هذا المستودع لأغراض تعليمية فقط ودعم الأبحاث الأمنية المرخصة. لا يتحمل المؤلف (المؤلفون) أي مسؤولية عن سوء الاستخدام. احصل دائمًا على إذن كتابي صريح قبل الاختبار ضد أي نظام لا تملكه.