利用HTTP请求头溢出来绕过Cloudflare的缓存密钥和WAF防护

本文详细披露了一个影响Cloudflare的HTTP请求头处理漏洞,攻击者通过发送超过94个请求头可导致解析溢出,从而绕过WAF规则和缓存密钥机制,实现缓存投毒攻击、存储型XSS等。文章包含漏洞原理、攻击示例和Cloudflare的修复方案。

绕过Cloudflare的缓存密钥和WAF:基于HTTP请求头溢出的漏洞分析

漏洞摘要(来自Cloudflare公共漏洞赏金项目)

我们的前端处理(Front Line,简称FL)在HTTP请求头解析方面存在一个限制,使得攻击者能够绕过已定义的规则集。openresty解析的HTTP请求头(包括内部头)最大数量为100个。此问题适用于所有基于HTTP头的规则集。攻击者能够以此绕过例如WAF规则,并执行缓存强制/投毒攻击。我们的WAF团队已实施一条全局规则,在提供过多请求头时进行阻止(WAF更新日志),建议启用此规则。

我们希望强调的是,http.request.headers.truncated字段可用于指示规则集是否未能看到所有请求头。此外,解析HTTP头时的长度问题将随着我们新前端处理(Front Line)实现的逐步部署得到缓解。

漏洞细节(来自研究者david96)

漏洞概述

HTTP请求头处理中的一个漏洞使得攻击者能够对所有Cloudflare客户发起缓存投毒攻击。通过在超过94个请求头后追加一个关键请求头(触发溢出),攻击者可以操纵缓存行为。

该漏洞使攻击者能够绕过Cloudflare的缓存密钥配置(参考Cloudflare缓存密钥文档)。当请求头数量超过94个时,自定义和默认的关键请求头都会从缓存密钥评估中被排除。

这也使得攻击者能够强制缓存本不应缓存的资产,从而绕过缓存规则。例如,根据特定请求头或Cookie配置为避免缓存的响应,却被缓存了起来。

当请求头数量超过94个时,Cloudflare对缓存规则、自定义缓存密钥和默认缓存密钥的评估就会停止。

攻击示例

例如,攻击者可以使用如下请求结构:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[94+ 个包含任意数据的请求头]
1: 1
1: 1
1: 1
1: 1
1: 1
1: 1
X-HTTP-Method-Override: HEAD
Host: victim.com
...

攻击者可以添加一个最初包含在缓存密钥中的请求头(例如X-HTTP-Method-Override)来操纵响应,并缓存错误或恶意的内容,以便在后续响应中提供。

这导致了缓存投毒拒绝服务攻击存储型XSS攻击

WAF绕过

攻击者还可以**绕过Cloudflare的Web应用程序防火墙(WAF)**以及自定义和托管的防火墙规则,使得恶意请求能够未经检查地到达源服务器。

此漏洞可被用于通过缓存投毒和WAF绕过来实现存储型XSS。例如,考虑一个网站有一条严格的规则,禁止闭合标签(如</tag>),并在其响应中反射User-Agent请求头。如果请求没有触发请求头溢出,该网站的WAF会返回403错误页面。通过操纵User-Agent,攻击者可以将这些问题串联起来,毒化缓存,并实现存储型XSS。

示例请求:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[94+ 个包含任意数据的请求头]
1: 1
1: 1
1: 1
1: 1
1: 1
1: 1
User-Agent: </script><svg onload=alert(1)>
Host: victim.com
...

当前前端处理行为

正如Cloudflare规则集引擎文档所述,当前的前端处理层并未缓解此问题。建议使用http.request.headers.truncated字段来检测和阻止请求头过多的请求。

时间线与状态

  • 报告者:david96
  • 报告时间:2025年3月10日 00:38 UTC
  • 报告对象:Cloudflare公共漏洞赏金项目
  • 报告ID:#3027461
  • 严重程度:高 (7 ~ 8.9)
  • 状态:已解决
  • 披露时间:2025年11月18日 08:08 UTC
  • 弱点分类:不恰当的访问控制 - 通用
  • CVE ID:无
  • 赏金:已发放(金额未显示)

关键时间节点:

  • 2025年3月12日,david96提交报告。
  • 2025年4月17日,Cloudflare员工将严重程度从中等更新为高。
  • 2025年4月23日,Cloudflare向david96和相关黑客发放了赏金。
  • 2025年5月13日,Cloudflare员工关闭报告,状态标记为“已解决”。
  • 2025年6月20日,david96请求公开披露报告。
  • 2025年10月,Cloudflare员工表示,在完全迁移到新的前端处理层后,WAF将具备检查/阻止所有请求头的能力。
  • 约8天前(相对报告时间),Cloudflare员工同意披露报告,报告随即被公开。

注释:Cloudflare指出,针对此问题,当前前端处理层的行为将保持不变。建议使用请求头截断检测机制(http.request.headers.truncated)。在完全迁移到新的前端处理层后,WAF将具备检查和阻止所有请求头的能力。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计