Mô tả
Ngày 21/10/2026, Node.js phát hành bản cập nhật bảo mật khắc phục CVE-2026-111497, lỗi ghi ngoài vùng nhớ (out-of-bounds write, CWE-787) trong bộ giải mã Brotli đi kèm Node.js. Dữ liệu Brotli không hợp lệ do kẻ tấn công tạo ra có thể gây ghi đè bộ nhớ trong quá trình giải nén, dẫn tới rò rỉ bộ nhớ tiến trình hoặc thực thi mã từ xa (RCE).
Node.js không tự giải mã Brotli một cách mặc định; ứng dụng bị ảnh hưởng khi mã của ứng dụng hoặc một thư viện mà nó sử dụng giải nén dữ liệu Brotli độc hại từ kẻ tấn công, dù trong thân request gửi đến hay trong response mà ứng dụng chủ động tải về. Đáng chú ý, hàm fetch() của Node.js tự động giải nén response bằng Brotli khi header Content-Encoding chứa 'br'; do đó một máy chủ độc hại chỉ cần trả về response Brotli dị dạng là có thể chạm tới lỗ hổng. Theo phân tích công khai, lỗ hổng đã được minh chứng gây rò rỉ bộ nhớ và thực thi lệnh trên các bản chưa vá của cả ba nhánh 26.x, 24.x và 22.x.
- Severity: High
- CVSS: NVD chưa công bố điểm tại thời điểm viết
- CWE-787: Out-of-bounds Write
Phạm vi ảnh hưởng
Lỗ hổng nằm trong bộ giải mã Brotli đi kèm runtime Node.js, ảnh hưởng cả ba nhánh đang được hỗ trợ. Phiên bản bị ảnh hưởng và phiên bản vá:
- Node.js 26.x: nâng cấp lên 26.12.1 hoặc cao hơn.
- Node.js 24.x (LTS): nâng cấp lên 24.22.1 hoặc cao hơn.
- Node.js 22.x (LTS): nâng cấp lên 22.23.4 hoặc cao hơn.
- Các nhánh đã hết hỗ trợ (EOL, ví dụ 20.x trở xuống): luôn bị coi là bị ảnh hưởng và không nhận bản vá; cần nâng cấp lên nhánh còn được hỗ trợ.
Lưu ý: ứng dụng chịu rủi ro nếu có bất kỳ đường nào giải nén Brotli từ nguồn không tin cậy, bao gồm gọi fetch() tới máy chủ bên ngoài (response có Content-Encoding: br), chấp nhận request nén Brotli, hoặc dùng thư viện giải nén Brotli. Môi trường quản lý runtime (như Vercel) tự vá nhánh 22.x/24.x, nhưng dự án còn dùng 20.x phải tự đổi sang nhánh được hỗ trợ và redeploy.
Tác động
Lỗ hổng khai thác thành công có thể dẫn đến:
- Thực thi mã tùy ý trên tiến trình Node.js giải nén dữ liệu Brotli độc hại, với quyền của tiến trình đó
- Rò rỉ bộ nhớ tiến trình (có thể chứa secrets, token, dữ liệu phiên của người dùng khác)
- Từ máy chủ bị chiếm quyền, di chuyển ngang sang hạ tầng liên quan; rủi ro cao với dịch vụ gọi fetch() tới nguồn bên ngoài hoặc nhận dữ liệu nén từ client
Biện pháp khắc phục
- Nâng cấp Node.js lên 26.12.1, 24.22.1 hoặc 22.23.4 (hoặc mới hơn) tương ứng với nhánh đang dùng, càng sớm càng tốt. Node.js không nêu workaround cho lỗ hổng này, nâng cấp là biện pháp khắc phục
- Hệ thống chạy nhánh Node.js đã hết hỗ trợ (EOL) cần nâng cấp lên nhánh LTS còn được hỗ trợ (24.x hoặc 22.x) rồi redeploy, vì các nhánh EOL không nhận bản vá
- Rà soát các đường xử lý Brotli từ nguồn không tin cậy: dịch vụ gọi fetch()/HTTP client tới máy chủ bên ngoài, endpoint chấp nhận request nén (Content-Encoding: br), và các thư viện giải nén Brotli trong dependency; rebuild và redeploy container/image (gồm base image) sau khi nâng cấp để bản vá được triển khai thật sự
- Trong lúc chờ nâng cấp, cân nhắc chặn hoặc không chấp nhận Brotli từ nguồn không tin cậy ở tầng proxy/WAF (ví dụ loại bỏ Content-Encoding: br với request đến); đây chỉ là biện pháp giảm bề mặt tấn công, không thay thế việc cập nhật
Tham khảo