Race bộ mã hóa HPACK trong Go standard library net/http và golang.org/x/net/http2 có thể làm crash máy chủ HTTP/2

Lưu ý: Dữ liệu này chỉ có tính chất tham khảo, phục vụ nghiên cứu an ninh mạng.CyStack khuyến nghị người dùng không sử dụng các thông tin này nhằm các mục đích bất hợp pháp

Lỗ hổng CVE-2026-97032 là gì?

Lỗ hổng CVE-2026-97032 là lỗ hổng Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition') ảnh hưởng tới net/http (phiên bản bị ảnh hưởng: < 1.26.9), net/http/internal/http2 (phiên bản bị ảnh hưởng: 1.27.0-0 – < 1.27.2) và golang.org/x/net/http2 (phiên bản bị ảnh hưởng: < 0.60.0). Lỗ hổng này được xếp hạng ở mức Cao, với điểm CVSS 7.5. Các nguồn hiện có chưa ghi nhận lỗ hổng này bị khai thác.

Giới thiệu chung

Dữ liệu gốc

Các máy chủ HTTP/2 có thể bị crash do bộ mã hóa HPACK của chúng vô tình bị sửa đổi đồng thời. Điều này xảy ra vì máy chủ sửa đổi bộ mã hóa HPACK từ hai goroutine mà không có đồng bộ hóa: một goroutine dùng bộ mã hóa để mã hóa frame HEADERS trong phản hồi gửi cho client, còn goroutine kia thay đổi kích thước bảng của bộ mã hóa khi xử lý frame SETTINGS chứa SETTINGS_HEADER_TABLE_SIZE do client gửi. Client độc hại có thể liên tục gửi request đồng thời thay đổi kích thước bảng header để làm máy chủ bị crash.

Sản phẩm và phạm vi ảnh hưởng

Các phạm vi bị ảnh hưởng được xác nhận trong record gồm:

  • Go standard library net/http: các phiên bản trước 1.26.9.
  • Go standard library net/http/internal/http2: từ 1.27.0-0 đến trước 1.27.2.
  • golang.org/x/net/http2: các phiên bản trước 0.60.0.

Go công bố bản sửa cho nhánh net/http trong 1.26.9, cho nhánh net/http/internal/http2 trong 1.27.2, và gắn thẻ bản sửa golang.org/x/net là v0.60.0. Trạng thái của các nhánh hoặc bản phát hành song song không được liệt kê riêng không nên được suy ra chỉ từ các bản sửa này.

Chi tiết kỹ thuật

Lỗi nằm trong việc sử dụng bộ mã hóa HPACK dùng chung trong máy chủ HTTP/2 mà không đồng bộ hóa khi có hai goroutine cùng thao tác. Một goroutine dùng encoder để mã hóa frame HEADERS trong phản hồi gửi cho client, trong khi goroutine kia thay đổi kích thước bảng khi xử lý frame SETTINGS chứa SETTINGS_HEADER_TABLE_SIZE do client gửi. Đây là race condition thuộc CWE-362 tại các thành phần net/http, net/http/internal/http2 và golang.org/x/net/http2. Client kiểm soát giá trị kích thước bảng và có thể kết hợp việc thay đổi giá trị này với các request lặp lại để kích hoạt lỗi trong máy chủ HTTP/2. Dữ liệu tấn công đi qua kết nối mạng đến máy chủ HTTP/2, nhưng record không nêu chi tiết chính xác panic, assertion hoặc đường dẫn mã nào tạo ra crash. Bản sửa được mô tả là trì hoãn việc áp dụng SETTINGS_HEADER_TABLE_SIZE, lưu giá trị nhận được và chỉ áp dụng trước lần tiếp theo máy chủ ghi frame.

Khả năng khai thác

  • Có thể tiếp cận qua mạng đối với máy chủ HTTP/2 bị ảnh hưởng.
  • Theo các thuộc tính tấn công trong record, request không cần authentication, không cần user interaction và có attack complexity thấp.
  • Client độc hại có thể liên tục gửi request đồng thời thay đổi SETTINGS_HEADER_TABLE_SIZE để cạnh tranh với việc máy chủ mã hóa frame phản hồi.
  • Record đánh dấu public_exploit là false và không cung cấp trạng thái khai thác đã biết. Điều này không chứng minh rằng chưa từng có hoạt động khai thác ngoài phạm vi evidence hiện có.

Tác động kỹ thuật

Lỗi có thể cho phép client mạng không cần authentication làm crash máy chủ HTTP/2 bằng cách kích hoạt race trong HPACK encoder. Kết quả kỹ thuật được tài liệu hóa là mất khả dụng của tiến trình hoặc dịch vụ HTTP/2, có thể dẫn đến request thất bại, kết nối bị ngắt và cần restart hoặc failover. Record không xác định việc nâng quyền, truy cập dữ liệu hoặc thay đổi tính toàn vẹn dữ liệu; tác động trực tiếp được giới hạn ở availability. Mức độ gián đoạn thực tế phụ thuộc vào cách dịch vụ được triển khai, khả năng tự phục hồi và việc HTTP/2 có được mở cho client không tin cậy hay không.

Tác động đến tổ chức

  • Một client từ xa có thể làm tiến trình máy chủ HTTP/2 crash, gây gián đoạn hoặc mất khả dụng của dịch vụ phụ thuộc vào tiến trình đó.
  • Nếu dịch vụ không có cơ chế restart hoặc failover phù hợp, việc gửi request lặp lại có thể kéo dài thời gian gián đoạn và làm tăng chi phí vận hành.
  • Tác động được ghi nhận tập trung vào availability; record không xác định việc đọc dữ liệu hoặc sửa đổi dữ liệu do lỗi này.
  • Các ứng dụng nhúng HTTP/2 trong reverse proxy, API server hoặc dịch vụ nội bộ đều cần được kiểm tra nếu có thể nhận kết nối HTTP/2 từ nguồn không tin cậy.

Cách khắc phục

  1. Nâng Go standard library net/http lên 1.26.9 trong nhánh bị ảnh hưởng.
  2. Nâng Go standard library net/http/internal/http2 lên 1.27.2 trong nhánh bị ảnh hưởng.
  3. Nâng dependency golang.org/x/net/http2 lên v0.60.0.
  4. Rebuild và redeploy các binary sử dụng các package bị ảnh hưởng, sau đó xác minh artifact thực tế đã chạy là artifact đã được cập nhật.
  5. Evidence hiện có không cung cấp workaround vận hành tổng quát thay thế cho việc cập nhật. Không nên coi việc giới hạn request hoặc thay đổi cấu hình header là bản sửa cho race này nếu chưa có hướng dẫn cụ thể từ nhà cung cấp.

Cách phát hiện

  1. Lập inventory các binary và dependency Go có sử dụng máy chủ HTTP/2, sau đó kiểm tra sự hiện diện của net/http, net/http/internal/http2 hoặc golang.org/x/net/http2 trong module manifest, vendor tree và metadata build.
  2. Xác định các dịch vụ trực tiếp nhận kết nối HTTP/2 từ mạng không tin cậy, đặc biệt là dịch vụ có thể nhận frame SETTINGS từ client.
  3. Rà soát crash dump, panic report, restart loop và lỗi kết nối HTTP/2 xảy ra đồng thời với các request lặp lại hoặc thay đổi SETTINGS_HEADER_TABLE_SIZE. Đây là dấu hiệu phục vụ triage, không phải IOC được Go xác nhận.
  4. Đối chiếu artifact đang chạy với release đã sửa cho đúng nhánh package, thay vì chỉ kiểm tra một dependency Go chung.
  5. Không coi việc không thấy log crash là bằng chứng hệ thống không bị ảnh hưởng; cần hoàn tất kiểm tra dependency và artifact triển khai.
Nguồn (21)
Tìm hiểu thêm

Kiểm tra chuyên sâu cùng giải pháp quản lý rủi ro Web toàn diện

Giải pháp CyStack VulnScan liên tục phát hiện tài sản, xác minh lỗ hổng và giúp đội ngũ bảo mật ưu tiên khắc phục cho toàn bộ doanh nghiệp.