德国网络安全研究人员发现了一种新型Web缓存系统中毒攻击(CPDoS),攻击者可以利用这个使目标网站向大多数访问者传递错误页面或者不法内容。这种攻击会影响反向代理缓存系统,例如Varnish和一些广泛使用的内容分发网络(CDN)服务,包括Amazon CloudFront、Cloudflare、Fastly、Akamai和CDN77。
简而言之,内容分发网络(CDN)是服务器基于地理分布,它们位于网站的源服务器与其访问者之间,可优化网站服务性能。CDN服务仅存储源服务器的静态文件(包括HTML页面、javascript文件、样式表、图像和视频),并将其更快地传递给访问者,而无需一次又一次地返回源服务器。然后,每个地理分布的CDN服务器(称为边缘节点)也共享缓存文件的副本,并根据访问者的位置进行发送。通常,在规定的时间或手动清除后,CDN服务器会通过从源服务器更新每个网页副本,并将其存储以备将来使用。
此次攻击被称为CPDoS,是Cache Poisoned Denial of Service的简称,它主要存在于CDN服务器之间,配置错误的从源服务器返回的缓存网页或者响应页面资源。
据Hoai Viet Nguyen、Luigi Lo Iacono和Hannes Federrath三位德国研究人员所说,CPDoS攻击只要通过发送包含错误格式标头的单个HTTP请求就可以导致Web资源不可用。
“当攻击者针对可缓存资源发出HTTP请求时,就会出现问题,请求中包含不正确的字段,缓存系统会忽略这些字段,但在源服务器处理时就会引发错误。”
远程攻击者通过发送包含错误格式标头的HTTP请求来获取目标网页。
如果中间CDN服务器没有所请求资源的副本,它将把请求转发到Web源服务器,源服务器将由于标头格式错误而崩溃。
最后,源服务器将返回一个错误页面,最终将缓存服务器存储了这个错误页面。
现在,每当访问者尝试获取目标资源时,服务器将为他们提供缓存的错误页面,而不是原始内容。
CDN服务器还将相同的错误页面传播到CDN网络的其他边缘节点,从而使用户的目标网站资源不可用。
“值得注意的是,一个简单的请求就足以用错误页面替换缓存中的真实内容。这意味着,当他们扫描大量不规则网络流量时,该请求仍低于Web应用防火墙(WAF)和DDoS保护手段的检测阈值。”
“此外,CPDoS可以被用来阻止比如缓存补丁或固件更新,以防止修复设备和软件中的漏洞。攻击者还可以禁用重要网站(如在线银行或政府官方网站)上的安全警报或消息。”
为了对CDN开展这种缓存中毒攻击,格式错误的HTTP请求可以分为三种类型:
HTTP标头超大(HHO)——包含超大标头的HTTP请求,当Web应用程序使用源服务器大小限制范围外的标头缓存时,就会发生错误。
HTTP元字符(HMC)——此攻击未发送过大的标头,而是尝试绕过包含有害元字符的请求标头的缓存,例如换行符/回车符(\ n),换行符(\ r)或铃(\ a)。
HTTP方法覆盖(HMO)——使用HTTP覆盖标头绕过禁止DELETE请求的安全策略。
研究人员针对Web缓存系统和HTTP进行不同组合,试验三种攻击,发现亚马逊的CloudFront CDN最容易受到CPDoS攻击。
“我们分析了十五种Web缓存解决方案的错误页面的缓存行为,并将它们与HTTP规范进行了对比。我们确定了一种容易受CPDoS攻击的代理缓存产品和五种CDN服务。”
该团队于2019年2月19日向被攻击的HTTP执行供应商和缓存提供商报告了他们的发现。AWS团队确认了CloudFront上的漏洞,并通过禁止“400 Bad Request”错误页面缓存来解决此问题。
微软也确认了已报告的问题,并在2019年6月的每月安全更新中发布了修复此漏洞(CVE-2019-0941)的更新程序。 Play Framework承认已报告问题,解决Play Framework1.5.3和1.4.6版本中 X-HTTP-Method-Override标头问题,进行产品修复以防御CPDoS攻击。
有关此次新的Web缓存中毒攻击及其变体的更多详细信息,可参考:https://cpdos.org/paper/Your_Cache_Has_Fallen__Cache_Poisoned_Denial_of_Service_Attack__Preprint_.pdf
*参考来源:thehackernews,Snadra1432编译,转载请注明来自FreeBuf.COM