技术分享:一种新的滥用缓存密钥规范化的缓存投毒技术
字数 1749 2025-08-15 21:33:21
缓存投毒技术深度解析与防御指南
1. 缓存投毒概述
缓存投毒(Cache Poisoning)是一种攻击技术,攻击者通过操纵缓存系统,使其存储恶意构造的响应,进而影响其他用户的请求。当缓存配置不当或存在漏洞时,攻击者可以利用这些缺陷向所有请求相同资源的用户提供篡改后的响应。
1.1 缓存投毒DoS基本原理
攻击者利用目标设备中的缓存机制,通过特定的请求使缓存系统存储错误响应(如404 Not Found),导致后续所有请求该资源的用户都收到这个错误响应,从而实现拒绝服务(DoS)攻击。
2. 缓存投毒攻击技术详解
2.1 基于未缓存Header的攻击
攻击原理:
- 某些Header字段未被包含在缓存键(cache key)中
- 攻击者通过添加特殊Header使服务器返回错误响应
- 该错误响应被缓存后影响所有用户
实例分析:
GET /assets/login.js?cb=1
Host: assets.redacted.com
Accept-Version: iustin
HTTP/1.1 404 Not Found
X-Cache: Miss
当后续请求不带此Header时:
GET /assets/login.js?cb=1
Host: assets.redacted.com
HTTP/1.1 404 Not Found
X-Cache: Hit
关键点:
Accept-VersionHeader未被包含在缓存键中- Fastify框架无法禁用此Header(CVE-2020-7764)
- 攻击导致所有JS文件请求返回404错误
2.2 主机Header大小写规范化攻击
攻击原理:
- 根据RFC-4343,FQDN(全限定域名)应是大小写敏感的
- 但某些框架不严格遵循此规范
- 缓存系统将主机头值转换为小写作为缓存键
- 但后端服务器可能对大小写敏感
实例分析:
GET /images/posion.png?cb=1
Host: Cdn.redacted.com
HTTP/1.1 404 Not Found
X-Cache: Miss
后续请求:
GET /images/posion.png?cb=1
Host: cdn.redacted.com
HTTP/1.1 404 Not Found
X-Cache: Hit
关键点:
- 缓存系统将
Host头值转换为小写作为缓存键 - 但HAProxy等负载均衡器对大写
Host头返回404 - 攻击导致所有请求返回缓存中的404响应
2.3 路径规范化攻击
攻击原理:
- 缓存系统对路径进行规范化处理(如解析
..) - 但规范化后的路径可能指向不存在的资源
- 错误响应被缓存后影响所有用户
实例分析:
GET /maps/%2e%2e/map/4/77/16.png
Host: maps.redacted.com
HTTP/1.1 404 Not Found
X-Cache: Miss
后续请求:
GET /maps/1.0.5/map/4/77/16.png
Host: maps.redacted.com
HTTP/1.1 404 Not Found
X-Cache: Hit
关键点:
%2e%2e是..的URL编码形式- 缓存系统解析路径后请求不存在的资源
- 错误响应被缓存,影响所有版本请求
3. 攻击检测方法
3.1 识别潜在目标
- 扫描所有子域名,检测使用缓存的端点
- 查找缓存相关Header:
X-Cachecf-cache-statusCache-ControlAge
3.2 测试技术
-
Header爆破:
- 使用工具(如Param Miner)爆破潜在的未缓存Header
- 测试各种Header对响应的影响
-
大小写测试:
- 修改
Host头的大小写形式 - 观察缓存行为差异
- 修改
-
路径测试:
- 尝试路径遍历(
../或URL编码形式) - 修改路径中的版本号等看似静态的部分
- 测试路径规范化行为
- 尝试路径遍历(
4. 防御措施
4.1 通用防御策略
-
完整缓存键设计:
- 确保所有可能影响响应的因素都包含在缓存键中
- 特别注意Header、路径参数、查询参数等
-
规范化一致性:
- 确保缓存系统和后端服务器使用相同的规范化规则
- 对大小写、路径解析等处理保持一致
-
错误响应缓存控制:
- 避免缓存错误响应(如4xx/5xx状态码)
- 或为错误响应设置极短的缓存时间
4.2 针对特定攻击的防御
-
Header攻击防御:
- 审查所有Header对响应的影响
- 将关键Header纳入缓存键
- 禁用不必要的Header功能
-
主机头大小写防御:
- 确保负载均衡器和后端服务器对主机名大小写处理一致
- 在缓存前统一主机名大小写格式
-
路径攻击防御:
- 严格验证路径参数
- 避免缓存包含路径遍历的请求
- 对路径规范化进行一致性检查
4.3 运维最佳实践
-
缓存配置审计:
- 定期审查缓存配置
- 测试缓存键的完整性
-
安全测试:
- 将缓存投毒测试纳入安全评估流程
- 使用自动化工具扫描潜在漏洞
-
监控与日志:
- 监控异常缓存行为
- 记录缓存决策过程以便审计
5. 总结
缓存投毒攻击利用缓存系统与后端服务器处理请求时的差异,通过精心构造的请求使缓存存储恶意响应。本文详细分析了三种典型攻击技术:基于未缓存Header的攻击、主机头大小写规范化攻击和路径规范化攻击,并提供了相应的检测方法和防御措施。
防御缓存投毒的关键在于确保缓存键包含所有可能影响响应的因素,并保持缓存系统与后端服务器在处理请求时的一致性。通过合理的缓存配置、严格的安全测试和持续的监控,可以有效降低缓存投毒攻击的风险。