1. Jenkins [1][2]

- CI/CD(Continuous Integration/Continuous Delivery) 중 하나
- 빌드, 테스트, 배포 프로세스를 자동화하여 소프트웨어 품질 및 개발 생산성 향상에 도움을 줌

 

2. 취약점

2.1 CVE-2024-23897 [3]

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2024-23897 [4]

 

- 취약한 버전의 Jenkins에서 인증없이 임의의 파일 내용 일부(또는 전체)를 읽어낼 수 있는 취약점

> CLI 기능 구현을 위해 사용하는 args4j 라이브러리의 명령 인수 및 옵션 파싱 부분에서 취약점이 발생

> 명령 인수 구문 분석을 용이하게 하기 위한 기능인 @ 문자와 파일 경로를 파일 내용으로 자동으로 바꾸는 CLI 기능에서 발생

> 또한, "Allow anonymous read access" 기능이 활성화 되어있는 경우 취약

> 현재 45,000개의 Jenkins 서버가 공격에 노출되어 있는 상황

- 영향받는 버전
Jenkins 2.441 이전 및 LTS 2.426.2 이전 버전

 

- Jenkins는 다양한 인증 방법을 제공

> "누구나 무엇이든 할 수 있음", "로그인한 사용자가 무엇이든 할 수 있음", "익명 읽기 엑서스 허용" 등

> "익명 읽기 엑서스 허용" 옵션은 모든 사람에게 전체 읽기 권한을 부여

[사진 2] 취약한 설정

 

- 또한, Jenkins-CLI는 사용자 지정 명령을 실행할 수 있는 내장 명령줄 인터페이스를 사용자에게 제공 [5][6]

> CLI를 호출하는 방법은 jenkins-cli.jar(웹 소켓 사용), SSH 사용한 명령 호출, hxxp://jenkins/cli?remoting=false에 POST 요청 전송의 방법이 있음

> 그 중 ExpandAtFiles()는 인수가 "@"로 시작하는지 확인 후 @ 뒤 경로에서 파일을 읽고 출력

[사진 3]  ExpandAtFiles()

 

- [사진 2] 및 [사진 3]에 의해 공격자가 원하는 임의 파일에 접근해 내용을 볼 수 있음

>  @/etc/passwd 파일을 요청할 경우 해당 파일의 내용을 반환

> 공격자가 “Overall/Read” 권한일 경우 취약 서버의 전체 파일을 읽을 수 있으며, 해당 권한이 없을 경우 파일의 처음 세 줄을 읽을 수 있음

[사진 4] 공격 예시

 

- 공개된 PoC (hxxp://jenkins/cli?remoting=false URL 이용)와 jenkins-cli.jar를 이용한 결과 비교 [7]

> PoC의 경우 Timed Out 오류 발생(원인 불명), jenkins-cli.jar의 경우 파일 내용이 노출

> [사진 2]에서 "익명 읽기 엑세스 허용" 비활성화 시 Overall/Read 권한이 없다는 에러 출력

※ hxxp://localhost:8080/jnlpJars/jenkins-cli.jar에서 다운 가능

[사진 5] PoC 결과 (위) 및 jenkins-cli.jar 결과 (아래)

 

[사진 6] 패킷 캡쳐

 

2.2 CVE-2024-23898

[사진 7] https://nvd.nist.gov/vuln/detail/CVE-2024-23898 [8]

 

- jenkins-cli.jar를 사용해 CLI 명령 실행 시 원본 유효성 검증(Jenkins-crumb(CSRF 토큰) 또는 Origin 헤더)이 없어 발생하는 취약점

> 사이트 간 웹소켓 하이재킹(CSWSH) 취약성이 발생하여 공격자가 Jenkins 컨트롤러에서 CLI 명령을 실행

> [사진 5] 중 "jenkins-cli.jar (아래)" 참고

- 영향받는 버전
Jenkins 2.441 이전 및 LTS 2.426.2 이전 버전

 

3. 대응방안

- 벤더사 제공 패치 적용 [9]

> "expandAtFiles" 기능을 비활성화하는 보안 구성을 추가하여 CVE-2024-23897을 패치

> WebSocket 엔드포인트에 원본 확인 과정을 추가해 CVE-2024-23898을 패치

> 패치가 어려운 경우 CLI에 대한 엑세스를 비활성화

취약점 영향받는 버전 패치 버전
CVE-2024-23897
CVE-2024-23898
Jenkins 2.441 이전 및 LTS 2.426.2 이전 버전 2.442와 LTS 2.426.3

 

- Jenkins 서버 외부 노출 차단 및 취약점 모니터링

탐지 문자열 URL: /cli?remoting=false
HTTP Body: help, @
※ [사진 6] 참고

 

4. 참고

[1] https://www.jenkins.io/
[2] https://onestone-note.tistory.com/38#7.%207.%C2%A0%20Jenkins%C2%A0%20%EC%8B%A4%EC%8A%B5
[3] https://www.sonarsource.com/blog/excessive-expansion-uncovering-critical-security-vulnerabilities-in-jenkins/?utm_medium=social&utm_source=twitter&utm_campaign=research&utm_content=blog-excessive-expansion-uncovering-critical-security-vulnerabilities-in-jenkins-240125-p1
[4] https://nvd.nist.gov/vuln/detail/CVE-2024-23897
[5] https://www.jenkins.io/doc/book/managing/cli/
[6] https://github.com/jenkinsci/jenkins/tree/master/core/src/main/java/hudson/cli
[7] https://github.com/Vozec/CVE-2024-23897
[8] https://nvd.nist.gov/vuln/detail/CVE-2024-23898
[9] https://www.jenkins.io/security/advisory/2024-01-24/#security-3314
[10] https://www.horizon3.ai/cve-2024-23897-assessing-the-impact-of-the-jenkins-arbitrary-file-leak-vulnerability/
[11] https://devhackdebug.com/2024/01/29/cve-2024-23897-jenkins-rce-vulnerabilities/
[12] https://medium.com/@red_darkin/how-to-replicate-jenkins-cve-2024-23897-arbitrary-file-read-vulnerability-260c8174dd94
[13] https://www.bleepingcomputer.com/news/security/45k-jenkins-servers-exposed-to-rce-attacks-using-public-exploits/
[14] https://www.bleepingcomputer.com/news/security/exploits-released-for-critical-jenkins-rce-flaw-patch-now/#google_vignette
[15] https://www.boannews.com/media/view.asp?idx=126195&kind=1&search=title&find=%C1%A8%C5%B2%BD%BA
[16] https://www.boannews.com/media/view.asp?idx=126273&kind=1&search=title&find=%C1%A8%C5%B2%BD%BA

+ Recent posts