Lỗ hổng NGINX nghiêm trọng có thể làm treo Worker và cho phép thực thi mã từ xa

F5 đã phát hành bản vá cho một lỗ hổng NGINX nghiêm trọng cho phép kẻ tấn công từ xa, không cần xác thực kích hoạt lỗi tràn bộ đệm heap trong worker process thông qua các yêu cầu HTTP được tạo đặc biệt. CVE-2026-42533 đã được vá vào ngày 15 tháng 7 trong các phiên bản nginx 1.30.4 (stable), 1.31.3 (mainline) và NGINX Plus 37.0.3.1. Việc kích hoạt lỗ hổng có thể làm treo hoặc khởi động lại worker, gây ra tình trạng từ chối dịch vụ hoặc thực thi mã từ xa.
Lỗ hổng NGINX RCE

F5 đã phát hành các bản vá cho một lỗ hổng NGINX nghiêm trọng, cho phép kẻ tấn công từ xa, không cần xác thực kích hoạt lỗi tràn bộ đệm heap trong worker process bằng các yêu cầu HTTP được tạo đặc biệt. CVE-2026-42533 đã được vá vào ngày 15 tháng 7 trong các phiên bản nginx 1.30.4 (stable) và 1.31.3 (mainline), cùng với NGINX Plus 37.0.3.1; bất kỳ ai đang sử dụng các bản dựng cũ hơn đều nên nâng cấp ngay lập tức.

Việc kích hoạt lỗ hổng này có thể làm treo hoặc khởi động lại worker, gây ra tình trạ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 nó cũng có thể cho phép thực thi mã từ xa (remote code execution - RCE).

Cơ chế gây ra lỗi tràn bộ đệm

Lỗi tràn bộ đệm nằm trong script engine của nginx, phần mã có nhiệm vụ lắp ghép các chuỗi từ các chỉ thị (directives) tại thời điểm nhận yêu cầu. Nó chỉ xuất hiện dưới một cấu hình cụ thể: một map dựa trên regex mà biến đầu ra của nó được tham chiếu trong một biểu thức chuỗi sau khi một capture từ một khớp regex trước đó được thực hiện.

Dưới mô hình đó, quá trình đánh giá hai bước (two-pass evaluation) của engine bị phá vỡ. Bước đầu tiên đo lường kết quả cần bao nhiêu byte và cấp phát một bộ đệm phù hợp; bước thứ hai ghi các byte 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á regex của map giữa hai bước này sẽ ghi đè lên trạng thái đó.

Vì vậy, bước đo lường sẽ xác định kích thước bộ đệm cho capture ban đầu (một tham chiếu như $1 từ khớp location), trong khi bước ghi lại lấp đầy bộ đệm đó bằng một giá trị khác do kẻ tấn công kiểm soát kích thước. Bộ đệm trở nên quá nhỏ, và cả chiều dài lẫn nội dung của phần tràn đều đến trực tiếp từ yêu cầu HTTP.

Lỗ hổng này không ảnh hưởng đến mọi máy chủ nginx; mức độ phơi nhiễm phụ thuộc vào cấu hình chứ không chỉ là phiên bản. Khuyến cáo của F5 liệt kê lỗ hổng này ảnh hưởng đến NGINX Ingress Controller, Gateway Fabric, App Protect WAF và Instance Manager cùng với máy chủ cốt lõi và NGINX Plus.

Mức độ nghiêm trọng và các phiên bản bị ảnh hưởng

F5 chấm điểm lỗ hổng này là 9.2 trên thang CVSS v4 và 8.1 trên thang v3.1 cũ hơn, đồng thời đánh giá độ phức tạp của cuộc tấn công là cao. Mọi phiên bản nginx từ 0.9.6 đến 1.31.2 đều dính lỗ hổng, một phạm vi kéo dài từ năm 2011, khi map bắt đầu hỗ trợ regex.

CVE-2026-42533 đã được báo cáo cho F5 một cách độc lập bởi hơn một chục nhà nghiên cứu. Changelog của chính nginx ghi nhận bản vá là nhờ công của Mufeed VH từ Winfunc Research và người duy trì Maxim Dounin.

Khả năng vượt qua ASLR và thực thi mã từ xa

Một trong những người báo cáo, Stan Shaw (bí danh cyberstan), đã công bố một bài phân tích chi tiết đi xa hơn cả khuyến cáo chính thức. Trong khi F5 đặt điều kiện thực thi mã là ASLR phải bị vô hiệu hóa hoặc có thể vượt qua, Shaw lập luận rằng chính lỗ hổng này cung cấp khả năng vượt qua đó.

"Một người đọc khuyến cáo của F5 có thể kết luận một cách hợp lý rằng đây chỉ là lỗi DoS trên các hệ thống mặc định. Thực tế không phải vậy," Shaw nói.

Ông cho biết việc làm xáo trộn capture cũng hoạt động theo chiều ngược lại: khi capture bị xáo trộn nhỏ hơn capture ban đầu, bộ đệm có kích thước quá lớn sẽ trả lại dữ liệu heap chưa được khởi tạo. Trên bản dựng Ubuntu 24.04 mặc định, một yêu cầu GET duy nhất không cần xác thực có thể khôi phục các địa chỉ mà một payload cần để hoạt động.

Phân tích máy chủ NGINX

Bản vá và các biện pháp giảm thiểu tạm thời

Giải pháp khắc phục là nâng cấp lên nginx 1.30.4, 1.31.3 hoặc NGINX Plus 37.0.3.1. Đối với những người không thể vá ngay lập tức, biện pháp giảm thiểu tạm thời của F5 là chuyển các regex map bị ảnh hưởng sang dùng named captures (nhóm capture có tên). Theo Shaw, điều này đóng con đường tấn công chính và bao quát hầu hết các cấu hình.

Tuy nhiên, ông cũng cảnh báo rằng biện pháp giảm thiểu này vẫn để lại một con đường hẹp hơn: một map định nghĩa cùng một named group với regex của location sẽ dẫn đến cùng một lỗi tràn bộ đệm thông qua một đường dẫn mã thứ hai. Shaw khẳng định: "Nâng cấp lên 1.30.4 / 1.31.3 là giải pháp hoàn chỉnh duy nhất."

Dấu hiệu cần tìm trong cấu hình để xác định rủi ro là: một map dựa trên regex có biến xuất hiện trong một biểu thức chuỗi cùng với một capture được đánh số ($1, $2) từ một regex trước đó, với capture được ghi trước biến của map.

Công cụ quét cấu hình
Công cụ quét cấu hình của Shaw giúp tự động hóa việc kiểm tra này.

Điểm yếu chung của NGINX

Đây là lỗi 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 qua, sau Rift (CVE-2026-42945) vào tháng 5 và một lỗi capture chồng chéo trong module rewrite (CVE-2026-9256) vài ngày sau đó.

Cả ba đều thuộc cùng một lớp lỗ hổng: script engine hai bước của nginx xác định kích thước bộ đệm trong một bước và ghi vào đó trong bước tiếp theo, và mỗi lần việc ghi đều vượt quá kích thước đã đo lường. Điểm yếu chung là thiết kế hai bước luôn tin tưởng hoàn toàn vào phép đo của chính nó.

Tính đến ngày 20 tháng 7, CVE-2026-42533 vẫn chưa nằm trong danh mục lỗ hổng bị khai thác (Known Exploited Vulnerabilities) của CISA và chưa có mã khai thác công khai nào xuất hiện. Tuy nhiên, với việc mã khai thác của Rift đã xuất hiện chỉ vài ngày sau khi vá, người dùng được khuyến cáo nên nâng cấp sớm nhất có thể.