
حل بديل لتعطيل CLI للتخفيف من SECURITY-3314/CVE-2024-23897 و SECURITY-3315/CVE-2024-23898
= تخفيف الثغرات SECURITY-3314/SECURITY-3315
يوثق هذا المستودع إجراءات التخفيف التي تمنع استغلال الثغرات SECURITY-3314 و SECURITY-3315 على الحالات المتأثرة.
== نظرة عامة
يجب تعطيل الوصول إلى واجهة سطر الأوامر (CLI). يجب اتخاذ كلا الخطوتين التاليتين:
== الإرشادات
=== تعطيل نقطة نهاية CLI
إذا كان Jenkins قيد التشغيل حاليًا، قم بتنفيذ البرنامج النصي المقدم disable-cli.groovy في https://www.jenkins.io/doc/book/managing/script-console/[وحدة التحكم النصية (Script Console)].
سيؤدي القيام بذلك إلى إزالة نقطة نهاية HTTP الخاصة بـ CLI حتى يتم إعادة تشغيل Jenkins.
قم بإنشاء https://www.jenkins.io/doc/book/managing/groovy-hook-scripts/[نص ربط Groovy (Groovy Hook Script)] بعد التهيئة (Post-Initialization) يحتوي على محتويات disable-cli.groovy لضمان تنفيذ البرنامج النصي كلما تم إعادة تشغيل Jenkins.
==== التأكيد
لتأكيد عمل البرنامج النصي، انتقل إلى Manage Jenkins » Jenkins CLI.
بدون تطبيق التخفيف، تظهر وثائق CLI العامة بما في ذلك نظرة عامة على أوامر CLI المتاحة. مع تطبيق التخفيف، يظهر خطأ HTTP 404 Not Found.
=== تعطيل منفذ SSH
يوفر https://plugins.jenkins.io/sshd/[الملحق الإضافي لخادم SSH (SSH Server Plugin)] الوصول إلى واجهة CLI الخاصة بـ Jenkins عبر SSH. هذا ملحق إضافي كانت وظائفه جزءًا من نواة Jenkins سابقًا، لذا قد يكون مثبتًا حتى لو لم تقم بتثبيته صراحةً.
انتقل إلى Manage Jenkins » Security وتأكد من أن إعداد SSHD Port في قسم SSH Server مضبوط على Disable.
ملاحظة: يُوصى بذلك حتى لو اخترت تعطيل الملحق الإضافي أو إلغاء تثبيته، حيث قد تقوم وظائف إدارة الملحقات بإعادة تثبيت الملحق الإضافي أو إعادة تمكينه لضمان تلبية تبعيات الملحقات.
بدلاً من ذلك، يمكنك إضافة المقتطف التالي إلى نهاية البرنامج النصي disable-cli.groovy:
// تعطيل وصول CLI عبر الملحق الإضافي لخادم SSH
if (j.getPlugin('sshd')) {
hudson.ExtensionList.lookupSingleton(org.jenkinsci.main.modules.sshd.SSHD.class).setPort(-1)
}
==== التأكيد
ليست هناك حاجة إلى تهيئة صريحة عند استخدام خيار واجهة المستخدم المدعوم لتعطيل منفذ SSH، ولكن يمكنك محاولة الاتصال بمنفذ SSH CLI الذي تم تكوينه سابقًا.
النتيجة المتوقعة هي فشل إنشاء الاتصال.
لاحظ أنه لا يمكن استخدام CLI عبر SSH بدون مصادقة، لذا ليس كل خطأ دليلاً على تعطيله بنجاح.
هذه أمثلة على نتيجة متوقعة (آمنة) (بافتراض أن المنفذ 2222 قد تم تكوينه سابقًا):
$ ssh -p 2222 jenkins.example.org
ssh: connect to host jenkins.example.org port 2222: Connection refused
$ ssh -p 2222 jenkins.example.org
kex_exchange_identification: read: Connection reset by peer
Connection reset by … port 2222