Nghiên cứu mới đã phát hiện ra rằng khung CONTINUATION trong giao thức HTTP/2 có thể bị khai thác để tiến hành các cuộc tấn công từ chối dịch vụ (DoS).
Kỹ thuật này đã được chuyên gia an ninh mạng Bartek Nowotarski đặt tên là HTTP/2 CONTINUATION Flood. Vấn đề này đã được báo cáo với Trung tâm điều phối CERT (CERT/CC) vào ngày 25 tháng 1 năm 2024.
CERT/CC cho biết trong một bài đăng vào ngày 3 tháng 4 năm 2024: “Có rất nhiều các gói tin HTTP/2 được gửi đến trong một luồng duy nhất nhưng không được giới hạn đúng cách về số lượng khung CONTINUATION”.
Kẻ tấn công có thể lợi dụng điều này để gửi các gói tin đặc biệt đến máy chủ mục tiêu:
- Gói tin có thể chứa một luồng khung CONTINUATION nhưng không được thêm vào danh sách tiêu đề trong bộ nhớ. Máy chủ vẫn sẽ xử lý và giải mã các khung này, dẫn đến tiêu thụ CPU và bộ nhớ cao bất thường.
- Gói tin có thể chứa một luồng khung CONTINUATION làm đầy danh sách tiêu đề, dẫn đến lỗi tràn bộ nhớ (OOM). Lỗi này có thể khiến máy chủ ngừng hoạt động hoặc bị sập.
Giống như HTTP/1, HTTP/2 sử dụng các trường tiêu đề trong các yêu cầu và phản hồi. Các trường tiêu đề này sẽ bao gồm các danh sách tiêu đề, lần lượt đượ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à được truyền đi, khi đó những đoạn khối này được gọi là khung CONTINUATION.
“Khung CONTINUATION (loại = 0x9) được sử dụng để truyền tiếp một chuỗi các đoạn khối tiêu đề”, theo tài liệu dành cho RFC 7540.
“Có thể gửi bất kỳ số lượng khung CONTINUATION nào, miễn là khung trước đó nằm trên cùng một luồng và là khung HEADERS , PUSH_PROMISE hoặc CONTINUATION và không có cờ END_HEADERS.”
Khung cuối cùng chứa các tiêu đề sẽ có cờ END_HEADERS, báo hiệu cho người nhận rằng đó là kết thúc của khối tiêu đề.
Theo Nowotarski, CONTINUATION Flood 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 xuất hiện vào tháng 10 năm 2023.
Chuyên gia cho biết : “Một máy đơn lẻ (và trong một số trường hợp nhất định, chỉ có một kết nối TCP hoặc một số khung) có khả năng làm gián đoạn tính khả dụng của máy chủ, gây ra các hậu quả nghiêm trọng và từ đó dẫn đến suy giảm hiệu suất đáng kể” . “Đáng chú ý là các yêu cầu cấu thành một cuộc tấn công không hề hiển thị trong nhật ký truy cập HTTP.”
Về cốt lõi, lỗ hổng này liên quan đến việc xử lý không chính xác các HEADERS và không giới hạn số lượng các khung CONTINUATION, từ đó mở đường cho tình trạng DoS.
Nói cách khác, kẻ tấn công có thể bắt đầu luồng HTTP/2 mới tới máy chủ mục tiêu bằng cách triển khai các khung HEADERS và CONTINUATION mà không có cờ END_HEADERS, tạo ra luồng tiêu đề không bao giờ kết thúc, dẫn đến tình trạng máy chủ HTTP/2 cần tiêu thụ nhiều bộ nhớ và CPU để phân tích và lưu trữ.
Mặc dù kết quả có thể khác nhau tùy thuộc vào cách triển khai, nhưng các tác động từ kỹ thuật tấn công này là rất nghiêm trọng: nhẹ thì có thể tạo ra các sự cố tức thì, nặng thì dẫn đến tình trạng hết bộ nhớ và cạn kiệt CPU, từ đó ảnh hưởng đến tính 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ý chính xác. Tuy nhiên, tài liệu không đề cập đến 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 ra hậu quả như thế nào trên các máy chủ.” Nowotarski cho biết.
Sự cố này ả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), Envoy proxy (CVE-2024-27919 and 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 nên 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 tối đa các mối đe dọa tiềm ẩn. Trong trường hợp không có cách khắc phục, bạn nên cân nhắc việc tắt tạm thời HTTP/2 trên máy chủ.
Nguồn: White hat