
Deaktiviert das Jenkins-CLI-/Remoting-Subsystem als Schutzmaßnahme gegen nicht authentifizierte Remote-Codeausführungs-Schwachstellen SECURITY-218 und SECURITY-360, angewendet zur Laufzeit oder über ein Init-Skript.
Diese Gegenmaßnahme ist ab Jenkins 2.54 und Jenkins LTS 2.46.2 veraltet. Wenn Sie eine 2.54+/LTS-2.46.2+-Version von Jenkins neu installiert haben, ist die Remoting-basierte CLI standardmäßig deaktiviert. Wenn Sie eine ältere Version von Jenkins installiert und auf 2.54+ oder LTS 2.46.2+ aktualisiert haben, werden Sie von einem administrativen Monitor aufgefordert, zu Globale Sicherheit konfigurieren zu gehen und die Remoting-basierte CLI zu deaktivieren. In beiden Fällen sind die folgenden Workarounds unnötig.
Oder, wenn Sie Jenkins 2.32+ oder 2.19.3+ verwenden
(wie in der Sicherheitsempfehlung vom 16. November 2016 erwähnt),
aber älter als 2.54, können Sie einfach den Startparameter verwenden: -Djenkins.CLI.disabled=true
HINWEIS: Dieses Skript wurde ursprünglich im November 2015 veröffentlicht, um die SECURITY-218-Zero-Day-Schwachstelle zu beheben. Es kann auch als Workaround für die im November 2016 veröffentlichte SECURITY-360-Zero-Day-Schwachstelle angewendet werden.
Dieses Skript kann verwendet werden, um das CLI-Subsystem von Jenkins herunterzufahren und Jenkins so vor einer bekannten Schwachstelle zu schützen.
Wenn es über die Groovy-Skriptkonsole (/script) ausgeführt wird, fährt es das CLI-Subsystem eines laufenden Jenkins herunter, ohne dass ein Neustart erforderlich ist.
Wenn es in $JENKINS_HOME/init.groovy.d/cli-shutdown.groovy platziert wird, stellt es sicher, dass der Schutz nach einem Neustart des Masters erhalten bleibt.
Um zu prüfen, ob die Gegenmaßnahme erfolgreich angewendet wurde, versuchen Sie, java -jar cli.jar -s $JENKINS_URL mit cli.jar auszuführen, und stellen Sie sicher, dass Sie eine EOFException wie die folgende erhalten:
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
Sie bedeutet nichts Nützliches. Bitte ignorieren Sie die Ausgabe. Siehe oben, wie Sie überprüfen können, dass die Gegenmaßnahme wirksam wurde. Um sicherzugehen, führen Sie die Überprüfung bitte auch erneut durch, wenn Sie Jenkins neu starten.
Nein.
Ursprünglich wurde dies im November 2015 als Workaround für die SECURITY-218-Zero-Day-Schwachstelle für Remote-Codeausführung entwickelt. Versionen mit einem Fix wurden am 11. November 2015 veröffentlicht.
Am 11. November 2016 nutzte eine weitere Zero-Day-Schwachstelle für Remote-Codeausführung (SECURITY-360) eine ähnliche Technik, und dieser Workaround war auch hier wirksam.