一項針對 HTTP/2 協定的新型攻擊「MadeYouReset」已被揭露並公開。Akamai 自家的 HTTP/2 實作並未受到此攻擊影響,但我們認為有必要詳細說明此漏洞的背景與技術細節。
負責任且協調的漏洞揭露是我們參與網際網路生態系統的重要一環,有助於我們主動保護您的安全,尤其是針對協定層級的弱點。
協定設計的挑戰
在設計用於網站服務的網路協定時,我們通常假設用戶端是為了連線並使用服務而與伺服器溝通。但真正的挑戰在於處理那些「非正常」的用戶端:
有錯誤的行為
運作方式超出預期
或是蓄意惡意,企圖癱瘓伺服器,阻止合法用戶在關鍵時刻存取服務
我們盡力讓協定具備抵抗非預期或惡意行為的韌性,但協定由人設計,難免有錯;實作也由人完成,難免有漏洞;而協定的假設有時也與實際應用的行為不符。
因此,當我們發現某個協定存在可被攻擊的弱點並需要修正時,並不令人意外。幸好,我們已有應對流程。
HTTP/2 快速重置(Rapid Reset)
2023 年,許多網路伺服器遭遇一項零時差漏洞「HTTP/2 Rapid Reset」(CVE-2023-44487),被網路犯罪分子用來發動大規模第七層 DDoS 攻擊。
HTTP/2 建立在 TCP 傳輸協定之上,資料會依序傳送。雖然用戶端與伺服器間存在延遲,但資料仍會依照順序抵達。HTTP/2支援多個同時進行的「串流」,這些串流存在於 TCP 的有序資料流中。
由於這種順序性,HTTP/2 規定當用戶端或伺服器改變串流狀態時,可以立即視為已更新,即使對方尚未接收到該變更。
假設一個 HTTP/2 連線允許最多 100 個活躍串流。當用戶端達到上限後關閉一個串流,就能立即開啟另一個。伺服器會先看到舊串流關閉,再看到新串流開啟——用戶端從未超過限制。
但許多伺服器在接收到請求後就開始處理,難以立即取消該工作,這就成了弱點。
用戶端可以發送 100 個高成本請求,然後立即取消並再發送 100 個新請求,如此循環。根據協定,這是合法行為,但伺服器卻可能陷入無限處理高成本請求的困境。
最新變種:MadeYouReset
Akamai 與其他主要網路業者迅速阻擋了 Rapid Reset 攻擊。但類似的手法仍可達到相同目的。如果攻擊者無法發送重置訊息,那是否能誘使伺服器發送重置訊息?
部分實作是透過限制用戶端發送的重置數量來緩解 Rapid Reset。若只計算用戶端發送的重置,伺服器主動發送的重置則不會觸發警示。
在 MadeYouReset 攻擊中,用戶端故意發送無效的控制訊息。根據規範,伺服器在接收到無效訊息時必須重置串流——因此得名「MadeYouReset」。一旦伺服器重置串流,用戶端就能開啟新串流,即使尚未收到重置回應。
常見的無效控制訊息包括:
請求結束後仍有額外資料
流量控制訊息提供過少(0)或過多(231)流量額度
訊息長度不符規範(過長或過短)
由於 Rapid Reset 後的防禦措施,多數實作未受 MadeYouReset 影響。Akamai 的 HTTP/2 實作採用更強韌的防禦機制,而非僅計算用戶端重置次數,因此未受影響。
然而,其他 HTTP/2 實作仍有不同程度的影響,我們持續追蹤這些專案的修補協調進度,作為標準作業流程與最佳實踐。
值得一提的是,目前尚未觀察到任何實際利用此漏洞的攻擊行為。此攻擊向量由特拉維夫大學的安全研究人員發現,透過Akamai 的漏洞獎勵計畫回報,並由 CERT 協調回應,在漏洞被公開前即完成修補。由於此漏洞在不同實作中表現不同,各軟體供應商已分別指派獨立的 CVE 編號。
更多細節請參閱 CERT 漏洞通報。
超越 HTTP/2
這類攻擊並非 HTTP/2 所獨有。最新版本的 HTTP 協定——HTTP/3——尚未出現類似漏洞,部分原因是其將串流管理交由下一代傳輸協定 QUIC處理。
自 QUIC 發佈以來,雖然出現過一些協定層級的攻擊,但 Akamai 的程式碼已具備有效的防禦機制。
QUIC 與 HTTP/3 標準化過程中,開發者 Marten Seemann(quic-go 作者)發現了針對 QUIC 路徑驗證與連線 ID
的潛在攻擊。同樣地,這些漏洞在公開前已私下通知各實作團隊,並完成修補或確認已具備防禦。
因此,Akamai 客戶在漏洞被利用前即已獲得保護。
歡迎關注Akamai
,通過定期更新的文章瞭解更多與Web、安全、雲計算、邊緣計算有關的資訊和見解。