后端与接口
CDN/反向代理缓存可能因路径混淆或缓存键操纵泄露已认证内容…
适用于测试 CDN、反向代理或应用缓存因路径混淆或缓存键操纵而将敏感认证内容或恶意内容错误提供给其他用户的风险。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
CDN/反向代理缓存可能因路径混淆或缓存通用
解决思路
- 区分两类目标:Web Cache Deception(窃取已认证数据)是诱导受害者请求一个缓存认为是静态资源的 URL,使应用仍返回已认证页面,再由攻击者读取缓存;Web Cache Poisoning(投递恶意内容)是操纵未进入缓存键的请求组件(header、cookie),让缓存存储恶意响应。
- 需要更深入技术时加载 CACHE_POISONING_TECHNIQUES.md,获取 Web Cache Poisoning 与 Web Cache Deception 的区别及攻击流对比。
- 需要未键控 header 投毒时,加载 CACHE_POISONING_TECHNIQUES.md,并测试 X-Forwarded-Host、X-Forwarded-Scheme、X-Original-URL、多个 Host header。
- 需要未键控参数投毒时,加载 CACHE_POISONING_TECHNIQUES.md,并测试 utm_content、fbclid、callback 等被反射但不在缓存键中的参数。
- 需要 Fat GET 缓存投毒时,加载 CACHE_POISONING_TECHNIQUES.md,并测试 body 参数被反射但不进入缓存键。
- 需要参数遮蔽时,加载 CACHE_POISONING_TECHNIQUES.md,并测试分号与重复参数解析差异。
- 需要 CDN 特定行为时,加载 CACHE_POISONING_TECHNIQUES.md,并研究 Cloudflare、CloudFront、Akamai、Varnish、Fastly 的缓存键组成、debug headers、ESI。
- 需要 Vary header 操作、缓存分区攻击、缺失 Vary 漏洞时,加载 CACHE_POISONING_TECHNIQUES.md。
- 识别可缓存路径模式:检查 CDN 通常按扩展名缓存的资源类型,包括 .css、.js、.jpg、.png、.gif、.svg、.ico、.woff、.woff2、.ttf、.pdf,有时包括 .json。
- 测试路径混淆:在已认证端点后追加静态扩展名,例如 https://target.com/api/me/info.css、https://target.com/account/profile/x.js、https://target.com/settings/avatar.png、https://target.com/dashboard/data.json。
- 测试路径遍历风格路径混淆:使用 https://target.com/account/profile/..%2fstatic/app.css。
- 验证缓存:以受害者身份携带认证 Cookie 请求,例如 curl -H "Cookie: session=VICTIM" https://target.com/account/profile/x.css。
- 检查第一次请求响应头:X-Cache: MISS、Age: 0。
- 以攻击者身份不带认证再次请求同一 URL,例如 curl https://target.com/account/profile/x.css。
- 检查第二次响应:若出现 X-Cache: HIT 且包含受害者的已认证内容,则判定为漏洞。
- 投递给受害者:通过钓鱼、消息或嵌入方式发送构造 URL,例如 https://target.com/account/profile/tracking.gif。
- 发现未键控输入:先确认缓存键通常包含 Host、URL path、query string。
- 测试通常不在缓存键中的输入:X-Forwarded-Host、X-Forwarded-Scheme、X-Original-URL、cookies、自定义 header。
- 测试 X-Forwarded-Host 是否被反射但未进入缓存键:curl -H "X-Forwarded-Host: evil.com" https://target.com/page;若响应包含 evil.com 且会缓存,则可投毒。
- 枚举常见未键控 header:X-Forwarded-Host、X-Forwarded-Scheme、X-Forwarded-Proto、X-Original-URL、X-Rewrite-URL、X-Host、X-Forwarded-Server、Forwarded、True-Client-IP。
- 通过 Host header 投毒:发送 GET / HTTP/1.1、Host: target.com、X-Forwarded-Host: evil.com,观察响应是否生成如 <link href="//evil.com/static/main.css">。
- 若上述恶意响应被缓存,则所有用户会加载攻击者的 CSS/JS,完成缓存投毒。
- 利用路径规范化差异:对比 CDN、应用、反向代理如何规范化路径。
- 确认 CDN(Cloudflare、Akamai 等)行为:按包含扩展名的完整 URL path 缓存。
- 确认应用(Rails、Django、Express 等)行为:可能忽略尾部路径段或扩展名。
- 确认反向代理(Nginx)行为:可能在转发前剥离或重写路径。
- 测试应用视为等价而 CDN 视为静态资源的路径:/account/profile、/account/profile/anything、/account/profile/x.css、/account/profile;.css。
- 识别差异:若 CDN 将 .css 视为可缓存静态资源而应用返回动态/认证内容,则存在漏洞。
- 测试 X-Forwarded-Host 导致 Open Graph / Meta Tag 注入:向目标页面发送 GET / HTTP/1.1、Host: target.com、X-Forwarded-Host: evil.com。
- 检查响应是否生成恶意 meta 标签,例如 <meta property="og:image" content="https://evil.com/assets/logo.png"> 或 <link rel="canonical" href="https://evil.com/">。
- 若响应被缓存,评估影响:通过注入 JS 路径实现 XSS、通过 canonical redirect 实现钓鱼、SEO 劫持。
- 测试路径分隔符技巧:分号(某些框架视为路径参数),例如 /account/profile;.css。
- 测试编码分隔符,例如 /account/profile%2F.css。
- 测试尾部点/空格,例如 /account/profile/.css、/account/profile .css。
- 防御缓存欺骗:仅缓存明确静态路径,例如 /static/*、/assets/*。
- 防御缓存欺骗:绝不只根据文件扩展名决定缓存。
- 防御缓存欺骗:在已认证端点设置 Cache-Control: no-store, private。
- 防御缓存欺骗:使用 Vary: Cookie 防止跨用户缓存命中。
- 防御缓存投毒:将所有被反射的 header 纳入缓存键。
- 防御缓存投毒:验证并清理 X-Forwarded-* header。
- 防御缓存投毒:对动态内容使用 Cache-Control: no-cache。
- 防御缓存投毒:在 CDN 边缘剥离未知 header。
- 测试清单:识别 CDN/缓存层,检查 X-Cache、Age、Via header。
- 测试清单:向已认证 API 端点追加 .css/.js/.png。
- 测试清单:检查响应是否被缓存,第二次请求观察 X-Cache: HIT。
- 测试清单:测试路径分隔符:/x.css、;.css、%2F.css。
- 测试清单:测试未键控 header:X-Forwarded-Host、X-Original-URL。
- 测试清单:验证敏感端点上的 Cache-Control header。
- 测试清单:检查 Vary header 是否存在。
- 测试清单:分别带认证和不带认证测试。
适用边界 · 注意事项
- 目标没有 CDN、反向代理或应用层缓存,且响应头无 X-Cache、Age、Via 等缓存迹象时不适用。
- 无法向受害者投递构造 URL 或无法观察缓存 HIT/MISS 的授权测试场景不适用。
- 仅做防御加固而不进行安全测试时,不需要按攻击步骤执行,可直接采用防御项。