安全研究員 Iustin Ladunca(Youstin)近期針對許多網站(包括一些高流量的線上服務)進行了調研,結果發現了 70 個具有不同影響的快取中毒漏洞。
根據,Web 快取中毒攻擊的目標是網路伺服器和使用者端裝置之間的中間儲存點,如 point-of-presence servers、代理和負載均衡器。中間商通過儲存本地版本的 Web 內容來加快向 Web 使用者端的傳送速度,從而幫助提高網站的效能。Web 快取中毒攻擊操縱了快取伺服器的行為,以及它們如何響應客戶的特定 URL 請求。
Ladunca 自 2020 年 11 月開始研究 Web 快取中毒;然而僅僅幾周後,他就發現了:「這讓我意識到快取中毒的攻擊面有多大」。他在一篇自己是如何發現和報告網路快取漏洞的,其中包括有 Apache Traffic Server、GitHub、GitLab、HackerOne 和 Cloudflare 以及其他伺服器。
「一種常見的模式是快取伺服器被設定為只快取靜態檔案,這意味著攻擊只限於靜態檔案。即便如此,仍然有很大的影響,因為現代網站嚴重依賴 JS 和 CSS,刪除這些檔案會真正影響應用程式的可用性。」
多個 Web 快取漏洞導致拒絕服務(DoS)攻擊。快取伺服器使用一些 headers 作為 keys 來儲存和檢索 URL 請求。通過在 unkeyed headers 中使用無效值,Ladunca 能夠強制伺服器快取錯誤響應,並在之後提供這些響應而不是原始內容,這會使得客戶無法存取目標網頁。
「就所使用的技術而言,迄今為止最常見的是通過 unkeyed headers 進行 CP-DoS,這可能佔總發現的 80%。」
其他 Web 快取中毒漏洞可能會導致跨站點指令碼(XSS)攻擊。例如,一個漏洞可以強制快取伺服器將 JavaScript 檔案請求轉發到攻擊者控制的地址。在另一種情況下,Ladunca 還能夠將快取請求從一個主機重定向到另一個容易受到基於 DOM 的 XSS 攻擊的主機。
Ladunca 因其發現的 70 個網路快取漏洞,而獲得了總計約 4 萬美元的漏洞賞金。同時,他也分享了一些相關經驗表示,確保 CDN 免受快取中毒攻擊的一個好方法是禁用錯誤狀態程式碼的快取,他認為這種緩解措施應該能阻止很大一部分的 CP-DoS 攻擊。還建議使用 PortSwigger 的 Param Miner,這是一個開源工具,可以識別隱藏的、未連結的引數。針對 Web 應用程式執行 Param Miner 可以幫助檢測可用於 Web 快取中毒的 unkeyed headers。
不過 Reddit 上有網友對 Ladunca 的建議進行了,「禁用錯誤狀態程式碼的快取」絕對不是一個可行的解決方案。並指出,如果禁用錯誤狀態程式碼的快取,處理錯誤響應的每個請求都會返回到 origin,從而有效地建立了一個錯誤率不斷增加的 DDoS 攻擊;這將使得 origin offline,直到有人干預。
更多討論詳情可檢視。