Sáng nay, cộng đồng quản trị hệ thống và phát triển web toàn cầu đã bị đánh thức bởi một quả bom thực sự: CVE-2026-42945. Đây là lỗ hổng bảo mật NGINX mang điểm số CVSS 9.2 (CRITICAL), cho phép hacker tấn công trực tiếp từ xa mà không cần bất kỳ thao tác xác thực nào.
Nếu bạn đang quản lý các máy chủ chạy web, đặc biệt là các hệ thống backend định tuyến linh hoạt bằng PHP (như Laravel, WordPress) hay Node.js, hãy dừng mọi việc lại và kiểm tra server ngay lập tức. Các botnet tự động đã bắt đầu dò quét toàn cầu!

1. NGINX Rift: Quả bom nổ chậm ẩn mình suốt 18 năm
Được giới bảo mật đặt tên là "NGINX Rift", lỗ hổng này thực chất đã tồn tại từ năm 2008 (phiên bản 0.6.27) nhưng mãi đến tận tháng 5/2026 mới bị phát hiện.
Bản chất kỹ thuật: Lỗi xảy ra do tràn bộ đệm vùng nhớ Heap (Heap Buffer Overflow) trong module cốt lõi ngx_http_rewrite_module. Lỗ hổng bị kích hoạt khi Nginx xử lý một rule rewrite có chứa đồng thời 2 yếu tố:
-
Bắt ngược tham số từ Regex (Ví dụ:
$1,$2). -
Chuỗi thay thế có chứa ký tự dấu chấm hỏi (
?).
Ví dụ một cấu hình cực kỳ phổ biến nhưng đang gặp nguy hiểm:
rewrite ^/api/v1/users/([0-9]+)$ /index.php?user_id=$1 last;
Chỉ cần gửi một HTTP request được "chế" đặc biệt, hacker có thể đánh sập tiến trình Nginx worker (gây DoS) hoặc tệ hơn là chiếm quyền thực thi mã từ xa (RCE) trên máy chủ.
2. Hướng dẫn nâng cấp Nginx (Kèm kinh nghiệm xử lý lỗi thực tế)
Cách duy nhất để chống lại CVE-2026-42945 là nâng cấp Nginx lên phiên bản 1.30.1 hoặc nhánh mainline 1.31.0.
Tuy nhiên, trong quá trình thực hiện nâng cấp thực tế hôm nay, rất nhiều hệ thống đã gặp sự cố kẹt update và sập web. Dưới đây là các bước chuẩn xác nhất để bạn vượt qua.
Vấn đề 1: Lỗi 403 / Not Found khi dùng kho PPA (Ubuntu/Debian)
Nếu máy chủ của bạn đang dùng kho PPA của Ondřej Surý, lệnh apt update lúc này rất có thể sẽ báo lỗi 403 Forbidden hoặc ppa not found. Lý do là hàng triệu server đang đồng loạt kéo bản vá khiến hệ thống Launchpad quá tải và phải đóng tạm thời.
Cách giải quyết: Bỏ PPA cũ, cài trực tiếp từ kho Official của Nginx.
# 1. Dọn dẹp PPA đang lỗi sudo rm -f /etc/apt/sources.list.d/*nginx*.list sudo rm -f /etc/apt/sources.list.d/*ondrej*.list sudo apt clean # 2. Thêm khóa GPG và kho Mainline chuẩn của Nginx sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring -y curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list # 3. Cập nhật và cài đặt sudo apt update sudo apt install nginx -y
Vấn đề 2: Cập nhật xong thành công, nhưng Web... lăn ra sập!
Đây là tình huống "đứng tim" nhất nhưng lại rất dễ hiểu. Sau khi chuyển từ bản PPA sang bản Nginx Official, bạn chạy lệnh nginx -t báo thành công (syntax is ok), nhưng truy cập website lại văng ra trang "Welcome to Nginx" hoặc 404 Not Found.
Nguyên nhân: Bản Nginx mặc định của Ubuntu (PPA) đọc cấu hình tên miền ở thư mục /etc/nginx/sites-enabled/. Trong khi đó, bản Nginx Official mới cài lại mặc định chỉ đọc trong /etc/nginx/conf.d/. Thế là Nginx mới không hề biết website của bạn đang nằm ở đâu!
Cách Fix dứt điểm:
Mở file cấu hình chính:
sudo nano /etc/nginx/nginx.conf
Tìm đến block http { ... } và thêm dòng này vào để chỉ đường cho Nginx đọc lại các file cấu hình cũ:
include /etc/nginx/sites-enabled/*;
Xóa trang mặc định tránh xung đột và khởi động lại:
sudo rm -f /etc/nginx/conf.d/default.conf sudo systemctl restart nginx
3. Lời kết
Bảo mật không bao giờ là câu chuyện của "ngày mai". CVE-2026-42945 là một bài kiểm tra sức chịu đựng cho các hệ thống web toàn cầu. Việc cập nhật không chỉ là gõ vài dòng lệnh, mà còn đòi hỏi sự hiểu biết về cách Nginx tổ chức luồng xử lý và thư mục cấu hình để tránh tình trạng "vá được lỗi này lại đẻ ra lỗi khác".
Hãy chạy ngay lệnh nginx -v trên server của bạn. Nếu con số nhỏ hơn 1.30.1, bạn biết mình cần phải làm gì rồi đấy! Chúc hệ thống của các bạn luôn vững vàng trước sóng gió.








