TA팀이 "Jenkins Arbitrary File Leak Vulnerability (CVE-2024-23897)"을 분석하여 작성한 취약점 보고서
이 취약점은 Jenkins의 기본 제공 명령줄 인터페이스(CLI)와 args4j 라이브러리와의 상호 작용에서 확인되었으며,
공격자는 명령 인수의 파일 경로 뒤의 "@" 문자를 파일 내용으로 대체할 수 있는 기능을 악용할 수 있습니다.
안타깝게도 이 기능은 Jenkins 컨트롤러 파일 시스템에서 무단 파일 액세스의 문을 열어 민감한 정보의 무결성 및 기밀성에 심각한 위험을 초래합니다.
중요한 것은 Jenkins 버전 2.441 이하 및 LTS 2.426.2가 영향을 받으므로 광범위한 설치가 악용될 수 있다는 것입니다.
이 취약점은 공격자가 최소한의 권한으로, 특정 구성의 경우 인증 없이도 액세스할 수 있다는 점에서 특히 우려스러운 문제입니다.
공개적으로 노출된 젠킨스 인스턴스를 쉽게 식별하고 악용할 수 있다는 점에서 상황의 심각성은 더욱 강조되며, 이는 전 세계 조직에서 흔히 볼 수 있는 관행입니다.
이러한 심각한 취약성에 대응하기 위해 조직은 Jenkins 배포를 신속하게 평가하고 잠재적인 익스플로잇으로부터 환경을 보호하기 위해 필요한 조치를 취해야 합니다.
1. 개요
Jenkins는 지속적인 통합 및 배포(CI/CD)를 결합하는 파이프라인을 위한 인기 있는 오픈소스 자동화 서버입니다. 프로그래머에게 소프트웨어 프로젝트 개발, 테스트 및 배포를 자동화할 수 있는 플랫폼을 제공합니다.
출처 : https://www.linkedin.com/pulse/you-aware-recent-jenkins-vulnerability-cve-2024-23897-amit-dash-lgi6e
해당 서버에서 발견된 여러 취약점 중 최근 발표된 CVE-2024-23897에 대한 분석한 내용을 정리하였습니다.
2. 공격 유형
Jenkins에는 스크립트나 셸 환경에서 상호작용을 가능하게 하는 통합 명령줄 인터페이스(CLI)가 함께 제공됩니다. 이 CLI는 args4j 라이브러리를 활용하여 CLI 명령 처리 중에 Jenkins 컨트롤러에서 명령 인수와 매개변수를 구문 분석합니다.
args4j의 한 기능은 원래 사용성을 개선하기 위해 설계된 파일 경로 뒤에 "@" 문자를 붙여 파일의 내용을 대체하지만 심각한 보안 취약점으로 바뀌었습니다. 버전 2.441 및 LTS 2.426.2는 이 기능을 기본적으로 활성화하고 확인하지 않습니다. 이 결함을 이용하여 공격자는 Jenkins 컨트롤러 프로세스의 기본 문자 인코딩을 사용하여 파일 시스템의 모든 파일에 액세스할 수 있습니다. Jenkins CLI 도구에서 "@" 접두사가 붙은 인수는 인수에 액세스하기 위해 열어야 하는 파일로 잘못 해석됩니다. 어떤 상황에서는 CLI 사용자가 실수로 오류 메시지에 포함된 이러한 파일의 줄을 수신합니다.
출처 : https://hackyboiz.github.io/2024/03/04/ogu123/cve-2024-23897/
이를 통해 공격자는 Jenkins 컨트롤러 프로세스의 기본 문자 인코딩을 사용하여 Jenkins 컨트롤러 파일 시스템에서 임의의 파일을 읽을 수 있습니다.
이 취약점을 악용하는 두 가지 방법이 있습니다.
2-1. Jenkins-cli.jar 사용
일반적인 접근 방식은 웹 소켓이나 SSH를 통해 작동하는 Jenkins-cli.jar를 활용하는 것을 포함합니다. 구체적으로, Jenkins CLI 도구의 shutdown, enable-job, help, connect-node와 같은 명령은 Jenkins 서버의 파일 내용에 불법적으로 액세스하여 읽도록 조작됩니다. 아래 그림은 Jenkins CLI에서 파일을 읽기 위해 실행되는 help 명령을 보여줍니다.
출처 : https://www.uptycs.com/blog/jenkins-exploit-cve-2024-23897
아래 이미지는 Jenkins 서버에서 읽혀지는 파일 내용을 그대로 보여주는 예시 입니다.
2-2. POST 요청 보내기
다른 방법은 http://jenkins/cli?remoting=false에 두 개의 POST 요청을 보내는 것입니다. 이 기술은 다운로더와 업로더를 사용해야 합니다. 다운로더는 CLI 명령의 응답을 가져오고, 업로더는 요청 본문에 제공된 지정된 CLI 명령을 실행합니다. 다운로더와 업로더 간의 연결은 세션 헤더의 UUID를 활용하여 설정됩니다.
3. 대응
Jenkins Arbitrary File Leak Vulnerability(CVE-2024-23897)에 대응하는 방법은 일반적으로 2가지로 확인 됩니다.
- Jenkins CLI에 대한 액세스를 비활성화
- Jenkins 버전 2.442 및 LTS 2.426.3으로 최신 업데이트 진행. 해당 패치는 취약성을 담당하는 명령 파서 기능을 비활성화
저희 AIWAF 제품에서는 "Arbitrary file read in Jenkins" 패턴으로 해당 취약점을 악용한 공격 구문을 탐지하고 있습니다.
4. 결론
CVE-2024-23897은 소프트웨어 자동화 환경을 보호하는 데 있어 지속적인 과제를 강조하는 Jenkins 내의 중대한 취약성을 강조합니다. 이 취약성을 통해 공격자는 CLI 인수 처리를 악용하여 Jenkins 서버에서 임의의 파일을 읽을 수 있어 심각한 보안 위험이 발생합니다. 임의의 파일의 콘텐츠를 포함하도록 CLI 인수를 조작할 수 있는 기능은 민감한 데이터의 무단 노출로 이어져 Jenkins 서버와 관리하는 더 광범위한 인프라의 보안을 손상시킬 수 있습니다.
이 취약점의 발견은 Jenkins와 같은 자동화 도구의 개발 및 유지 관리에서 부지런한 보안 관행의 중요성을 상기 시켜줍니다. CI/CD 파이프라인에 Jenkins를 사용하는 조직은 잠재적인 악용으로부터 보호하기 위해 배포의 평가 및 수정을 우선시해야 합니다.
저희 AIWAF 제품에서는 Jenkins 서버 관련 취약점들에 대해 패턴을 다수 개발하여 대응하고 있으며, 앞으로도 발견되는 Jenkins 서버 관련 취약점들에 대해서도 신속하게 대응할 예정입니다.
5. 참조
- https://www.uptycs.com/blog/jenkins-exploit-cve-2024-23897
- https://ko.securecodewarrior.com/article/deep-dive-up-close-and-personal-with-the-moveit-zero-day-vulnerability
- https://hackyboiz.github.io/2024/03/04/ogu123/cve-2024-23897/
- https://www.enciphers.com/exploiting-cve/in-the-crosshairs-understanding-cve-2024-23897s-technical-implications?491f42f9_page=5&491f4314_page=2&6cf8b8b6_page=5