Node.js vá lỗi Brotli và TLS: ba nhánh cần cập nhật ngay
Các bản 22.23.4, 24.22.1 và 26.12.1 xử lý lỗi giải nén, kiểm tra chứng chỉ và thư viện phụ thuộc; cần kiểm tra cả runtime trong container và worker.
Node.js ngày 21/10/2026 phát hành các bản cập nhật bảo mật 22.23.4, 24.22.1 và 26.12.1. Đợt vá xử lý nhiều vấn đề trong runtime, trong đó có lỗi ghi bộ nhớ ngoài giới hạn ở bộ giải mã Brotli và các đường vòng qua kiểm tra tên máy chủ trong chứng chỉ TLS. Mức nghiêm trọng cao nhất được dự án công bố là High.
Với đội vận hành ứng dụng JavaScript phía máy chủ, câu hỏi cần trả lời ngay là tiến trình nào vẫn dùng runtime cũ. Một máy đã cập nhật Node.js trên hệ điều hành vẫn có thể chạy container, dịch vụ nền hoặc bộ công cụ CI mang theo phiên bản khác.
Lỗi Brotli nằm ở tầng giải nén dữ liệu
Theo thông báo bảo mật của dự án, CVE-2026-111497 ảnh hưởng cả ba nhánh 22.x, 24.x và 26.x. Lỗi ghi ngoài giới hạn trong bộ giải mã Brotli có thể dẫn đến thực thi mã từ xa. Đây là khả năng của lỗ hổng, không phải bằng chứng mọi máy chủ Node.js đã bị xâm nhập.
Brotli là định dạng nén dữ liệu. Trong một hệ thống nhận hoặc xử lý nội dung nén từ bên ngoài, giải nén là bước chuyển dữ liệu thành đầu vào cho ứng dụng. Nếu tầng này xử lý bộ nhớ sai, rủi ro xuất hiện trước cả những kiểm tra nghiệp vụ mà lập trình viên viết ở phía trên.
Đánh giá mức phơi nhiễm vì vậy cần theo đường đi của dữ liệu: dịch vụ có giải nén dữ liệu không tin cậy hay không, quá trình đó chạy trong tiến trình nào và với quyền gì. Bài viết này không thực hiện thử nghiệm khai thác trên hệ thống thực tế.
TLS và DNS cũng có những cách hiểu đầu vào khác nhau
Ghi chú Node.js 26.12.1 liệt kê các thay đổi về chuẩn hóa địa chỉ IP và kiểm tra đầu vào DNS chứa byte NUL. Những lỗi thuộc nhóm này đáng quan tâm vì mã ứng dụng và thư viện nền có thể hiểu khác nhau về cùng một tên máy chủ.
Trong TLS, xác thực chứng chỉ cần gắn đúng danh tính được chứng thực với đích kết nối. Bật HTTPS chưa đủ nếu bước so khớp tên có thể bị vượt qua bằng cách biểu diễn địa chỉ khác thường. Đợt cập nhật sửa các trường hợp liên quan địa chỉ IP không chuẩn; lỗi dùng chữ số toàn chiều rộng CVE-2026-105483 được thông báo ảnh hưởng nhánh 26.x và 24.x.
Với DNS, vấn đề tên chứa NUL cho thấy đầu vào nhìn giống một chuỗi ở tầng này có thể bị cắt hoặc diễn giải khác ở tầng dưới. Biện pháp phù hợp là dùng runtime đã vá, thay vì chỉ chặn vài mẫu ký tự trong một endpoint.
Chọn đúng bản vá cho nhánh đang vận hành
Node.js 24.22.1 là bản bảo mật của nhánh LTS 24, còn 22.23.4 phục vụ nhánh LTS 22. Đội đang dùng nhánh 26 có bản 26.12.1. Việc có bản vá ở nhánh hiện tại giúp tách xử lý lỗ hổng khỏi một dự án chuyển phiên bản lớn.
Các gói phát hành còn cập nhật thành phần phụ thuộc. Nhánh 24 nhận OpenSSL và Undici mới; nhánh 22 có thêm cập nhật SQLite. Vì thế, chỉ nâng một gói npm trong ứng dụng không đồng nghĩa đã thay thư viện được đóng gói cùng Node.js.
Danh mục kiểm kê nên bao gồm API, tác vụ theo lịch, worker hàng đợi và môi trường xây dựng. Nếu runtime nằm trong image container, cần dựng và triển khai image đã cập nhật. Việc sửa môi trường của phiên SSH quản trị không tự thay tiến trình đang chạy.
Kiểm tra sau nâng cấp quan trọng hơn thông báo cài đặt
Một quy trình vận hành hợp lý là xác định phiên bản tại đúng môi trường thực thi, đối chiếu gói phân phối với ghi chú phát hành, thử ở staging rồi triển khai theo mức phơi nhiễm. Sau khi thay runtime, cần khởi động lại dịch vụ theo cơ chế triển khai để tiến trình thực sự dùng bản mới.
Những đường xử lý nên được kiểm tra hồi quy gồm kết nối HTTPS tới các đối tác, xử lý nội dung nén, giao tiếp HTTP tái sử dụng kết nối và những tác vụ có quyền truy cập tệp bị giới hạn. Đây là khuyến nghị biên tập về kiểm thử, không phải khẳng định các chức năng đó sẽ hỏng sau cập nhật.
Kết quả cần lưu lại là phiên bản của tiến trình đã triển khai và kiểm thử đã chạy. Một lệnh cài đặt thành công hoặc một máy quản trị có phiên bản mới chưa đủ chứng minh toàn bộ hệ thống đã hết phơi nhiễm.
Nguồn và ảnh đại diện
Nguồn chính: thông báo bảo mật 21/10; ghi chú 22.23.4, 24.22.1 và 26.12.1. Phạm vi ảnh hưởng nêu theo dự án; chưa có kiểm chứng độc lập về khai thác trong bài này.
Ảnh: logo Node.js, tác giả Ryan Dahl, từ Wikimedia Commons, theo giấy phép MIT/Expat và thông báo bản quyền tại trang nguồn. Logo dùng để nhận diện dự án trong tin tức, không hàm ý bảo trợ.