
Desativa o subsistema CLI/Remoting do Jenkins como mitigação contra vulnerabilidades de execução remota de código não autenticada SECURITY-218 e SECURITY-360, aplicado em tempo de execução ou via script de inicialização.
Esta mitigação está obsoleta a partir do Jenkins 2.54 e Jenkins LTS 2.46.2. Se você instalou uma versão nova do Jenkins 2.54+/LTS 2.46.2+, a CLI baseada em Remoting está desabilitada por padrão. Se você instalou uma versão mais antiga do Jenkins e atualizou para 2.54+ ou LTS 2.46.2+, um monitor administrativo solicitará que você vá para Configurar Segurança Global e desabilite a CLI baseada em Remoting. Em qualquer um dos casos, as seguintes soluções alternativas são desnecessárias.
Ou, se você estiver usando Jenkins 2.32+ ou 2.19.3+
(conforme mencionado no comunicado de segurança de 16 de novembro de 2016),
mas anterior à versão 2.54, você pode simplesmente usar a opção de inicialização: -Djenkins.CLI.disabled=true
NOTA: Este script foi originalmente publicado em novembro de 2015 para corrigir a vulnerabilidade zero-day SECURITY-218. Ele também pode ser aplicado como uma solução alternativa para a vulnerabilidade zero-day SECURITY-360 publicada em novembro de 2016.
Este script pode ser usado para desligar o subsistema CLI do Jenkins, protegendo o Jenkins contra uma vulnerabilidade conhecida.
Quando executado no console de scripts Groovy (/script), ele desliga o subsistema CLI de um Jenkins em execução sem precisar de reinicialização.
Quando colocado em $JENKINS_HOME/init.groovy.d/cli-shutdown.groovy, garante que a proteção permaneça ativa após a reinicialização do master.
Para verificar se a mitigação foi aplicada com sucesso, execute java -jar cli.jar -s $JENKINS_URL com cli.jar e certifique-se de obter EOFException como no exemplo a seguir:
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
Isso não significa nada de útil. Portanto, ignore a saída. Veja acima como verificar se a mitigação foi aplicada. Para garantir, faça a verificação novamente também se você reiniciar o Jenkins.
Não.
Originalmente, este script foi desenvolvido em novembro de 2015 como uma solução alternativa para a vulnerabilidade zero-day de execução remota de código SECURITY-218. Versões com a correção foram publicadas em 11 de novembro de 2015.
Em 11 de novembro de 2016, outra vulnerabilidade zero-day de execução remota de código (SECURITY-360) usou uma técnica semelhante, e esta solução alternativa também foi eficaz nesse caso.