近日,平安研究员 Iustin Ladunca(Youstin)针对包含一些高流量在线服务在内的许多网站进行了调研,后果发现了 70 个具备不同影响的缓存中毒破绽。
Web 缓存中毒攻打的指标是 Web 服务器和客户端设施之间的两头存储点,例如 point-of-presence servers、代理和负载平衡器。中介机构通过存储本地版本的 Web 内容来放慢向 Web 客户端的传送速度,从而帮忙进步网站的性能。Web 缓存中毒攻打会操纵缓存服务器的行为,以及它们如何响应客户端的特定 URL 申请。
Ladunca 称本人从 2020 年 11 月开始钻研 Web 缓存中毒,并谈到:
“仅仅几周后,我就发现了两个新的缓存中毒破绽,这让我意识到缓存中毒的攻击面有多大。”在 Ladunca 的一篇博客中,他具体介绍了本人是如何发现和报告 Web 缓存破绽的,其中包含 Apache Traffic Server、GitHub、GitLab、HackerOne 和 Cloudflare 以及其余服务器。
“一个常见的模式是缓存服务器被配置为仅缓存动态文件,这意味着攻打仅限于动态文件,”ladunca 说。“即便如此,依然会产生重大影响,因为古代网站重大依赖 JS 和 CSS,而删除这些文件会真正影响应用程序的可用性。”
多个 Web 缓存破绽导致拒绝服务 (DoS) 攻打。缓存服务器应用一些 headers 作为 keys 来存储和检索 URL 申请。通过在 unkeyed headers 中应用有效值,ladunca 可能强制服务器缓存谬误响应,并在之后提供这些响应而不是原始内容,这将使客户端无法访问指标网页。
“就所应用的技术而言,迄今为止最常见的是通过 unkeyed headers 的 CP-DoS,这可能占总发现的 80%,”Ladunca 说。其余 Web 缓存中毒破绽可能会导致跨站点脚本 (XSS) 攻打。
例如,一个破绽能够强制缓存服务器将 JavaScript 文件申请转发到攻击者管制的地址。在另一种状况下,ladunca 可能将缓存申请从一个主机重定向到另一个容易受到基于 DOM 的 XSS 攻打的主机。
Ladunca 因其发现的 70 个 Web 缓存破绽而取得了总计约 40,000 美元的破绽赏金,同时也失去了无关爱护 Web 缓存服务器的重要教训。“我认为爱护 CDN 免受缓存中毒攻打的一个好办法是禁用谬误状态代码的缓存,这种缓解措施应该能阻止大部分 CP-DoS 攻打,”Ladunca 示意。
钻研人员还倡议应用 PortSwigger 的 Param Miner,这是一个开源工具,能够辨认暗藏的、未链接的参数。针对 Web 利用程序运行 Param Miner 能够帮忙检测可用于 Web 缓存中毒的 unkeyed headers。
不过 Reddit 上有网友对 Ladunca 的倡议进行了反驳:
“禁用谬误状态代码的缓存”相对不是一个可行的解决方案。如果禁用谬误状态代码的缓存,处理错误响应的每个申请都会返回到 origin,从而无效地创立了一个错误率一直减少的 DDoS 攻打;这将使得 origin offline,直到有人干涉。