F5 đã phát hành bản vá cho lỗ hổng bảo mật nghiêm trọng trong NGINX, được xác định là CVE-2026-42533, cho phép kẻ tấn công từ xa không cần xác thực kích hoạt tràn bộ đệm heap trong tiến trình worker thông qua các yêu cầu HTTP được chế tạo đặc biệt. Lỗ hổng này được vá vào ngày 15/7 trong các phiên bản nginx 1.30.4 (ổn định), 1.31.3 (mainline) và NGINX Plus 37.0.3.1; người dùng các phiên bản cũ hơn cần nâng cấp ngay.
Lỗ hổng hoạt động như thế nào?
Lỗ hổng nằm trong script engine của nginx, phần mã chịu trách nhiệm ghép chuỗi từ các chỉ thị tại thời điểm xử lý yêu cầu. Nó chỉ xuất hiện trong một cấu hình cụ thể: một map dựa trên regex (biểu thức chính quy) có biến đầu ra được tham chiếu trong một biểu thức chuỗi sau khi lấy một capture từ một regex khớp trước đó. Trong cơ chế này, quá trình đánh giá hai bước của engine bị phá vỡ: bước đầu tiên đo kích thước bộ đệm cần thiết và cấp phát, bước thứ hai ghi dữ liệu vào. Cả hai bước đều đọc cùng một trạng thái capture dùng chung, và việc đánh giá map regex giữa hai bước sẽ ghi đè lên trạng thái đó, dẫn đến tràn bộ đệm.
Tác động và điểm CVSS
Kích hoạt lỗ hổng có thể làm treo hoặc khởi động lại tiến trình worker, gây ra tấn công từ chối dịch vụ (DoS). Trong trường hợp ASLR bị vô hiệu hóa hoặc có thể bị vượt qua, F5 cho biết lỗ hổng cũng có thể cho phép thực thi mã từ xa (RCE). F5 chấm điểm lỗ hổng này 9.2 trên thang CVSS v4 và 8.1 trên thang v3.1 cũ, đồng thời đánh giá độ phức tạp tấn công ở mức cao. Tất cả các phiên bản nginx từ 0.9.6 đến 1.31.2 đều bị ảnh hưởng, phạm vi này kéo dài từ năm 2011, khi map hỗ trợ regex.
Phạm vi ảnh hưởng và giải pháp
Lỗ hổng không ảnh hưởng đến mọi máy chủ nginx; mức độ phụ thuộc vào cấu hình, không chỉ phiên bản. F5 liệt kê lỗ hổng ảnh hưởng đến NGINX Ingress Controller, Gateway Fabric, App Protect WAF và Instance Manager cùng với máy chủ lõi và NGINX Plus, mặc dù tại thời điểm công bố, F5 chưa liệt kê các bản vá cho bốn sản phẩm đó. Giải pháp là nâng cấp lên nginx 1.30.4 hoặc 1.31.3, hoặc NGINX Plus 37.0.3.1. Đối với những người chưa thể vá ngay, biện pháp giảm thiểu tạm thời của F5 là chuyển các map regex bị ảnh hưởng sang sử dụng named captures, điều này đóng đường tấn công chính và bao phủ hầu hết các cấu hình.
Phân tích từ nhà nghiên cứu
Một trong những người báo cáo lỗ hổng, Stan Shaw (cyberstan), đã công bố một bài phân tích chi tiết đi xa hơn cảnh báo của F5. Shaw cho rằng lỗ hổng tự cung cấp khả năng vượt qua ASLR, và trên bản dựng Ubuntu 24.04 mặc định, một yêu cầu GET đơn giản không cần xác thực có thể thu hồi các địa chỉ cần thiết cho payload. Ông nói: “Người đọc cảnh báo của F5 có thể kết luận hợp lý rằng đây chỉ là DoS trên các hệ thống mặc định. Nhưng không phải vậy.” Shaw cho biết biện pháp giảm thiểu tạm thời để lại một đường tấn công hẹp hơn: một map định nghĩa cùng một nhóm named capture với location regex có thể đạt đến cùng một lỗi tràn thông qua một đường dẫn mã thứ hai, điều mà ông đã xác nhận với AddressSanitizer và không được đề cập trong cảnh báo của F5. “Nâng cấp lên 1.30.4 / 1.31.3 là giải pháp hoàn chỉnh duy nhất,” ông nói.
Bối cảnh và khuyến nghị
Đây là lỗ hổng tràn bộ đệm heap thứ ba trong mã đánh giá biểu thức của nginx được tiết lộ trong khoảng hai tháng, sau Rift (CVE-2026-42945) vào tháng 5 và một lỗi overlapping-captures trong module rewrite (CVE-2026-9256) vài ngày sau đó. Cả ba đều là cùng một lớp lỗ hổng: engine hai bước của nginx đo kích thước bộ đệm ở một bước và ghi vào bước tiếp theo, và mỗi lần ghi vượt quá kích thước đã đo. Tính đến ngày 20/7, CVE-2026-42533 chưa có trong danh mục lỗ hổng bị khai thác đã biết của CISA và chưa có mã khai thác công khai. Shaw cho biết ông sẽ công bố proof-of-concept của mình 21 ngày sau khi vá, và trường hợp Rift là bài học cảnh báo: mã khai thác của nó đã được công bố trong vòng vài ngày và nhanh chóng bị khai thác tích cực. Đó là lý do để nâng cấp trước khi mã khai thác cho lỗ hổng này xuất hiện.
Theo The Hacker News
Ảnh: heladodementa / Pixabay
