Jenkins 취약점 노출 국내 서버 현황 (CVE-2024-23897, CVE-2024-43044)
전 세계적으로 널리 사용되는 개발 도구인 Jenkins 제품에 대한 다수의 취약점이 발표되었으며 그중 일부 취약점이 실제 공격에 악용되고 있다. 또한 국내 Jenkins 서버 대다수가 취약점에 노출된 것으로 확인되었다.
올해 초 공개된 CVE-2024-23897 취약점은 인증되지 않은 사용자가 Jenkins 서버 시스템의 임의 파일을 읽을 수 있는 취약점으로 CVSS 점수 9.8의 위험도가 매우 높은 취약점이다. 최근 해당 취약점이 실제 공격에 악용되고 있다는 보고[1]가 있으며, 해외 언론에 따르면 특정 기업이 해당 취약점을 악용한 공격으로 피해를 입었다고 한다[2]. 해당 취약점으로 대상 버전의 모든 Jenkins 서버에 공격이 가능할 것으로 파악된다.
최근 공개된 CVE-2024-43044 취약점 또한 기본 라이브러리의 특정 기능을 악용하여 Agent 접근 권한을 가진 공격자가 서버의 임의 파일을 읽을 수 있는 취약점으로 CVSS 점수 8.8의 위험도 높은 취약점이다.
두 취약점 모두 PoC 코드가 GitHub, 블로그 등지에 공개되어 쉽게 찾을 수 있어 언제든 공격에 악용될 수 있으므로 주의해야 한다.
ASEC(AhnLab SEcurity intelligence Center)에서는 자사 고객의 위협 노출 현황을 파악하기 위해 ASM 서비스를 활용하여 국내에서 운용 중인 Jenkins 서버에 대한 취약성 여부를 조사하였다. 당시 외부에서 접근 가능한 Jenkins 서버 4245개가 확인되었으며, 이 중 3972개 서버의 버전 정보 확인이 가능했다. 조사 결과, 2824개(71%)의 환경이 심각한 위협인 CVE-2024-23897 취약점에 노출되어 있고, 비교적 최신 취약점인 CVE-2024-43044에 노출된 환경은 3969개(99.9%)였다. 대다수의 서버가 취약점에 노출된 상태로 운용되고 있는 것으로 확인된다. (*2024.08.20 기준)
| IP | Port | Domain | Jenkins Version |
| 115.89.***.195 | 8080 | *******.********.net | 2.346.3 |
| 175.45.***.185 | 7979 | ***********.***.or.kr | 2.375.1 |
| 211.62.***.72 | 9000 | *****.********.com | 2.319.2 |
| 116.125.***.22 | 9090 | *****.co.kr | 2.387.3 |
| 119.205.***.48 | 8110 | ********.or.kr | 2.263.3 |
표 1. 확인된 취약 Jenkins 서버 예시

그림 1. 국내 Jenkins 서버 취약점 노출 현황
CVE-2024-23897
Jenkins는 원격 명령 인터페이스를 지원한다. Jenkins-CLI 툴을 통해 원격지에서 명령어와 인자를 전달하여 각종 기능을 실행 가능하다. 이 CLI 명령 분석 과정에서 발생하는 취약점이다.

그림 2. Jenkins CLI 실행 화면
명령 분석에 사용하는 Args4j 라이브러리에 ‘@’ 식별자 이후 문자열 경로의 파일을 읽어 인자로 설정하는 기능(expandAtFiles)이 있다. 명령에 대한 유효한 인자가 아닌 경우 에러가 발생하는데, 이 에러 메시지에 인자로 사용했던 문자열, 즉 파일 내용이 노출되는 취약점이다.
분석 결과, 취약점에 활용 가능한 에러 메시지를 출력하는 명령어는 일부 라인을 읽을 수 있는 명령어와 전체 라인을 읽을 수 있는 명령어로 나뉜다. 인자를 사용하지 않거나 제한된 개수의 인자를 사용하는 명령어의 경우 파일의 특정 라인을 읽을 수 있는 반면, 인자 개수 제한이 없는 명령어의 경우 파일 라인 전체를 읽을 수 있다. 또한 권한에 따라 사용 가능한 명령어가 제한되는데, 모든 라인을 읽을 수 있는 명령어는 특정 설정 환경에서만 동작 가능했다.
별다른 설정을 하지 않은 환경의 경우 기본 권한으로 다음 명령어만 사용 가능하다. 인자가 필요하지 않거나 제한된 개수의 인자를 사용하는 명령어이다.
| 명령어 | 읽기 가능 라인 |
| who-am-i |
1 |
| shutdown |
1 |
| safe-shutdown |
1 |
| restart |
1 |
| keep-build |
3 |
| help |
1, 2 |
| enable-job |
2 |
| disable-job |
2 |
표 2. 권한 없이 사용 가능한 명령어
기본 권한 상태에서는 취약점으로 탈취 가능한 파일 내용이 일부 라인으로 제한되나, SSH Key, Jenkins 암호화 키 등의 라인 구분이 없는 주요 파일은 전체 내용을 출력할 수 있다.

그림 3. 파일 일부를 읽을 수 있는 명령어 사용 예시
특정 설정의 상황에서는 다수 인자를 사용하는 명령을 실행할 수 있다. 다음 설정 중 하나에 해당될 경우 취약점을 통해 파일의 모든 라인, 즉 파일 전체를 읽을 수 있다.
– 익명 연결 기능을 사용한 경우
– 모든 사용자에 읽기 권한을 부여했을 경우
– 사용자 가입을 허용했을 경우
– Lagacy 모드를 사용할 경우

그림 4. 취약점 관련 Jenkins 설정
위와 같이 특정 설정 환경에서 파일 내용 전체를 읽을 수 있는 명령어는 다음과 같다.
| 명령어 |
| connect-node |
| delete-job |
| delete-node |
| delete-view |
| disconnect-node |
| offline-node |
| online-node |
| reload-job |
표 3. 파일 전체를 읽을 수 있는 명령어

그림 5. 파일 전체를 읽을 수 있는 명령어 사용 예시
공개된 사이트에 다수의 PoC 코드가 존재하며, PoC 코드가 아니더라도 Jenkins 패키지에 기본으로 포함된 CLI 접속 도구로 취약점 구현이 가능하기 때문에 누구든지 즉시 공격이 가능하다. 해당 취약점의 대상 버전 사용자는 확인 즉시 완화 버전으로 패치할 것을 권고한다.
CVE-2024-43044
Jenkins 설치 시 기본으로 설치되는 Remoting 라이브러리에 대한 취약점이다. 라이브러리 자체는 기본으로 설치되지만, Jenkins에 Agent가 등록되어 있고 공격자가 Agent 접근 권한을 가질 경우 취약점을 사용할 수 있다.
해당 라이브러리는 Jenkins 서버와 Agent의 통신 기능을 구현하며, Agent가 서버에 요청한 JAVA 클래스를 실행할 수 있는 기능을 포함한다. 서버 URL의 JAR 파일을 실행하는 목적으로 구현된 것으로 파악되지만, 파일 경로 및 타입을 검사하지 않기 때문에 서버 시스템의 임의 파일을 읽어 Agent로 전송할 수 있다. 이 취약점을 통해 디렉토리 리스팅 및 임의 파일 읽기가 가능하다.
분석 결과 RemoteClassLoader 클래스의 특정 메소드에 코드를 추가하는 것으로 취약점을 구현 가능하다. 파일 경로가 디렉토리일 경우 디렉토리 리스트를 응답하며, 파일일 경우 파일 내용 전체를 응답한다.

그림 6. 원본 Remoting.jar RemoteClassLoader 코드
요청 URL에 “file://” 경로가 허용되기 때문에 해당 경로가 디렉토리일 경우 디렉토리 내부 파일 목록이, 파일일 경우 파일 내용 전부가 Agent로 전달된다.

그림 7. 취약점을 통한 디렉토리 리스팅 및 파일 읽기 예시
해당 취약점 또한 위험도 높은 취약점으로 설명되고 있으며, 제조사에서는 즉시 업데이트가 어려울 경우를 위해 문제가 되는 fetchJar 메소드 자체를 사용하지 못하도록 패치하는 프로그램을 제공하고 있다[3].
본문의 취약점은 구현 난이도가 낮고 서버의 중요한 파일 내용이 유출될 수 있으므로 악용될 경우 큰 피해가 예상된다. 취약한 버전으로 지속 운영 시 공격 대상으로 노출될 수 있으므로, 피해 예방을 위하여 즉시 최신 패치를 적용해야 한다.
해당 사례 외에도 공격자는 여러 유명 제품의 알려진 취약점을 악용하여 공격을 시도한다. 사용 중인 서비스를 항상 최신 버전으로 유지해야 하며 각종 보안 설정을 통해 공격자의 취약점 스캐닝 및 공격을 방어해야 한다. 또한 국내외 보안 권고를 상시 확인하여 대상 서비스를 운용 중인 경우 신속한 조치와 함께 피해 여부를 점검해야 한다.
ASEC에서는 블로그를 통해 주요 취약점에 대한 보안 권고문을 게시하고 있으며, AhnLab TIP 서비스 가입 고객 중 취약점 대상 서비스 운용 기업이 확인될 경우 별도의 맞춤형 보고서를 전달하고 있다. 자사 고객의 취약 정보가 외부에 노출되지 않도록 하며 안전하게 서비스를 운영할 수 있도록 비공개로 해당 고객에게만 전달하는 서비스이다.
관련 링크
[1] https://www.cisa.gov/known-exploited-vulnerabilities-catalog
[2] https://www.cybersecuritydive.com/news/jenkins-critical-cve-exploits-cisa/724729/
[3] https://github.com/jenkinsci-cert/SECURITY-3430
보안 권고문
[보안권고문] Jenkins 제품 보안 업데이트 권고(CVE-2024-43044)
https://asec.ahnlab.com/ko/82339/
[보안권고문] JenKins 제품군 2024년 1월 보안 업데이트 권고(CVE-2024-23897)
https://asec.ahnlab.com/ko/79332/