德国网络安全研究人员发现新型缓存污染攻击,攻击者可利用 Web 缓存系统迫使目标网站向其访问者交付错误页面而非合法内容或资源。

该问题可能影响 Varnish 等反向代理缓存系统和广为使用的内容分发网络 (CDN) 服务背后的站点。Amazon CloudFront、Cloudflare、Fastly、阿卡迈和 CDN77 等均为 CDN 服务。

简单讲,内容分发服务 (CDN) 是位于网站源服务器及网站访客之间的一组分布在不同地理位置的服务器,用于优化网站响应性能。

CDN 服务单纯存储/缓存来自源服务器的静态文件,包括 HTML 页面、JavaScript 文件、样式表、图片和视频,以便能够将之更快交付网站访客,无需反复与源服务器交互。

分布各地的 CDN 服务器被称为边缘节点,共享缓存文件的副本,根据访客的地理位置提供这些缓存文件。

通常,超过设定期限或手动清除后,CDN 服务器会从源服务器获取每个网页的新副本,刷新缓存并保存下来以留待后用。

CPDoS 攻击如何破坏 CDN?

新型攻击名为缓存污染拒绝服务,首字母简写为 CPDoS,是将中间 CDN 服务器错误配置为缓存源服务器 Web 资源或页面的错误响应信息。

三名德国研究人员表示,CPDoS 攻击仅靠发送一条包含异常头部的 HTTP 请求,即可威胁网站 Web 资源的可用性。

攻击者生成可缓存资源的 HTTP 请求,但在该请求中包含错误字段,这些字段可被缓存系统忽略,却会导致源服务器处理出错,然后问题就出现了。

CPDoS 攻击机制:

  • 远程攻击者向目标网站发送包含错误头部的网页 HTTP 请求。

  • 如果中间 CDN 服务器上未存储所请求资源的副本,该 CDN 服务器会将此请求转发至源 Web 服务器,源服务器将因该异常头部而出错。

  • 由此,源服务器返回错误信息页,被缓存服务器当成所请求的资源保存下来。

  • 此后,合法访客试图获取该目标资源时,他们只会收到缓存的错误信息页而不是所请求的原始内容。

  • 该 CDN 服务器还会将此错误信息页扩散至 CDN 网络上的其他边缘节点,抹杀受害网站上相应目标资源的可用性。

值得注意的是,一条请求便足以将缓存中的真实内容替换为错误信息页。这意味着,此类请求不会触发 Web 应用防火墙 (WAF) 和 DDoS 防护措施检测警报,尤其是这些防护措施要扫描大量不规则网络流量的时候。

而且,CPDoS 可被利用来封锁通过缓存分发的补丁或固件更新,阻止设备及软件漏洞修复。攻击者还能禁用网上银行或政府官网等关键业务网站上的重要安全告警或信息。

CPDoS 攻击的三种形式

要执行此类针对 CDN 的缓存污染攻击,异常 HTTP 请求可以是以下三种类型:

1. HTTP 头部过大 (HHO)——包含过大头部的 HTTP 请求,适用于 Web 应用所用缓存接受的头部大小超过源服务器头部大小限制的攻击场景。

2. HTTP 元字符 (HMC)——与发送过大头部不同,此攻击试图以包含有害元字符的请求头绕过缓存,比如换行/回车符 (\n)、换行符 (\r) 或响铃字符 (\a)。

3. HTTP 方法重写 (HMO)——用 HTTP 重写头绕过阻止 DELETE 请求的安全策略。

无法抵抗CPDoS攻击的CDN服务

研究人员针对不同 Web 缓存系统及 HTTP 实现组合测试了这三种攻击,发现亚马逊的 CloudFront CDN 在 CPDoS 攻击面前最为脆弱。

我们分析了 15 种 Web 缓存解决方案的缓存行为,并将之与 HTTP 规范作对比,发现一种代理缓存产品和五种 CDN 服务无法抵御 CPDoS 攻击。

研究人员完整测试结果如下:

请注意,相对于各自 CDN 服务中的缺陷,上述某些 CDN 服务背后的站点无法抵御 CPDoS 攻击,是因其自身配置错误,未设置阻止缓存服务器存储错误信息页。

研究人员证实,实验表明,CDN77 遵从了 RFC,没有缓存规范中建议不缓存的错误信息页。CDN77 确实未含我们发现的 CPDoS 漏洞。

但使用 CDN77 的网站如果源服务器配置错误,或提供了引发可缓存错误信息页的方法,就扛不住 CPDoS 攻击了。这不在缓存服务控制范围之内,是服务拥有者自己的责任。

研究团队已于 2019 年 2 月 19 日将此发现报告给了受影响 HTTP 实现厂商和缓存提供商。AWS 团队证实 CloudFront 存在漏洞,通过默认禁止缓存状态码 400 Bad Request 出错信息页解决了该问题。

微软也承认存在该问题,并在其 2019 年 6 月安全更新中修复了此编号 CVE-2019-0941 的漏洞。

Play Framework 同样证实了该问题,通过在 1.5.3 和 1.4.6 版 Play Framework 中限制 X-HTTP-Method-Override 头的影响,修复了其产品。

但包括 Flask 在内的其他受影响供应商,尽管联系多次,却一直未回应研究人员。

想了解此新型 Web 缓存污染攻击及其变种的更多细节,可参阅题为《您的缓存已陷落:缓存污染拒绝服务攻击》(*Your Cache Has Fallen: Cache-Poisoned Denial-of-Service Attack*)的研究论文。

《您的缓存已陷落:缓存污染拒绝服务攻击》论文地址:

https://cpdos.org/paper/Your_Cache_Has_Fallen__Cache_Poisoned_Denial_of_Service_Attack__Preprint_.pdf

声明:本文来自安全牛,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。