Trang chủ Bài viết Bảo mật Node.js vá 16 lỗ hổng, gồm lỗi HTTP/2 làm sập máy chủ và rò rỉ dữ liệu kết nối khác
Bảo mật 13/11/2026 1 lượt xem

Node.js vá 16 lỗ hổng, gồm lỗi HTTP/2 làm sập máy chủ và rò rỉ dữ liệu kết nối khác

Node.js vá 16 lỗ hổng, gồm lỗi HTTP/2 làm sập máy chủ và rò rỉ dữ liệu kết nối khác

Node.js vừa phát hành bản cập nhật vá 16 lỗ hổng, trong đó có những lỗi nghiêm trọng liên quan tới HTTP/2 và HTTPS khiến máy chủ có thể bị sập hoặc làm rò rỉ dữ liệu của các kết nối khác. Các phiên bản đã sửa được tung ra cho cả ba nhánh đang được hỗ trợ: 22.23.5, 24.22.3 và 26.13.1. Trong số 16 lỗ hổng, có bảy lỗi được xếp mức cao.

Lỗi HTTP/2 làm sập máy chủ

Lỗ hổng CVE-2026-123863 chỉ cần một máy chủ HTTP/2 mặc định phản hồi trước khi toàn bộ phần thân yêu cầu được gửi tới. Theo dự án Node.js, đây là hành vi thông thường, và lỗi có thể bị khai thác qua cả kết nối TLS lẫn kết nối không mã hóa. Kẻ tấn công không cần xác thực vẫn có thể làm sập máy chủ chạy trên các nhánh 24.x và 26.x.

Một lỗi HTTP/2 khác, CVE-2026-123866, ảnh hưởng cả ba nhánh và có thể khiến máy chủ gửi cho máy khách những mảnh bộ nhớ, bao gồm cả phản hồi dành cho các kết nối khác. Từ phiên bản 24.22.0 và 26.9.0 trở đi, chỉ riêng máy khách đã có thể kích hoạt lỗi này. Trên các bản 22.x và các bản 24.x, 26.x cũ hơn, lỗi vẫn có thể xảy ra khi máy chủ tự đóng một luồng giữa chừng trong lúc phản hồi, chẳng hạn sau khi hết thời gian chờ.

Rò rỉ bộ nhớ qua HTTPS và TLS

Lỗ hổng CVE-2026-123864 trên máy chủ HTTPS của Node.js cho phép máy khách chưa xác thực đọc bộ nhớ từ các kết nối khác, bao gồm cả khóa riêng TLS và yêu cầu của người dùng khác. Lỗi ảnh hưởng cả ba nhánh được hỗ trợ và cần một handler gọi res.flushHeaders() trước khi phần thân yêu cầu tới đầy đủ, sau đó gọi res.end() kèm dữ liệu. Việc đọc bộ nhớ bị rò rỉ còn cần một route gửi lại hoặc lưu trữ phần thân yêu cầu. Các máy chủ HTTP thuần dựng bằng node:http không bị ảnh hưởng.

Các lỗi mức cao còn lại

  • CVE-2026-123865: máy khách có thể khiến máy chủ HTTP/2 mặc định giữ bộ nhớ và file descriptor vĩnh viễn, trên cả ba nhánh.
  • CVE-2026-123874: máy khách có thể làm hỏng bộ nhớ máy chủ trên 24.x và 26.x khi máy chủ phục vụ tệp bằng stream.respondWithFile() hoặc stream.respondWithFD(). Trên cả ba nhánh, việc hủy các lượt tải như vậy cũng có thể làm sập máy chủ (CVE-2026-123875, mức trung bình).
  • CVE-2026-126051: máy khách có thể làm sập máy chủ TLS trên 24.x và 26.x nếu máy chủ dùng các hook SNICallback, OCSPRequest, newSession hoặc resumeSession, hay server.addContext().
  • CVE-2026-123872: trên máy chủ TLS có quy tắc chứng chỉ máy khách chặt hơn cho một số tên miền, máy khách được chấp thuận cho tên miền khác có thể chuyển sang tên miền chặt hơn trong quá trình tái thương lượng TLS 1.2 mà không đáp ứng quy tắc. Cả ba nhánh đều bị ảnh hưởng.

Tám lỗi nêu trên đều nằm trong mã máy chủ HTTP/2, HTTPS và TLS của chính Node.js, nên chỉ đáng lo khi tiến trình Node.js trực tiếp nhận các kết nối đó.

Cách khắc phục

Theo khuyến cáo bảo mật của dự án, cách khắc phục duy nhất là cập nhật lên phiên bản đã sửa của từng nhánh. Khuyến cáo không đưa ra phương án thay thế cho những máy chủ chưa thể cập nhật ngay. Các nhánh đã hết vòng đời, gồm 20.x và 25.x, không nhận bản vá trong lần này và luôn được coi là bị ảnh hưởng.

Khuyến cáo không ghi nhận vụ tấn công nào lợi dụng các lỗ hổng này. Tài liệu cũng không nói liệu những máy chủ từng đáp ứng điều kiện của lỗi HTTPS có nên thay khóa TLS hay các bí mật khác sau khi cập nhật hay không. Năm lỗ hổng, trong đó có CVE-2026-123863 và CVE-2026-123864, được Chris Rohlf báo cáo với sự phối hợp của Claude và Anthropic Research.

Nguồn: The Hacker News

Trích nguồn từ: The Hacker News

Chia sẻ:

Bài viết liên quan

Zalo