
Disabilita il sottosistema Jenkins CLI/Remoting come mitigazione contro le vulnerabilità di esecuzione remota di codice non autenticata SECURITY-218 e SECURITY-360, applicato in fase di runtime o tramite script di init.
Questa mitigazione è obsoleta a partire da Jenkins 2.54 e Jenkins LTS 2.46.2. Se hai installato una versione 2.54+/LTS 2.46.2+ di Jenkins, la CLI basata su Remoting è disabilitata per impostazione predefinita. Se hai installato una versione precedente di Jenkins e hai effettuato l'aggiornamento a 2.54+ o LTS 2.46.2+, verrai avvisato da un monitor amministrativo di andare su Configure Global Security e disabilitare la CLI basata su Remoting. In entrambi i casi, i seguenti workaround non sono necessari.
Oppure, se stai usando Jenkins 2.32+ o 2.19.3+
(come menzionato nell'avviso di sicurezza del 16 novembre 2016),
ma più vecchio di 2.54, puoi semplicemente usare lo switch di avvio: -Djenkins.CLI.disabled=true
NOTA: Questo script è stato originariamente pubblicato a novembre 2015 per correggere la vulnerabilità zero-day SECURITY-218. Può inoltre essere applicato come workaround per la vulnerabilità zero-day SECURITY-360 pubblicata a novembre 2016.
Questo script può essere usato per arrestare il sottosistema CLI di Jenkins per proteggere Jenkins da una vulnerabilità nota.
Quando viene eseguito dalla console degli script Groovy (/script), questo arresta il sottosistema CLI di un Jenkins in esecuzione senza bisogno di un riavvio.
Se inserito in $JENKINS_HOME/init.groovy.d/cli-shutdown.groovy, garantisce che la protezione rimanga attiva dopo il riavvio del master.
Per verificare se la mitigazione è stata applicata correttamente, prova a eseguire java -jar cli.jar -s $JENKINS_URL con cli.jar e assicurati di ricevere un EOFException come il seguente:
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
Non significa nulla di utile. Quindi ignorane l'output. Vedi sopra per come verificare che la mitigazione sia stata applicata. Per sicurezza, riesegui la verifica anche se riavvii Jenkins.
No.
Originariamente è stato sviluppato a novembre 2015 come workaround per la vulnerabilità zero-day di esecuzione remota di codice SECURITY-218. Le release con la correzione sono state pubblicate l'11 novembre 2015.
L'11 novembre 2016, un'altra vulnerabilità zero-day di esecuzione remota di codice (SECURITY-360) ha usato una tecnica simile, e questo workaround si è rivelato efficace anche in questo caso.