Skip to content

Latest commit

 

History

History
164 lines (66 loc) · 5.96 KB

Jenkins-CVE-2024-23897.md

File metadata and controls

164 lines (66 loc) · 5.96 KB

image

Đây là bài lab Builder trên Hackthebox mới level Medium. Sau khi connect OpenVPN tới htb. Ta thực hiện join machine và được cấp địa chỉ mục tiêu là 10.10.11.10

Recon

Tiến hành scan Nmap để tìm thông tin dịch hệ thống mục tiêu: nmap 10.10.11.10

Ở đây ,ta chạy nmap với quyền root để có thể quét TCP SYN , giúp scan nhanh hơn và hiệu quả hơn.

image

Như kết quả được thấy , có 2 dịch vụ đang chạy là ssh(22) và http(8080). Quét với -A flag 2 port trên để scan service :

image

Ta thấy Jenkins server chạy trên port 8080. Tiến hành truy cập 10.10.11.10:8080

image

Sau khi open connect , ta thấy trang Jenkins hiện ra , vì là lần đầu biết tới Jenkins , nên thử mày mò các chức năng trên web , ta thấy có 2 user trong tab "People" :

image

Chú ý được có id user anonymous

(Chế độ truy cập anonymous trong Jenkins cho phép người dùng truy cập vào Jenkins mà không cần phải đăng nhập. Mức độ truy cập và các quyền được cấp cho người dùng anonymous có thể được cấu hình tùy chỉnh tùy thuộc vào nhu cầu bảo mật của hệ thống Jenkins.)

Ấn vào từng user một để xem có thông tin gì k , nhưng chả có thông tin gì cả ngoài user id =()

Xem phía dưới góc phải của trang , ta thấy đựa version Jenkins 2.441 :

image

Quick search xem nào , ta xác định được server dính CVE-2024-23897 (Khá là mới =() )

image

Lỗ hổng cho phép người dùng chưa được xác thực có thể đọc file bất kỳ nào trên Jenkins controller file system. Kẻ tấn công có thể lợi dụng để extract username và password người dùng.

Exploit

Sau khi xác định được CVE ,tìm một lúc cũng thấy được PoC ưng ý trên github.

(Jenkins 2.441 and earlier, LTS 2.426.2 and earlier does not disable a feature of its CLI command parser that replaces an @ character followed by a file path in an argument with the file's contents, allowing unauthenticated attackers to read arbitrary files on the Jenkins controller file system.)

Sau một hồi tìm hiểu , lỗ hỗng được xác định do cú pháp "@/path/to/file" trong Jenkins CLI được thay thế bằng nội dung của file. Download jenkins CLI (Jenkins-cli.jar file) :
wget http://10.10.11.10:8080/jnlpJars/jenkins-cli.jar

image

Run command: java -jar jenkins-cli.jar -s http://10.10.11.10:8080/ -http connect-node "@/etc/passwd" : (Chạy CLI jenkins bằng jar file với java)

image

Kết quả lỗi dump ra rất nhiều content file /etc/passwd.

Ta xác định được home directory Jenkins:

image

Flag 1

Đọc nội dung user.txt trong home directory với lệnh sau : java -jar jenkins-cli.jar -s http://10.10.11.10:8080/ -http connect-node "@/var/jenkins_home/user.txt" (sau vài lần thử fail với user* :>) Ta được flag đầu tiên :>>

image

Privilege escalation to Root

Sau một hồi tìm hiểu cấu trúc mặc định trong home directory của Jenkins , ta biết được các file config.xml chứa thông tin của người dùng:

image

Như lúc đầu ta thấy có user là "jennifer", thử đọc tệp ./users/jennifer/config.xml xem sao :

image

Không tìm thấy file cấu hình của jennifer. Xem gợi ý trên htb về file XML chứa thông tin các người dùng đã đăng ký =)) :

image

Gain Account!

Tiến hành đọc file ..../users/users.xml, ta tìm được tên người dùng jennifer được nối random string ( biện pháp để che giấu thư mục người dùng):

image

Thử đọc tệp cấu hình của user jennifer :

image image

Thu được pass được hash , đem đi crack trên hashcat , ta được pass là : "princess"

image

Thực hiện login vào portal Jenkins :

image

Truy cập Dashboard > jennifer > Credentials :

image

User jennifer lưu trữ thông tin SSH private key "root", có thể đây là thông tin đăng nhập vào máy chủ triển khai của Jenkins.

image

Vì có chức năng update credential này , và xem thêm gợi ý , ta tìm được đoạn encrypt Private Key SSH trong source page:

image

All done!

Do key được encrypt trên Jenkins , sử dụng ChatGPT =)) , tìm được cách decrypt private key SSH:

image

image

All done! . Có được private key SSH , ta login root user với syntax ssh -i privateKey [email protected]

Kết luận

Đây là bài lab khá hay mô phỏng về lỗ hổng "Unexpected read file" - CVE-2024-23897 trên Jenkins (ứng dụng trong CI pipeline ), cho phép đọc file tùy ý có thể gây leo thang đặc quyền. Hiện lỗ hổng đã được fix ở bản cập nhật mới nhất!