
Jenkins CLI를 통한 임의 파일 읽기 취약점 POC가 RCE로 이어질 수 있음
Jenkins는 스크립트나 셸 환경에서 Jenkins에 접근할 수 있도록 내장된 명령줄 인터페이스(CLI)를 가지고 있습니다.
Jenkins는 CLI 명령을 처리할 때 Jenkins 컨트롤러에서 명령 인수와 옵션을 구문 분석하기 위해 args4j 라이브러리를 사용합니다. 이 명령 파서에는 인수에서 @ 문자 뒤에 파일 경로가 오는 경우 해당 파일의 내용으로 대체하는 기능(expandAtFiles)이 있습니다. 이 기능은 기본적으로 활성화되어 있으며, Jenkins 2.441 및 이전 버전, LTS 2.426.2 및 이전 버전에서는 비활성화하지 않습니다.
이로 인해 공격자는 Jenkins 컨트롤러 프로세스의 기본 문자 인코딩을 사용하여 Jenkins 컨트롤러 파일 시스템의 임의 파일을 읽을 수 있습니다.
Overall/Read 권한이 있는 공격자는 전체 파일을 읽을 수 있습니다.
Overall/Read 권한이 없는 공격자는 파일의 처음 몇 줄을 읽을 수 있습니다. 읽을 수 있는 줄 수는 사용 가능한 CLI 명령에 따라 다릅니다. 이 권고가 게시된 시점을 기준으로 Jenkins 보안 팀은 플러그인이 설치되지 않은 최신 Jenkins 릴리스에서 파일의 처음 세 줄을 읽는 방법을 찾았으며, 이 줄 수를 늘릴 수 있는 플러그인은 확인되지 않았습니다.
수정 설명: Jenkins 2.442, LTS 2.426.3에서는 CLI 명령에 대해 인수에서 @ 문자 뒤에 오는 파일 경로를 파일 내용으로 대체하는 명령 파서 기능을 비활성화합니다.
이 수정에 문제가 발생할 경우 Java 시스템 속성 hudson.cli.CLICommand.allowAtSyntax를 true로 설정하여 이 변경 사항을 비활성화할 수 있습니다. Jenkins 관리자가 아닌 사용자가 접근할 수 있는 네트워크에서는 이 방법을 사용하지 않는 것이 좋습니다.
해결 방법: CLI 접근을 비활성화하면 악용을 완전히 차단할 수 있을 것으로 예상됩니다. 즉시 Jenkins 2.442, LTS 2.426.3으로 업데이트할 수 없는 관리자에게 이 방법을 강력히 권장합니다. 이 해결 방법을 적용할 때 Jenkins를 다시 시작할 필요는 없습니다.
자세한 정보: https://www.jenkins.io/security/advisory/2024-01-24/#SECURITY-3314
실행 명령어: python CVE-2024-23897 Jenkins.py -l list.txt -f /etc/passwd
VULN 출력 응답에 daemon이나 bin 이상이 포함될 수 있습니다. 추가하려면 28번째 줄에 추가하세요.