
SECURITY-3314/CVE-2024-23897 및 SECURITY-3315/CVE-2024-23898을 완화하기 위해 CLI를 비활성화하는 해결 방법
= SECURITY-3314/SECURITY-3315 완화 조치
이 저장소는 영향을 받는 인스턴스에서 SECURITY-3314 및 SECURITY-3315의 악용을 방지하는 완화 조치를 문서화합니다.
== 개요
CLI에 대한 접근을 비활성화해야 합니다. 다음 두 단계를 모두 수행해야 합니다:
== 지침
=== CLI 엔드포인트 비활성화
Jenkins가 현재 실행 중인 경우, https://www.jenkins.io/doc/book/managing/script-console/[스크립트 콘솔]에서 제공된 스크립트 disable-cli.groovy를 실행합니다.
이렇게 하면 Jenkins가 다시 시작될 때까지 CLI HTTP 엔드포인트가 제거됩니다.
disable-cli.groovy의 내용으로 Post-Initialization https://www.jenkins.io/doc/book/managing/groovy-hook-scripts/[Groovy Hook Script]를 생성하여 Jenkins가 (재)시작될 때마다 스크립트가 실행되도록 합니다.
==== 확인
스크립트가 작동했는지 확인하려면 _Manage Jenkins » Jenkins CLI_로 이동합니다. 완화 조치가 적용되지 않은 경우, 사용 가능한 CLI 명령 개요를 포함한 일반 CLI 문서가 표시됩니다. 완화 조치가 적용된 경우, HTTP 404 Not Found 오류가 표시됩니다.
=== SSH 포트 비활성화
https://plugins.jenkins.io/sshd/[SSH Server Plugin]은 SSH를 통해 Jenkins CLI에 대한 접근을 제공합니다. 이 플러그인의 기능은 이전에 Jenkins 코어의 일부였으므로 명시적으로 설치한 적이 없어도 설치되어 있을 수 있습니다.
_Manage Jenkins » Security_로 이동하여 SSH Server 섹션의 SSHD Port 설정이 _Disable_로 설정되어 있는지 확인합니다.
참고: 플러그인을 비활성화하거나 제거하더라도 이 작업을 수행하는 것이 좋습니다. 플러그인 관리 기능이 플러그인 종속성을 충족시키기 위해 플러그인을 다시 설치하거나 다시 활성화할 수 있기 때문입니다.
또는 disable-cli.groovy 스크립트 끝에 다음 코드 조각을 추가할 수 있습니다:
// Disable CLI access over SSH Server Plugin
if (j.getPlugin('sshd')) {
hudson.ExtensionList.lookupSingleton(org.jenkinsci.main.modules.sshd.SSHD.class).setPort(-1)
}
==== 확인
SSH 포트를 비활성화하는 지원되는 UI 옵션을 사용하면 명시적인 구성이 필요하지 않지만, 이전에 구성된 SSH CLI 포트에 연결을 시도할 수 있습니다.
예상 결과는 연결 설정 실패입니다.
인증되지 않은 SSH CLI 사용은 불가능하므로 모든 오류가 성공적으로 비활성화되었음을 나타내는 것은 아닙니다.
다음은 예상되는 (안전한) 결과의 예입니다 (포트 2222가 이전에 구성되었다고 가정):
$ ssh -p 2222 jenkins.example.org
ssh: connect to host jenkins.example.org port 2222: Connection refused
$ ssh -p 2222 jenkins.example.org
kex_exchange_identification: read: Connection reset by peer
Connection reset by … port 2222