
인증되지 않은 원격 코드 실행 취약점 SECURITY-218 및 SECURITY-360을 완화하기 위해 Jenkins CLI/Remoting 하위 시스템을 비활성화하며, 런타임 시 또는 init 스크립트를 통해 적용됩니다.
이 완화 조치는 Jenkins 2.54 및 Jenkins LTS 2.46.2부터 더 이상 사용되지 않습니다. Jenkins 2.54+/LTS 2.46.2+ 버전을 새로 설치한 경우, Remoting 기반 CLI는 기본적으로 비활성화되어 있습니다. 이전 버전의 Jenkins를 설치한 후 2.54+ 또는 LTS 2.46.2+로 업그레이드한 경우, 관리 모니터가 Configure Global Security로 이동하여 Remoting 기반 CLI를 비활성화하라는 메시지를 표시합니다. 어느 경우든 아래의 해결 방법은 필요하지 않습니다.
또는 Jenkins 2.32+ 또는 2.19.3+를 사용 중이지만
(2016년 11월 16일 보안 권고에 언급된 바와 같이)
2.54보다 오래된 버전이라면 시작 스위치 -Djenkins.CLI.disabled=true를 간단히 사용할 수 있습니다.
참고: 이 스크립트는 원래 2015년 11월에 SECURITY-218 제로데이 취약점을 수정하기 위해 게시되었습니다. 2016년 11월에 공개된 SECURITY-360 제로데이 취약점에 대한 해결 방법으로도 적용할 수 있습니다.
이 스크립트는 Jenkins의 CLI 하위 시스템을 종료하여 알려진 취약점으로부터 Jenkins를 보호하는 데 사용할 수 있습니다.
Groovy 스크립트 콘솔(/script)에서 실행하면 재시작 없이 실행 중인 Jenkins의 CLI 하위 시스템을 종료합니다.
$JENKINS_HOME/init.groovy.d/cli-shutdown.groovy에 배치하면 마스터 재시작 후에도 보호가 유지됩니다.
완화 조치가 성공적으로 적용되었는지 확인하려면 cli.jar로 java -jar cli.jar -s $JENKINS_URL을 실행하고 다음과 같은 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년 11월 SECURITY-218 제로데이 원격 코드 실행 취약점에 대한 해결 방법으로 개발되었습니다. 수정 사항이 포함된 릴리스는 2015년 11월 11일에 게시되었습니다.
2016년 11월 11일, 또 다른 제로데이 원격 코드 실행 취약점(SECURITY-360)이 유사한 기법을 사용했으며, 이 해결 방법은 여기서도 효과적이었습니다.