安全研究员尤斯汀·拉顿卡(Youstin)近期对多个网站(包括一些大流量在线服务)进行研究,发现70个不同影响的缓存中毒漏洞.据介绍,Web缓存投毒攻击的目标是Web服务器和客户端设备之间的中间存储点,例如point-of-presence服务器、代理和负载均衡器。中介通过存储本地版本的Web内容以加快向Web客户端的交付来帮助提高网站性能。Web缓存中毒攻击操纵缓存服务器的行为以及它们如何响应客户端对特定URL的请求。自2020年11月以来,Ladunca一直在研究网络缓存中毒;然而,就在几周后,他发现了两个新的缓存中毒漏洞:“这让我意识到缓存中毒的攻击面有多大”。在一篇博文中,他详细介绍了他如何发现和报告网络缓存中的漏洞,包括ApacheTrafficServer、GitHub、GitLab、HackerOne和Cloudflare等。“一个常见的模式是缓存服务器被配置为只缓存静态文件,这意味着攻击仅限于静态文件。即便如此,仍然有很大的影响,因为现代网站严重依赖JS和CSS,并且删除这些文件确实会影响应用程序的可用性。”多个Web缓存漏洞导致拒绝服务(DoS)攻击。缓存服务器使用一些标头作为键来存储和检索URL请求。通过在未加密的标头中使用无效值,Ladunca能够强制服务器缓存错误响应并在以后提供它们而不是原始内容,从而使客户无法访问目标页面。“就使用的技术而言,到目前为止,最常见的是通过未加密标头的CP-DoS,这可能占总调查结果的80%。”其他Web缓存中毒漏洞可能导致跨站点脚本(XSS)攻击。例如,漏洞可能会强制缓存服务器将JavaScript文件请求转发到攻击者控制的地址。在另一个案例中,Ladunca还能够将缓存请求从一台主机重定向到另一台容易受到基于DOM的XSS攻击的主机。Ladunca因发现70个Web缓存漏洞而获得了总计约40,000美元的漏洞赏金。同时,他也分享了一些相关经验,表示要保证CDN免受缓存中毒攻击,一个好的方法就是关闭错误状态码的缓存。他认为这种缓解措施应该可以防止很大一部分CP-DoS攻击。还推荐使用PortSwigger的ParamMiner,这是一个开源工具,可以识别隐藏的、未链接的参数。针对Web应用程序运行ParamMiner可以帮助检测可用于Web缓存中毒的未加密标头。不过Reddit上有网友反驳了Ladunca的建议,称“禁用错误状态码的缓存”绝对不是一个可行的方案。并指出,如果您禁用错误状态代码的缓存,则处理错误响应的每个请求都会回到原点,从而有效地创建错误率不断增加的DDoS攻击;这将使origin脱机,直到有人干预。可以在此处找到更多讨论细节。
