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