【翻译】Web缓存投毒防御策略绕过
字数 1249 2025-08-27 12:33:37

Web缓存投毒防御策略绕过技术详解

1. Web缓存投毒概述

Web缓存投毒是一种攻击技术,攻击者通过操纵缓存服务器存储恶意响应,从而影响其他用户的访问体验。这种攻击通常利用HTTP请求头中的漏洞,将恶意内容注入到缓存中。

2. 常见防御措施及其缺陷

2.1 Cloudflare的防御策略

Cloudflare部署了两种主要防御策略:

  1. WAF规则过滤:阻止包含XSS特征字符(如<)的请求头

    • 缺陷:并非所有漏洞都需要特殊字符,部分攻击仍可成功
  2. 请求头加入缓存键:将X-Forwarded-Host等请求头加入缓存键计算

    • 理论效果:使攻击者无法通过这些请求头进行缓存投毒
    • 实际缺陷:存在优先级设置和重复请求头问题

2.2 其他厂商的防御尝试

  • Akamai:引用Web缓存欺骗的缓解措施,对缓存投毒防护有限
  • Fastly:发布详细缓解建议
  • Tesla:使用WAF阻止特定字符串导致DoS问题

3. 关键绕过技术详解

3.1 Cloudflare缓存键绕过技术

3.1.1 优先级设置缺陷

Host头与X-Forwarded-Host头值相同时,Cloudflare不会将后者加入缓存键:

GET / HTTP/1.1
Host: waf.party
X-Forwarded-Host: waf.party

缓存键仅为:https://waf.party/

3.1.2 重复请求头利用

攻击者可提供重复的请求头:

  • 第一个实例:无害值
  • 第二个实例:包含payload

后端服务器通常会连接两个值(用逗号分隔),而Cloudflare只检查第一个实例:

GET / HTTP/1.1
Host: waf.party
X-Forwarded-Host: waf.party
X-Forwarded-Host: evil.net"/><script...

响应:

<a href="https://waf.party, evil.net"/><script...>

缓存键仍为:https://waf.party/

3.2 其他常见防御绕过技术

  1. 端口赋值绕过

    • 某些实现只验证host部分而忽略port
    GET / HTTP/1.1
    Host: redacted.com
    X-Forwarded-Host: redacted.com:123
    

    导致重定向到错误端口

  2. WAF误拦截导致DoS

    • Tesla案例:拦截特定字符串后缓存403响应
    • 影响所有后续访问者

4. 框架层面的防护措施

  • Django/Flask:近年已禁用对危险请求头的支持
  • Ruby on Rails:反应较慢,近期才开始部署修复

5. 防御建议

5.1 针对开发者的建议

  1. 全面验证:不仅检查host,还需验证port等所有相关部分

  2. 请求头处理

    • 拒绝重复请求头或明确处理规则
    • 对所有用户提供的头进行严格过滤
  3. 缓存策略

    • 避免缓存包含用户输入的响应
    • 谨慎设计缓存键生成逻辑

5.2 针对运维人员的建议

  1. WAF配置

    • 避免直接拦截并缓存错误响应
    • 考虑使用临时拦截而非永久缓存
  2. 缓存服务器配置

    • 确保所有可能影响响应的因素都包含在缓存键中
    • 定期审查缓存策略

6. 工具更新说明

Param Miner工具重要更新:

  • 默认禁用静态'fcbz'缓存爆破程序
  • 手动测试时需要明确指定缓存爆破值

7. 总结

Web缓存投毒防御需要多层次、全面的策略:

  1. 框架层面禁用危险功能
  2. 应用层面严格验证所有输入
  3. 缓存层面合理设计缓存键
  4. 运维层面谨慎配置WAF和缓存规则

当前最安全的默认配置属于已修补重复请求头问题的Cloudflare,但开发者仍需注意其他潜在攻击向量。

Web缓存投毒防御策略绕过技术详解 1. Web缓存投毒概述 Web缓存投毒是一种攻击技术,攻击者通过操纵缓存服务器存储恶意响应,从而影响其他用户的访问体验。这种攻击通常利用HTTP请求头中的漏洞,将恶意内容注入到缓存中。 2. 常见防御措施及其缺陷 2.1 Cloudflare的防御策略 Cloudflare部署了两种主要防御策略: WAF规则过滤 :阻止包含XSS特征字符(如 < )的请求头 缺陷:并非所有漏洞都需要特殊字符,部分攻击仍可成功 请求头加入缓存键 :将 X-Forwarded-Host 等请求头加入缓存键计算 理论效果:使攻击者无法通过这些请求头进行缓存投毒 实际缺陷:存在优先级设置和重复请求头问题 2.2 其他厂商的防御尝试 Akamai :引用Web缓存欺骗的缓解措施,对缓存投毒防护有限 Fastly :发布详细缓解建议 Tesla :使用WAF阻止特定字符串导致DoS问题 3. 关键绕过技术详解 3.1 Cloudflare缓存键绕过技术 3.1.1 优先级设置缺陷 当 Host 头与 X-Forwarded-Host 头值相同时,Cloudflare不会将后者加入缓存键: 缓存键仅为: https://waf.party/ 3.1.2 重复请求头利用 攻击者可提供重复的请求头: 第一个实例:无害值 第二个实例:包含payload 后端服务器通常会连接两个值(用逗号分隔),而Cloudflare只检查第一个实例: 响应: 缓存键仍为: https://waf.party/ 3.2 其他常见防御绕过技术 端口赋值绕过 : 某些实现只验证host部分而忽略port 导致重定向到错误端口 WAF误拦截导致DoS : Tesla案例:拦截特定字符串后缓存403响应 影响所有后续访问者 4. 框架层面的防护措施 Django/Flask :近年已禁用对危险请求头的支持 Ruby on Rails :反应较慢,近期才开始部署修复 5. 防御建议 5.1 针对开发者的建议 全面验证 :不仅检查host,还需验证port等所有相关部分 请求头处理 : 拒绝重复请求头或明确处理规则 对所有用户提供的头进行严格过滤 缓存策略 : 避免缓存包含用户输入的响应 谨慎设计缓存键生成逻辑 5.2 针对运维人员的建议 WAF配置 : 避免直接拦截并缓存错误响应 考虑使用临时拦截而非永久缓存 缓存服务器配置 : 确保所有可能影响响应的因素都包含在缓存键中 定期审查缓存策略 6. 工具更新说明 Param Miner工具重要更新: 默认禁用静态'fcbz'缓存爆破程序 手动测试时需要明确指定缓存爆破值 7. 总结 Web缓存投毒防御需要多层次、全面的策略: 框架层面禁用危险功能 应用层面严格验证所有输入 缓存层面合理设计缓存键 运维层面谨慎配置WAF和缓存规则 当前最安全的默认配置属于已修补重复请求头问题的Cloudflare,但开发者仍需注意其他潜在攻击向量。