突破规则:Web缓存利用技术新探

本文深入探讨了Web缓存利用技术,包括如何利用URL解析差异实现任意缓存投毒和欺骗,揭示了CDN与源服务器间的解析不一致性问题,并提出了多种新型攻击手法及防御建议。

突破规则:Web缓存利用技术新探

背景

Web缓存

Web缓存技术通过指纹识别请求(通常基于URL部分或全部内容)来映射静态响应。现代系统普遍采用CDN(如CloudFlare、Akamai)作为分布式缓存代理网络。

投毒与欺骗

  • 缓存投毒:通过恶意负载匹配错误缓存键
  • 缓存欺骗:诱骗缓存存储含敏感信息的动态响应

URL解析差异

分隔符差异

不同框架/服务器的路径分隔符实现不一致:

  • Spring:分号作为矩阵变量分隔符(/path;var=val/path
  • Rails:点号作为视图格式分隔符(/path.html/path
  • OpenLiteSpeed:空字节截断路径(/path%00aaa/path
  • Nginx:换行字节在重写规则中作为分隔符

标准化差异

  • 编码解析:各CDN对%3F等编码字符的处理不一致
  • 点段标准化:Apache/Nginx对/hello/..%2fworld的解析结果不同

任意Web缓存欺骗

静态扩展名利用

当源服务器将字符(如$)视为分隔符而缓存不识别时:

1
GET /MyAccount$../style.css

可欺骗CDN缓存/MyAccount的敏感响应

静态目录利用

通过编码的点段绕过目录规则:

1
GET /profile;%2e%2e/static/logo.png

任意Web缓存投毒

键标准化漏洞

若缓存键经标准化而源服务器不识别:

1
GET /<script>alert(1)/../../home

可投毒高访问路径/home

前后端分隔符利用

  • 后端分隔符/path|../../../target
  • 前端分隔符:利用#等浏览器不编码的字符

防御措施

  1. 动态响应设置Cache-Control: no-store, private
  2. 确保缓存键不经标准化处理
  3. 禁用冲突的URL解析配置

研究价值

  • 揭示了CDN生态中的系统性解析缺陷
  • 提供可规模化利用的新型攻击链
  • 实现从低危漏洞到全站接管的升级路径

完整技术细节可下载PDF版白皮书:http1mustdie.com
DEFCON演讲视频:观看链接

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