Web 缓存欺骗攻击:路径混淆与 CDN 静态缓存滥用
原创
Red Hunter
Red Hunter
黑白之道
2026年10月8日 09:00
韩国
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
<img src=\"http://target.example/myprofile/x.css\">——浏览器会自动请求Step 4:受害者点击访问 受害者已登录态下访问 http://target.example/myprofile/x.css,后端路由命中 myprofile 视图,渲染出受害者个人信息;CDN 看到 .css 后缀 + 响应头允许缓存,把它存到边缘节点。
Step 5:攻击者未登录拉取 攻击者开一个完全无登录态的浏览器(或用 curl 不带 Cookie),访问同一 URL:
curl http://target.example/myprofile/x.css
# 返回受害者的个人信息 HTML
五、检测与识别
自动化检测可以借 Burp Suite 的扩展和现成 PoC:
- Burp Cache Deception Scanner — 自动遍历带 Cookie 的页面,挨个加
.css、.jpg测试缓存行为 - Web Cache Deception Burp 插件 —
Smuggler风格 - 手工检测流程:登录后访问
/myprofile/x.css→ 看响应是否有Cache-Control: no-store、Vary: Cookie、响应码是否是 200 → 看 CDN 是否返回Age头(说明被缓存了)
判定标准:
- 受害者访问后,CDN 响应里出现
Age、X-Cache: HIT、CF-Cache-Status: HIT等字段 → 已缓存 - 未登录访问同一 URL 能拿到登录态下的内容 → WCD 成立
六、防御方案
按层级给:
应用层:
- 敏感路径响应头强制
Cache-Control: private, no-store - 关键响应加
Vary: Cookie或Vary: Authorization - 视图层校验完整路径,不接受
myprofile/x.css这种后缀混搭
框架层:
- Django 用更精确的正则:
url(r'^myprofile/?$', ...),锚定结尾 - Express.js 不混用
app.use静态托管和动态路由 - Nginx
location块用精确匹配(= /myprofile)或正则(~ ^/myprofile$)
CDN 层:
- 默认开启\"区分 Cookie 的缓存键\"(Cloudflare 高级规则可配)
- 敏感路径走\"绕过缓存\"规则
- 监控
X-Cache: HIT在敏感路径上的出现频次
HTTP 层补充:
- 加
X-Content-Type-Options: nosniff,避免响应被当成 CSS/JS 解析 - CSP(内容安全策略)限制内联脚本,即便攻击者拿到 HTML 也难以触发脚本执行
七、思考题
- 某应用
/api/me强制Cache-Control: no-store,但/api/me.json(带后缀)没有——攻击者能不能改 Path 让 JSON 后缀也路由到/api/me视图? - CDN 开启了\"按 Cookie 区分缓存键\",但应用只用 Cookie 做语言偏好(
lang=en/lang=zh)——攻击者能不能伪造 Cookie 让 CDN 命中受害者那条缓存? - WCD 和 CSRF(跨站请求伪造)都能诱导受害者访问特定 URL,两者诱导的方式有什么本质区别?
下一篇 day17 会拆解 Session Puzzling——多应用复用同一 session 时的逻辑混淆攻击。
八、素材出处
- Learn365 Day 16 原文:
https://github.com/harsh-bothra/learn365/blob/main/days/day16.md - Web Cache Deception Attack(Omer Gil 原文):
https://omergil.blogspot.com/2017/02/web-cache-deception-attack.html - PortSwigger Web Cache Deception 实验:
https://portswigger.net/web-security/web-cache-deception - GitHub 2017 WCD 案例:
https://github.blog/security/web-cache-deception-attack/
👇 点击阅读原文,访问我的网站
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论