
Désactive le sous-système CLI/Remoting de Jenkins comme mesure d'atténuation contre les vulnérabilités d'exécution de code à distance non authentifiée SECURITY-218 et SECURITY-360, appliquée à l'exécution ou via un script d'init.
Cette mesure d'atténuation est obsolète à partir de Jenkins 2.54 et Jenkins LTS 2.46.2. Si vous avez installé une nouvelle version 2.54+/LTS 2.46.2+ de Jenkins, la CLI basée sur Remoting est désactivée par défaut. Si vous avez installé une version plus ancienne de Jenkins puis mis à niveau vers 2.54+ ou LTS 2.46.2+, un moniteur administratif vous invitera à vous rendre dans Configurer la sécurité globale et à désactiver la CLI basée sur Remoting. Dans les deux cas, les contournements suivants ne sont pas nécessaires.
Ou, si vous utilisez Jenkins 2.32+ ou 2.19.3+
(comme mentionné dans le bulletin de sécurité du 16 novembre 2016),
mais antérieur à 2.54, vous pouvez simplement utiliser l'option de démarrage : -Djenkins.CLI.disabled=true
Remarque : Ce script a été initialement publié en novembre 2015 pour corriger la vulnérabilité zero-day SECURITY-218. Il peut également être appliqué comme contournement pour la vulnérabilité zero-day SECURITY-360 publiée en novembre 2016.
Ce script peut être utilisé pour arrêter le sous-système CLI de Jenkins afin de protéger Jenkins contre une vulnérabilité connue.
Lorsqu'il est exécuté depuis la console de scripts Groovy (/script), il arrête le sous-système CLI d'une instance Jenkins en cours d'exécution sans nécessiter de redémarrage.
Lorsqu'il est placé dans $JENKINS_HOME/init.groovy.d/cli-shutdown.groovy, il garantit que la protection reste en place après le redémarrage du maître.
Pour vérifier si l'atténuation a bien été appliquée, essayez d'exécuter java -jar cli.jar -s $JENKINS_URL avec cli.jar et assurez-vous d'obtenir une EOFException comme ci-dessous :
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
Elle ne signifie rien d'utile. Ignorez donc la sortie. Reportez-vous ci-dessus pour savoir comment vérifier que l'atténuation a été appliquée. Par sécurité, effectuez également la vérification à nouveau si vous redémarrez Jenkins.
Non.
À l'origine, ce script a été développé en novembre 2015 comme contournement de la vulnérabilité zero-day d'exécution de code à distance SECURITY-218. Des versions avec correctif ont été publiées le 11 novembre 2015.
Le 11 novembre 2016, une autre vulnérabilité zero-day d'exécution de code à distance (SECURITY-360) a utilisé une technique similaire, et ce contournement s'est également révélé efficace dans ce cas.