漏洞
缓存投毒
别称: Web 缓存投毒, 响应投毒
定义
将恶意响应保存在共享缓存中,使后续用户收到由攻击者控制内容的攻击。
缓存投毒利用 CDN、反向代理、浏览器或 DNS 解析器等缓存层,使其持久化攻击者控制的内容。Web 缓存投毒通常滥用未参与缓存键计算的输入(unkeyed input):某个头部或参数影响了响应但未纳入缓存键,从而把被投毒的响应分发给后续访问者。变种包括 DNS 缓存投毒、应用层缓存投毒以及缓存欺骗。影响范围从篡改与 XSS 分发到凭据窃取与身份验证绕过。防御措施包括将相关输入纳入缓存键、在边缘对请求做归一化、限制可缓存的内容类型,并审计 Vary 与 Cache-Control 头。
示例
- 通过发送 X-Forwarded-Host 让应用将其反射到 <script> 标签,从而污染 CDN。
- 缓存带有攻击者控制的 Location 字段的 302 跳转,并发给所有访客。
相关术语
HTTP 请求走私
利用前端代理与后端服务器对 HTTP 请求边界判断不一致的攻击,使攻击者可以在合法请求中夹带一个隐藏的额外请求。
HTTP 失同步攻击
现代形式的 HTTP 请求走私,使一条由代理和服务器组成的链路失去同步,从而将恶意流量注入其他用户的连接。
Web 缓存欺骗
通过恶意 URL 让中间缓存把受害者已认证的敏感响应,作为可公开缓存的资源保存下来的攻击。
DNS 缓存投毒
向 DNS 递归解析器缓存中插入伪造记录的攻击,使其在 TTL 过期前持续返回攻击者指定的地址。
Host 头注入
应用程序信任 HTTP Host(或 X-Forwarded-Host)头构造 URL,导致攻击者可以重定向用户或污染缓存的漏洞。
跨站脚本(XSS)
一种 Web 漏洞,攻击者可在其他用户浏览的页面中注入恶意脚本,使其在受害者浏览器中以该站点的来源身份运行。