Lỗ hổng nghiêm trọng trong Jenkins dẫn đến thực thi mã từ xa

09:30 | 01/02/2024

Một lỗ hổng nghiêm trọng trong giao diện dòng lệnh (CLI) của Jenkins cho phép kẻ tấn công lấy được các khóa mật mã có thể được sử dụng để thực thi mã tùy ý từ xa.

Lỗ hổng có định danh CVE-2024-23897, ảnh hưởng đến Jenkins phiên bản 2.441 và LTS 2.426.2 trở về trước, xảy ra do trình phân tích cú pháp lệnh (thư viện args4j) có một tính năng trong đó ký tự "@" của một đối số được thay thế bằng nội dung của tệp tin. Điều này cho phép kẻ tấn công đọc các tệp tùy ý trên hệ thống tệp của Jenkins controller bằng cách sử dụng mã hóa ký tự mặc định của tiến trình này.

Những kẻ tấn công không được xác thực có thể khai thác lỗ hổng bảo mật để đọc vài dòng đầu tiên của tệp, trong khi đối với những kẻ tấn công đã xâm phạm, ngay cả khi chỉ có quyền “read” thì vẫn có thể xem toàn bộ nội dung của tệp.

Lỗ hổng CVE-2024-23897 có thể bị khai thác để đọc nội dung của tệp nhị phân chứa khóa mật mã, trong một số điều kiện nhất định, nó sẽ tạo cơ hội cho một số tình huống thực thi mã từ xa (RCE) và cho phép kẻ tấn công giải mã các dữ liệu bí mật được lưu trữ, xóa các mục trong Jenkins và tải xuống Java heap dump của tiến trình Jenkins controller.

Theo hãng bảo mật Sonar (Thụy Sĩ) - công ty đã phát hiện ra lỗ hổng, nguyên nhân cốt lõi của vấn đề này là do lệnh gọi hàm đọc tệp trong đường dẫn sau ký tự "@" và mở rộng đối số mới cho mỗi dòng lệnh. Kẻ tấn công chỉ cần tìm một lệnh lấy số lượng đối số tùy ý và hiển thị chúng lại cho người dùng, sau đó khai thác lỗ hổng để truy cập vào nội dung của tệp mà các đối số được điền từ đó.

Sonar cho biết, bằng cách khai thác lỗi này, kẻ tấn công có thể đọc khóa SSH, mật khẩu, thông tin xác thực của các dự án (project), mã nguồn và các thông tin khác .

Lỗ hổng trong Jenkins 2.442 và LTS 2.426.3 được giải quyết bằng cách vô hiệu hóa tính năng phân tích cú pháp lệnh. Nếu không thể cập nhật lên bản phát hành mới nhất, quản trị viên nên vô hiệu hóa quyền truy cập vào Jenkins CLI, điều này có thể ngăn chặn việc khai thác hoàn toàn, thế nhưng chỉ là giải pháp tạm thời.

Lỗ hổng này tồn tại gần một năm sau khi Jenkins giải quyết hai lỗ hổng bảo mật nghiêm trọng là CVE-2023-27898 và CVE-2023-27905, có thể dẫn đến việc thực thi mã tùy ý trên các hệ thống mục tiêu.

Jenkins cũng đã công bố các bản vá cho một số lỗ hổng có mức độ nghiêm trọng trung bình và thấp, cũng như các bản sửa lỗi cho nhiều lỗ hổng có mức độ nghiêm trọng cao trong các plugin khác nhau, nhưng cảnh báo rằng CVE-2024-23904 - một lỗ hổng Log Command Plugin tương tự như CVE-2024-23897 vẫn chưa được vá.

Hiện tại, bằng chứng khái niệm (PoC) cho CVE-2024-23897 đã được xuất bản trên GitHub sau khi lỗ hổng được tiết lộ công khai, do đó người dùng cần phải cập nhật cài đặt của họ lên phiên bản mới nhất để ngăn ngừa rủi ro tiềm ẩn.