
يعطّل النظام الفرعي Jenkins CLI/Remoting كإجراء تخفيفي ضد ثغرات تنفيذ الأكواد عن بُعد غير المصادق عليها SECURITY-218 وSECURITY-360، ويُطبَّق وقت التشغيل أو عبر سكربت init.
هذا التخفيف لم يعد ضروريًا اعتبارًا من Jenkins 2.54 وJenkins LTS 2.46.2. إذا قمت بتثبيت إصدار 2.54+/LTS 2.46.2+ من Jenkins من جديد، فإن CLI المستند إلى Remoting يكون معطلاً افتراضيًا. إذا كنت قد ثبّت إصدارًا أقدم من Jenkins ورقّيته إلى 2.54+ أو LTS 2.46.2+، فسيُطلب منك عبر مراقب إداري الانتقال إلى تكوين الأمان العام وتعطيل CLI المستند إلى Remoting. في كلتا الحالتين، لا حاجة للحلول البديلة التالية.
أو، إذا كنت تستخدم Jenkins 2.32+ أو 2.19.3+
(كما ذُكر في النشرة الأمنية الصادرة في 16 نوفمبر 2016)،
ولكن بإصدار أقدم من 2.54، يمكنك ببساطة استخدام خيار بدء التشغيل: -Djenkins.CLI.disabled=true
ملاحظة: نُشر هذا السكريبت في الأصل في نوفمبر 2015 لإصلاح ثغرة اليوم صفر SECURITY-218. ويمكن تطبيقه أيضًا كحل بديل لثغرة اليوم صفر SECURITY-360 التي نُشرت في نوفمبر 2016.
يمكن استخدام هذا السكريبت لإيقاف تشغيل النظام الفرعي CLI في Jenkins لحماية Jenkins من ثغرة معروفة.
عند تشغيله من وحدة تحكم سكريبتات Groovy (/script)، يقوم هذا السكريبت بإيقاف تشغيل النظام الفرعي CLI في Jenkins قيد التشغيل دون الحاجة إلى إعادة تشغيل.
وعند وضعه في $JENKINS_HOME/init.groovy.d/cli-shutdown.groovy، يضمن بقاء الحماية مفعّلة بعد إعادة تشغيل الخادم الرئيسي.
للتحقق من نجاح تطبيق إجراء التخفيف، جرّب تشغيل java -jar cli.jar -s $JENKINS_URL باستخدام cli.jar وتأكد من ظهور EOFException مثل ما يلي:
java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:197)
at java.io.DataInputStream.readUTF(DataInputStream.java:609)
at java.io.DataInputStream.readUTF(DataInputStream.java:564)
at hudson.cli.CLI.connectViaCliPort(CLI.java:232)
at hudson.cli.CLI.<init>(CLI.java:128)
at hudson.cli.CLIConnectionFactory.connect(CLIConnectionFactory.java:72)
at hudson.cli.CLI._main(CLI.java:479)
at hudson.cli.CLI.main(CLI.java:390)
Suppressed: java.io.IOException: https://ci.jenkins-ci.org/cli doesn't look like Jenkins
at hudson.cli.FullDuplexHttpStream.<init>(FullDuplexHttpStream.java:81)
at hudson.cli.CLI.connectViaHttp(CLI.java:158)
at hudson.cli.CLI.<init>(CLI.java:132)
... 3 more
لا تعني أي شيء مفيد. لذا يرجى تجاهل المخرجات. راجع ما سبق لمعرفة كيفية التحقق من تطبيق إجراء التخفيف. وللاطمئنان، يرجى أيضًا إجراء التحقق مرة أخرى إذا أعدت تشغيل Jenkins.
لا.
طُوّر هذا في الأصل في نوفمبر 2015 كحل بديل لثغرة اليوم صفر SECURITY-218 الخاصة بتنفيذ التعليمات البرمجية عن بُعد. ونُشرت إصدارات تتضمن الإصلاح في 11 نوفمبر 2015.
في 11 نوفمبر 2016، استخدمت ثغرة أخرى من نوع اليوم صفر لتنفيذ التعليمات البرمجية عن بُعد (SECURITY-360) أسلوبًا مشابهًا، وكان هذا الحل البديل فعّالًا هنا أيضًا.