持續的洪水攻擊導致使用 HTTP/2.0 的伺服器出現問題

一種「持續洪水」攻擊方法的細節已被揭露,該方法影響 HTTP/2 協定的各種實現,包括 Apache httpd、Apache Traffic Server、Node.js、oghttp、Go net/http2、Envoy、oghttp 和 nghttp2。此漏洞可用於攻擊支援 HTTP/2.0 的伺服器,根據實現的不同,可能導致記憶體耗盡(請求處理停止或進程崩潰)或 CPU 負載過高(請求處理速度減慢)。據發現該漏洞的研究人員稱,該漏洞比去年發現的「快速重置」漏洞(當時曾被用來實施規模最大的 DDoS 攻擊)更為危險。

危險程度高的原因在於,為了擾亂工作… 服務器要導致系統崩潰或效能顯著下降,只需從一台普通電腦發起大量精心建構的請求即可。在某些情況下,甚至只需一個 TCP 連線就能發動攻擊。此外,攻擊相關的流量在普通使用者請求的日誌中並不顯眼。

此漏洞是由 HTTP/2 請求中 HEADERS 和 CONTINUATION 幀處理的特殊性引起的。 HTTP/2 使用 HEADERS 幀傳輸 HTTP 標頭,而 CONTINUATION 幀用於將 HTTP 標頭的發送拆分為多個階段(例如,當標頭無法裝入一個幀中,或者噹噹前階段可以填充的標頭應先發送,然後再發送尚無法確定值的標頭時)。在分階段發送標頭時,會先發送不帶 END_HEADERS 標誌的 HEADERS 幀,然後發送多個帶有附加標頭的 CONTINUATION 幀,最後以帶有 END_HEADERS 標誌的 CONTINUATION 幀結束發送。

此攻擊方法包括發送連續的 CONTINUATION 幀流,而不設定 END_HEADERS 標誌。此操作會導致傳輸 服務器 伺服器會將大量頭部資訊儲存在記憶體中,直到可用記憶體耗盡。除了耗盡記憶體之外,攻擊者還可以利用 HPACK 格式壓縮 CONTINUATION 幀,從而造成 CPU 負載過高。解析 HPACK 格式的 CONTINUATION 訊框需要耗費大量的運算資源。在 HTTP/1.1 實作中,使用了頭部大小限制和連接逾時機制來防止頭部泛洪攻擊。由於協定複雜性的增加,許多 HTTP/2 實作並未實現針對無限頭部發送的此類保護措施。

該漏洞對 Node.js 用戶最為危險 (CVE-2024-27983),因為漏洞只需向伺服器發送幾幀即可導致崩潰。由於 Node.js 中存在競爭條件,只需在發送未完成的標頭流時關閉連接即可透過斷言檢查導致崩潰(如果在關閉連接時帶有 END_HEADERS 標誌的 CONTINUATION 幀尚未到達,則會導致崩潰)。該漏洞已在 Node.js 18.20.1、21.7.2 和 20.12.1 版本以及最新版本的 llhttp 和 undici 庫中修復。新版本的 Node.js 還修復了一個不太嚴重的漏洞 (CVE-2024-27982),該漏洞屬於「請求走私」類,透過操縱「內容長度」值,攻擊者可以插入到前端和後端同一執行緒中處理的其他使用者請求的內容中。

其他 HTTP/2.0 實作中與 CONTINUATION 處理相關的漏洞:

  • oghttp (CVE-2024-27919) - 無限記憶體消耗。
  • Tempesta FW(CVE-2024-2758)- 限制繞過。
  • PHP 函式庫 amphp/http、amphp/http-client 和 amphp/http-server (CVE-2024-2653) - 無限記憶體消耗,直到完全耗盡可用記憶體。
  • Go 套件 net/http (CVE-2023-45288) - 造成高 CPU 負載。
  • nghttp2 函式庫(CVE-2024-28182)- 拒絕服務漏洞。
  • Apache Httpd(CVE-2024-27316 - 記憶體消耗和 CPU 負載過大。
  • Apache Traffic Server(CVE-2024-31309 - 資源消耗過多。
  • Envoy(CVE-2024-30255)-對 CPU 造成高負載(需要 300 Mbit/s 的流量才能完全載入一個 CPU 核心)。

來源: opennet.ru

為具有 DDoS 保護、VPS VDS 服務器的站點購買可靠的主機 🔥 購買具備 DDoS 防護的可靠網站寄存服務,包括 VPS 和 VDS 伺服器 | ProHoster