德國網絡安全研究人員發現新型緩存污染攻擊,攻擊者可利用 Web 緩存系統迫使目標網站向其訪問者交付錯誤頁面而非合法內容或資源。
該問題可能影響 Varnish 等反向代理緩存系統和廣為使用的內容分發網絡 (CDN) 服務背后的站點。Amazon CloudFront、Cloudflare、Fastly、阿卡邁和 CDN77 等均為 CDN 服務。
簡單講,內容分發服務 (CDN) 是位于網站源服務器及網站訪客之間的一組分布在不同地理位置的服務器,用于優化網站響應性能。
CDN 服務單純存儲/緩存來自源服務器的靜態文件,包括 HTML 頁面、JavaScript 文件、樣式表、圖片和視頻,以便能夠將之更快交付網站訪客,無需反復與源服務器交互。
分布各地的 CDN 服務器被稱為邊緣節點,共享緩存文件的副本,根據訪客的地理位置提供這些緩存文件。
通常,超過設定期限或手動清除后,CDN 服務器會從源服務器獲取每個網頁的新副本,刷新緩存并保存下來以留待后用。
CPDoS 攻擊如何破壞 CDN?
新型攻擊名為緩存污染拒絕服務,首字母簡寫為 CPDoS,是將中間 CDN 服務器錯誤配置為緩存源服務器 Web 資源或頁面的錯誤響應信息。
三名德國研究人員表示,CPDoS 攻擊僅靠發送一條包含異常頭部的 HTTP 請求,即可威脅網站 Web 資源的可用性。
攻擊者生成可緩存資源的 HTTP 請求,但在該請求中包含錯誤字段,這些字段可被緩存系統忽略,卻會導致源服務器處理出錯,然后問題就出現了。
CPDoS 攻擊機制:
遠程攻擊者向目標網站發送包含錯誤頭部的網頁 HTTP 請求。
如果中間 CDN 服務器上未存儲所請求資源的副本,該 CDN 服務器會將此請求轉發至源 Web 服務器,源服務器將因該異常頭部而出錯。
由此,源服務器返回錯誤信息頁,被緩存服務器當成所請求的資源保存下來。
此后,合法訪客試圖獲取該目標資源時,他們只會收到緩存的錯誤信息頁而不是所請求的原始內容。
該 CDN 服務器還會將此錯誤信息頁擴散至 CDN 網絡上的其他邊緣節點,抹殺受害網站上相應目標資源的可用性。
值得注意的是,一條請求便足以將緩存中的真實內容替換為錯誤信息頁。這意味著,此類請求不會觸發 Web 應用防火墻 (WAF) 和 DDoS 防護措施檢測警報,尤其是這些防護措施要掃描大量不規則網絡流量的時候。
而且,CPDoS 可被利用來封鎖通過緩存分發的補丁或固件更新,阻止設備及軟件漏洞修復。攻擊者還能禁用網上銀行或政府官網等關鍵業務網站上的重要安全告警或信息。
CPDoS 攻擊的三種形式
要執行此類針對 CDN 的緩存污染攻擊,異常 HTTP 請求可以是以下三種類型:
1. HTTP 頭部過大 (HHO)——包含過大頭部的 HTTP 請求,適用于 Web 應用所用緩存接受的頭部大小超過源服務器頭部大小限制的攻擊場景。
2. HTTP 元字符 (HMC)——與發送過大頭部不同,此攻擊試圖以包含有害元字符的請求頭繞過緩存,比如換行/回車符 (\n)、換行符 (\r) 或響鈴字符 (\a)。
3. HTTP 方法重寫 (HMO)——用 HTTP 重寫頭繞過阻止 DELETE 請求的安全策略。
無法抵抗CPDoS攻擊的CDN服務
研究人員針對不同 Web 緩存系統及 HTTP 實現組合測試了這三種攻擊,發現亞馬遜的 CloudFront CDN 在 CPDoS 攻擊面前最為脆弱。
我們分析了 15 種 Web 緩存解決方案的緩存行為,并將之與 HTTP 規范作對比,發現一種代理緩存產品和五種 CDN 服務無法抵御 CPDoS 攻擊。
研究人員完整測試結果如下:
請注意,相對于各自 CDN 服務中的缺陷,上述某些 CDN 服務背后的站點無法抵御 CPDoS 攻擊,是因其自身配置錯誤,未設置阻止緩存服務器存儲錯誤信息頁。
研究人員證實,實驗表明,CDN77 遵從了 RFC,沒有緩存規范中建議不緩存的錯誤信息頁。CDN77 確實未含我們發現的 CPDoS 漏洞。
但使用 CDN77 的網站如果源服務器配置錯誤,或提供了引發可緩存錯誤信息頁的方法,就扛不住 CPDoS 攻擊了。這不在緩存服務控制范圍之內,是服務擁有者自己的責任。
研究團隊已于 2019 年 2 月 19 日將此發現報告給了受影響 HTTP 實現廠商和緩存提供商。AWS 團隊證實 CloudFront 存在漏洞,通過默認禁止緩存狀態碼 400 Bad Request 出錯信息頁解決了該問題。
微軟也承認存在該問題,并在其 2019 年 6 月安全更新中修復了此編號 CVE-2019-0941 的漏洞。
Play Framework 同樣證實了該問題,通過在 1.5.3 和 1.4.6 版 Play Framework 中限制 X-HTTP-Method-Override 頭的影響,修復了其產品。
但包括 Flask 在內的其他受影響供應商,盡管聯系多次,卻一直未回應研究人員。
想了解此新型 Web 緩存污染攻擊及其變種的更多細節,可參閱題為《您的緩存已陷落:緩存污染拒絕服務攻擊》(*Your Cache Has Fallen: Cache-Poisoned Denial-of-Service Attack*)的研究論文。
《您的緩存已陷落:緩存污染拒絕服務攻擊》論文地址: