Nghiêm trọng: Lỗ hổng CVE Jenkins cho phép RCE, cần vá ngay!

Nghiêm trọng: Lỗ hổng CVE Jenkins cho phép RCE, cần vá ngay!

Một cảnh báo bảo mật nghiêm trọng đã được phát hành, chỉ ra nhiều lỗ hổng CVE có mức độ nghiêm trọng cao trong nhân Jenkins và plugin LoadNinja. Các lỗ hổng này có thể cho phép kẻ tấn công thực thi mã tùy ý và chiếm quyền điều khiển hoàn toàn các quy trình tích hợp liên tục và triển khai liên tục (CI/CD).

Phân tích các CVE nghiêm trọng trong Jenkins Core

Cảnh báo bảo mật được đưa ra vào ngày 18 tháng 3 năm 2026, nhấn mạnh các lỗ hổng có khả năng gây ra tác động nghiêm trọng. Các vấn đề này có thể dẫn đến việc kiểm soát hoàn toàn các máy chủ Jenkins, từ đó ảnh hưởng đến toàn bộ quy trình phát triển và triển khai phần mềm.

CVE-2026-33001: Lỗ hổng Xử lý Symbolic Link

Lỗ hổng nghiêm trọng nhất, được theo dõi là CVE-2026-33001, xuất phát từ cách Jenkins xử lý các liên kết tượng trưng (symbolic links) khi giải nén các kho lưu trữ định dạng .tar.tar.gz. Kẻ tấn công có quyền cấu hình mục (item configuration permissions) có thể tạo ra các kho lưu trữ độc hại để ghi tệp vào các vị trí tùy ý trên hệ thống tệp.

Do quá trình giải nén này xảy ra trực tiếp trên bộ điều khiển (controller), các tác nhân đe dọa có thể thực hiện các hành động sau:

  • Ghi các script độc hại vào thư mục init.groovy.d/.
  • Triển khai các plugin giả mạo vào thư mục plugins/.

Điều này cuối cùng cấp cho kẻ tấn công khả năng remote code execution hoàn toàn. Các tính năng như hành động hậu xây dựng “Archive the artifacts” và các bước pipeline cụ thể phụ thuộc rất nhiều vào chức năng dễ bị tổn thương này. Việc khai thác thành công có thể dẫn đến việc thực thi mã tùy ý với đặc quyền của tài khoản Jenkins trên hệ thống.

CVE-2026-33002: Lỗ hổng DNS Rebinding trong WebSocket CLI

Một lỗ hổng nghiêm trọng khác, được xác định là CVE-2026-33002, liên quan đến một lỗ hổng DNS rebinding trong quá trình xác thực nguồn gốc (origin validation) của giao diện dòng lệnh WebSocket (CLI). Jenkins dựa vào các tiêu đề yêu cầu HTTP để tính toán các nguồn gốc mong đợi.

Kẻ tấn công có thể bỏ qua quá trình xác thực này bằng cách lừa nạn nhân truy cập một trang web độc hại. Trang web này sẽ phân giải đến địa chỉ IP của bộ điều khiển Jenkins, từ đó thiết lập một kết nối WebSocket trái phép đến điểm cuối CLI. Nếu môi trường Jenkins cho phép quyền truy cập người dùng ẩn danh (anonymous user permissions) và hoạt động qua HTTP thuần túy, kẻ tấn công có thể thực thi các lệnh CLI.

Tùy thuộc vào cấp độ truy cập của người dùng ẩn danh, điều này có thể dẫn đến việc thực thi script Groovy và sau đó là remote code execution. Kịch bản tấn công bao gồm:

  1. Kẻ tấn công lừa nạn nhân truy cập trang độc hại.
  2. Trang độc hại sử dụng DNS rebinding để trỏ về IP của Jenkins controller.
  3. Thiết lập kết nối WebSocket trái phép đến Jenkins CLI.
  4. Thực thi lệnh CLI, có thể bao gồm script Groovy nếu có quyền.

Để kiểm tra trạng thái quyền người dùng ẩn danh, quản trị viên có thể sử dụng giao diện quản lý Jenkins hoặc kiểm tra các tập tin cấu hình liên quan đến bảo mật.

Lỗ hổng trong Plugin LoadNinja

Ngoài các lỗ hổng CVE trong nhân Jenkins, cảnh báo còn nêu bật một vấn đề mức độ trung bình trong Plugin LoadNinja, ảnh hưởng đến bảo mật thông tin nhạy cảm.

CVE-2026-33003 & CVE-2026-33004: Lưu trữ và Che dấu Khóa API không an toàn

Plugin LoadNinja có hai lỗ hổng được theo dõi là CVE-2026-33003 (lưu trữ không an toàn) và CVE-2026-33004 (thiếu che dấu). Theo lịch sử, plugin này đã lưu trữ các khóa API (API keys) dưới dạng không được mã hóa trong các tệp cấu hình công việc (job configuration files).

Hơn nữa, giao diện cấu hình đã không che dấu các thông tin đăng nhập này, khiến chúng bị lộ cho bất kỳ người dùng nào có quyền đọc mở rộng (extended read permissions) hoặc quyền truy cập vào hệ thống tệp. Điều này tạo ra rủi ro nghiêm trọng về việc lộ lọt thông tin xác thực, có thể dẫn đến việc truy cập trái phép vào các dịch vụ bên ngoài mà API key đó liên quan.

Ví dụ về cách khóa API có thể xuất hiện trong tệp cấu hình:


<plugin>
  <name>loadninja</name>
  <config>
    <apiKey>your_unencrypted_api_key_here</apiKey>
    <projectId>someProjectId</projectId>
  </config>
</plugin>

Sự thiếu che dấu trong giao diện người dùng cũng có nghĩa là người dùng có quyền truy cập vào giao diện cấu hình công việc có thể xem trực tiếp khóa API mà không cần truy cập vào hệ thống tệp.

Biện pháp Khắc phục và Cập nhật Bản vá

Để giảm thiểu rủi ro từ các lỗ hổng CVE này, quản trị viên hệ thống cần thực hiện các hành động khẩn cấp. Theo cảnh báo bảo mật của Dự án Jenkins, các biện pháp sau là bắt buộc:

Cập nhật Jenkins Core

Quản trị viên phải nâng cấp lên các phiên bản Jenkins Core mới nhất:

  • Jenkins 2.555 (weekly)
  • Jenkins 2.541.3 (LTS)

Các phiên bản này đã bao gồm các bản vá lỗi cho CVE-2026-33001CVE-2026-33002, khắc phục triệt để các vấn đề về xử lý symbolic link và DNS rebinding.

Cập nhật Plugin LoadNinja

Nếu việc vá lỗi ngay lập tức không khả thi, các tổ chức cần cập nhật plugin LoadNinja lên phiên bản 2.2.

Phiên bản này khắc phục các lỗ hổng CVE-2026-33003CVE-2026-33004 bằng cách cải thiện cách lưu trữ và hiển thị khóa API, đảm bảo rằng chúng được bảo vệ đúng cách.

Các Giải pháp Tạm thời

Đối với lỗ hổng DNS rebinding (CVE-2026-33002), các tổ chức có thể triển khai các biện pháp tạm thời sau nếu chưa thể cập nhật bản vá ngay lập tức:

  • Cấu hình xác thực nghiêm ngặt: Đảm bảo rằng bộ điều khiển Jenkins yêu cầu xác thực cho tất cả các truy cập.
  • Xóa hoàn toàn quyền cho người dùng ẩn danh: Loại bỏ mọi quyền truy cập cho người dùng ẩn danh để ngăn chặn việc thực thi lệnh CLI trái phép.

Việc áp dụng các giải pháp này sẽ giúp giảm bề mặt tấn công và bảo vệ hệ thống khỏi các cuộc khai thác tiềm ẩn cho đến khi có thể triển khai bản vá chính thức.