突破规则: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缓存欺骗
静态扩展名利用
当源服务器将字符(如$
)视为分隔符而缓存不识别时:
|
|
可欺骗CDN缓存/MyAccount
的敏感响应
静态目录利用
通过编码的点段绕过目录规则:
|
|
任意Web缓存投毒
键标准化漏洞
若缓存键经标准化而源服务器不识别:
|
|
可投毒高访问路径/home
前后端分隔符利用
- 后端分隔符:
/path|../../../target
- 前端分隔符:利用
#
等浏览器不编码的字符
防御措施
- 动态响应设置
Cache-Control: no-store, private
- 确保缓存键不经标准化处理
- 禁用冲突的URL解析配置
研究价值
- 揭示了CDN生态中的系统性解析缺陷
- 提供可规模化利用的新型攻击链
- 实现从低危漏洞到全站接管的升级路径
完整技术细节可下载PDF版白皮书:http1mustdie.com
DEFCON演讲视频:观看链接