Web缓存欺骗攻击详解:从URL混淆到敏感数据泄露

Web缓存欺骗攻击详解:从URL混淆到敏感数据泄露

1. 漏洞核心原理

Web缓存欺骗(Web Cache Deception) 是一种通过操纵缓存机制,诱使服务器将敏感内容缓存到公开URL的攻击技术。当满足以下条件时可能发生:

  1. 网站使用CDN/反向代理缓存(如Cloudflare、Varnish)

  2. 动态内容返回时未正确设置Cache-Control

  3. URL路径可被攻击者预测或构造

经典攻击链

20250619101457693-image

2. 攻击类型与复现

(1) 基础路径欺骗

目标URL
https://victim.com/profile.php/nonexistent.css

攻击过程

  1. 用户登录后访问上述链接

  2. 服务器返回profile.php的内容(因.css不存在)

  3. CDN缓存profile.php的内容到nonexistent.css路径

  4. 攻击者访问nonexistent.css获取缓存数据

(2) 参数混淆攻击
https://victim.com/search?q=hello/../profile.css

利用条件

  • 服务器规范化路径时保留缓存键

  • CDN忽略?后的参数差异

(3) 浏览器缓存投毒
<!-- 恶意页面代码 -->
<img src="https://victim.com/account-settings/dummy.jpg">

效果: 用户浏览器缓存敏感页面到图片URL

3. 敏感数据泄露案例

实际漏洞案例

  • PayPal(2017)
    https://www.paypal.com/myaccount/home/attack.css 缓存用户账单信息

  • Facebook(2019)
    通过/.well-known/change-password路径缓存CSRF令牌

自动化工具检测

# 使用Param Miner扫描(Burp插件)
java -jar burp_suite.jar --scan-cache-deception

4. 企业级防御方案

(1) 缓存层防护
方案 配置示例 作用
路径白名单 Nginx `location ~* .(css js)$` 仅缓存静态资源
用户隔离 Cache-Control: private 禁用共享缓存
内容校验 Vary: Cookie, Authorization 区分用户身份
(2) 代码层修复
// 强制敏感页面不缓存
header("Cache-Control: no-store");
header("Pragma: no-cache");

// 检查文件扩展名合法性
if (preg_match('/\.(css|js|png)$/', $_SERVER['REQUEST_URI'])) {
    http_response_code(404);
    die();
}
(3) 云服务配置
  • AWS CloudFront

  • {
      "CachePolicy": {
        "DefaultTTL": 0,
        "HeaderBehavior": "whitelist",
        "Headers": ["Authorization"]
      }
    }

    Cloudflare规则

    if (http.request.uri contains "/account") {
      set Cache-Control "private, max-age=0"
    }

5. 渗透测试方法论

  1. 识别缓存层

    • 检查X-Cache: HIT响应头

    • 使用curl -I https://target.com/resource观察Age

  2. 构造恶意请求

GET /settings/../style.css HTTP/1.1
Host: victim.com
  1. 验证缓存泄露

    • 不同设备/IP访问目标URL

    • 检查是否返回其他用户数据

6. 历史漏洞与修复

厂商 漏洞路径 修复方案
GitHub /settings/profile.css 强制no-cache
Shopify /admin/theme.css 启用路径校验
WordPress /wp-admin/install.php/..css 更新缓存插件
© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容