Mã PoC cho lỗ hổng nghiêm trọng NGINX đã được công bố

Phần mềm16 tháng 5, 2026·3 phút đọc

Các chi tiết kỹ thuật và mã khai thác khái niệm (PoC) nhắm đến lỗ hổng nghiêm trọng vừa được vá trong NGINX đã xuất hiện. Được theo dõi là CVE-2026-42945 với điểm số CVSS 9.2, lỗi này đã tồn tại trong suốt 16 năm và có thể dẫn đến việc từ chối dịch vụ hoặc thực thi mã từ xa.

Mã PoC cho lỗ hổng nghiêm trọng NGINX đã được công bố

Các chi tiết kỹ thuật và mã khai thác khái niệm (PoC) nhắm đến một lỗ hổng có mức độ nghiêm trọng cao vừa được vá trong máy chủ web NGINX hiện đã có mặt.

Được theo dõi dưới mã định danh CVE-2026-42945 (điểm số CVSS là 9.2), vấn đề này đã được vá trong tuần này như một phần của bản phát hành bản vá hàng quý mới nhất của F5. Đáng chú ý, lỗ hổng này đã tồn tại trong hệ thống kể từ năm 2008, tức là 16 năm trước.

Máy chủ NGINXMáy chủ NGINX

Chi tiết kỹ thuật về lỗ hổng

Lỗi này được mô tả là một tràn bộ nhớ đệm heap (heap buffer overflow) nằm trong thành phần ngx_http_rewrite_module. Theo F5, lỗ hổng này có thể bị khai thác để kích hoạt việc khởi động lại, tạo ra điều kiện từ chối dịch vụ (DoS).

Ngoài ra, công ty cũng cảnh báo rằng thực thi mã từ xa (Remote Code Execution - RCE) cũng là khả năng có thể xảy ra nếu cơ chế Ngẫu nhiên hóa bố cục không gian địa chỉ (ASLR) bị vô hiệu hóa.

Theo Depthfirst, CVE-2026-42945 ảnh hưởng đến các máy chủ NGINX sử dụng các chỉ thị rewriteset. Nguyên nhân gốc rễ của vấn đề nằm ở việc sử dụng quy trình hai lần qua (two-pass process) trong công cụ script: một lần để tính toán kích thước bộ nhớ đệm cần thiết, và lần còn lại để sao chép dữ liệu.

Bảo mật mạngBảo mật mạng

Cơ chế khai thác

Do trạng thái nội bộ của công cụ thay đổi giữa hai lần qua này, nếu một thao tác thay thế (rewrite replacement) chứa dấu hỏi chấm (“?”) được sử dụng, một cờ không được truyền sẽ dẫn đến việc cấp phát bộ nhớ đệm có kích thước không đủ. Điều này khiến dữ liệu URI đã thoát (escaped URI data) do kẻ tấn công kiểm soát được ghi vượt quá giới hạn bộ nhớ heap.

"Bằng cách đệm URI yêu cầu bằng các dấu cộng, chúng ta có thể buộc hàm thoát (escaping function) mở rộng mỗi byte thành ba byte, làm tràn đoạn bộ nhớ đã cấp phát. Kích thước của sự tràn hoàn toàn nằm trong tầm kiểm soát của chúng tôi dựa trên số lượng ký tự có thể thoát mà chúng ta cung cấp", Depthfirst nhận định.

Nguy cơ thực thi mã từ xa

Vì không thể sử dụng byte null (null bytes) cho sự tràn, việc đạt được RCE yêu cầu phải ghi đè tất cả các trường trong vùng nhớ NGINX pool cho đến con trỏ mục tiêu, sau đó phá hủy pool ngay khi sự cố hỏng hóc header pool xảy ra mà không làm sập quy trình worker (worker process).

Công ty an ninh mạng giải thích rằng kỹ thuật khai thác sử dụng "cross-request heap feng shui" để làm hỏng con trỏ dọn dẹp (cleanup pointer) của ngx_pool_t liền kề (được phun qua phần thân POST, vì byte URI không thể chứa byte null), sau đó chuyển hướng nó đến một ngx_pool_cleanup_s giả mạo để gọi system() khi pool bị phá hủy.

Khắc phục và bản vá

F5 đã vá lỗ hổng này trong các phiên bản NGINX Plus 37.0.0, R36 P4 và R32 P6, cũng như trong các phiên bản mã nguồn mở NGINX 1.31.0 và 1.30.1. Các quản trị viên hệ thống được khuyến nghị khẩn trương cập nhật lên các phiên bản này để mitigate rủi ro bị tấn công.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗