
# Jenkins CVE-2024-23897 인증되지 않은 임의 파일 읽기 익스플로잇 HTTPS 및 CSRF-crumb 지원을 통해 강화된 인스턴스를 우회하는 Jenkins CVE-2024-23897용 인증되지 않은 임의 파일 읽기 익스플로잇입니다.
cve-2024-23897-crumb.py — Jenkins <= 2.441 / LTS <= 2.426.2 대상의 인증 없는 임의 파일 읽기 (2.442 / LTS 2.426.3에서 수정됨).
널리 사용되는 PoC — exploit-db 51993, xaitax/CVE-2024-23897, 그리고 ProjectDiscovery nuclei 템플릿 — 은 HTTP 전용이며 CSRF crumb을 보내지 않습니다. 다음과 같은 Jenkins 인스턴스를 대상으로 할 때:
403 No valid crumb was included in the request 오류로 실패하며, 이는 "패치됨"과 구분할 수 없어 오탐(false negative) 을 발생시킵니다.
이 변형은:
--http로 일반 HTTP도 지원);/cli 오류 페이지에서 사용 가능한 를 가져온 후, 이를 이중 채널(duplex channel)에서 재전송합니다;JSESSIONID최종 효과: 공개 도구가 안전하다고 보고하는 강화되었지만 패치되지 않은 인스턴스를 탐지하고 악용합니다.
python3 cve-2024-23897-crumb.py <host> [file] [--http] [--port N]
python3 cve-2024-23897-crumb.py jenkins.example.com
python3 cve-2024-23897-crumb.py jenkins.example.com /etc/shells
python3 cve-2024-23897-crumb.py 10.0.0.5 /etc/passwd --http --port 8080
Python 3 표준 라이브러리만 사용합니다. 읽기 전용: help "@<file>"를 전송하며, 쓰기, 업로드, 실행은 수행하지 않습니다.
help는 파일의 첫 줄을 에코합니다 — Too many arguments: 메시지의 첫 줄과 (default: ...) 필드의 후속 줄입니다. 첫 줄에 여러 필드가 있거나 긴 파일에서 잘 작동합니다:
/etc/passwd, /etc/shells/proc/net/arp, /proc/net/route (내부 IP, 게이트웨이, MAC)/proc/mounts (컨테이너/스토리지 레이아웃)첫 줄이 매우 짧은 파일(예: /etc/hostname)은 인증 오류 경로로 빠지며 help를 통해 아무것도 반환하지 않습니다. 전체 파일 추출은 대신 connect-node 명령을 사용하지만, 익명 사용자에게 Overall/Read 권한이 있어야 합니다 — 종종 부여되지 않으며, 이 경우 읽기 프리미티브는 여전히 작동하지만 첫 줄만 반환됩니다.
테스트 권한이 있는 호스트에만 사용하십시오. 동일한 채널은 상태 변경 CLI 명령(enable-job, reload-configuration, …)을 노출합니다; 이 스크립트는 의도적으로 읽기 전용 help 경로만 사용합니다.