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