Nghiên cứu mới đã phát hiện ra rằng khung CONTINUATION trong giao thức HTTP/2 có thể bị lợi dụng để thực hiện cuộc tấn công từ chối dịch vụ (DoS).

Kỹ thuật này đã được đặt tên là HTTP/2 CONTINUATION Flood bởi nhà nghiên cứu bảo mật Bartek Nowotarski, người đã báo cáo vấn đề này cho Trung tâm Điều phối CERT (CERT/CC) vào ngày 25 tháng 1 năm 2024.

“Rất nhiều triển khai HTTP/2 không giới hạn hoặc không làm sạch đúng mức khung CONTINUATION được gửi trong một luồng duy nhất,” CERT/CC nói trong thông báo vào ngày 3 tháng 4 năm 2024.

“Một kẻ tấn công có thể gửi gói tin đến máy chủ mục tiêu và gửi một luồng khung CONTINUATION không được thêm vào danh sách tiêu đề trong bộ nhớ nhưng vẫn được xử lý và giải mã bởi máy chủ hoặc sẽ được thêm vào danh sách tiêu đề, gây ra lỗi hết bộ nhớ (OOM).”

Tương tự như trong HTTP/1, HTTP/2 sử dụng các trường tiêu đề trong yêu cầu và phản hồi. Các trường tiêu đề này có thể bao gồm danh sách tiêu đề, sau đó được tuần tự hóa và chia thành các khối tiêu đề. Các khối tiêu đề sau đó được chia thành các đoạn khối và truyền trong các khung HEADERS hoặc được gọi là khung CONTINUATION.

“Khung CONTINUATION (loại=0x9) được sử dụng để tiếp tục một chuỗi các đoạn khối tiêu đề,” tài liệu cho RFC 7540 nói.

Bất kỳ số lượng khung CONTINUATION nào cũng có thể được gửi, miễn là khung trước đó nằm trên cùng một luồng và là một khung HEADERS, PUSH_PROMISE hoặc CONTINUATION mà không có cờ END_HEADERS được đặt.

Khung cuối cùng chứa tiêu đề sẽ có cờ END_HEADERS được đặt, đánh dấu cho điểm cuối xa rằng đó là cuối của khối tiêu đề.

Theo Nowotarski: CONTINUATION Flood là một lớp lỗ hổng trong một số triển khai giao thức HTTP/2, gây ra mối đe dọa nghiêm trọng hơn so với cuộc tấn công Rapid Reset được tiết lộ vào tháng 10 năm 2023.

“Một máy đơn lẻ (và trong một số trường hợp, chỉ một kết nối TCP đơn lẻ hoặc một số khung) có khả năng gây gián đoạn khả dụng của máy chủ, với hậu quả từ việc máy chủ gặp sự cố đến giảm hiệu suất đáng kể,” nhà nghiên cứu nói. “Đáng chú ý, các yêu cầu tạo thành cuộc tấn công không hiển thị trong nhật ký truy cập HTTP.”

Lỗ hổng này, ở bản chất của nó, liên quan đến việc xử lý không chính xác của HEADERS và nhiều khung CONTINUATION mở đường cho tình trạng DoS.

Nói cách khác, kẻ tấn công có thể khởi tạo một luồng HTTP/2 mới đối với máy chủ mục tiêu bằng cách sử dụng một triển khai có lỗ hổng và gửi các khung HEADERS và CONTINUATION mà không có cờ END_HEADERS được đặt, tạo ra một luồng tiêu đề không bao giờ kết thúc mà máy chủ HTTP/2 sẽ cần phân tích cú pháp và lưu trữ trong bộ nhớ.

Trong khi kết quả chính xác thay đổi tùy thuộc vào triển khai, tác động có thể từ việc máy chủ gặp sự cố ngay sau khi gửi một vài khung HTTP/2 và gặp sự cố hết bộ nhớ đến kiệt quệ CPU, từ đó ảnh hưởng đến khả dụng của máy chủ.

“RFC 9113 […] đề cập đến nhiều vấn đề bảo mật có thể phát sinh nếu các khung CONTINUATION không được xử lý đúng cách,” Nowotarski nói.

Đồng thời, nó không đề cập đến một trường hợp cụ thể trong đó các khung CONTINUATION được gửi mà không có cờ END_HEADERS cuối cùng, có thể gây hậu quả cho các máy chủ bị ảnh hưởng.

Vấn đề ảnh hưởng đến một số dự án như amphp/http (CVE-2024-2653), Apache HTTP Server (CVE-2024-27316), Apache Tomcat (CVE-2024-24549), Apache Traffic Server (CVE-2024-31309), proxy Envoy (CVE-2024-27919 và CVE-2024-30255), Golang (CVE-2023-45288), h2 Rust crate, nghttp2 (CVE-2024-28182), Node.js (CVE-2024-27983) và Tempesta FW (CVE-2024-2758).

Người dùng được khuyến nghị nâng cấp phần mềm bị ảnh hưởng lên phiên bản mới nhất để giảm thiểu các mối đe dọa tiềm năng. Trong trường hợp thiếu sửa lỗi, nên xem xét tạm thời vô hiệu hóa HTTP/2 trên máy chủ.

Nguồn The Hacker News