缓存欺骗的极致艺术

admin 2025年6月25日00:58:05评论7 views字数 2731阅读9分6秒阅读模式

击穿 shopify 经典回顾: 缓存欺骗的极致艺术

前言

缓存漏洞是一种令我有独特新鲜感受的漏洞,原因在于它不同寻常的漏洞成因机制以及多样化的攻击利用效果。

今天在阅读漏洞 Case 的时候发现一个非常有趣的漏洞案例,期待与大家一起分享学习下。

此漏洞在 September 8, 2022, 7:58pm UTC 提交,最近 3 天才正式对外披露,此报告最终获得 $3,800 赏金。

缓存欺骗的极致艺术

正文

通过缓存投毒攻击 cdn.shopify.com 和 shopify-assets.shopifycdn.com 实现的 DoS 漏洞

sources: https://hackerone.com/reports/1695604

漏洞描述

在 cdn.shopify.com 存在一个 Web 缓存投毒漏洞(Web Cache Poisoning),攻击者可借此 ** 阻止访问任意托管在该域上的静态文件 **。

该漏洞的根本原因在于:缓存服务器错误地将反斜杠()视作正斜杠(/),而源服务器在 URL 中包含反斜杠时会返回 404 Not Found。因此,缓存服务器认为以下两个 URL 等价:

https://cdn.shopify.com/static/javascripts/vendor/bugsnag.v7.4.0.min.jshttps://cdn.shopify.comstaticjavascriptsvendorbugsnag.v7.4.0.min.js

但实际上,第二个 URL 会导致源服务器返回 404,从而在缓存中写入错误页面。一旦被缓存,后续对该资源的正常请求也将命中此错误缓存,返回 404,从而实现持久性的拒绝服务(DoS)。

由于 Shopify 所有站点的静态资源(如 JavaScript)都托管于此 CDN,攻击者可借此对几乎所有 Shopify 站点实施资源级 DoS 攻击

复现步骤

1. 打开托管在 cdn.shopify.com 上的任意文件(例如:https://cdn.shopify.com/static/javascripts/vendor/bugsnag.v7.4.0.min.js),并使用 Burp Suite 拦截该请求。请求格式如下:
GET /static/javascripts/vendor/bugsnag.v7.4.0.min.js HTTP/1.1Host: cdn.shopify.comConnection: closeUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding: gzip, deflateAccept-Language: en-US,en;q=0.9
2. 为了使该请求返回 404 Not Found,我们将 URL 中的正斜杠(/)替换为反斜杠()。
此外,在进行任何测试之前,必须在 URL 末尾添加一个缓存清洗参数(cache buster),以防止对网站所有用户造成 DoS 影响 (即在 URL 末尾添加 ?cachebuster={随机值})。
GET /staticjavascriptsvendorbugsnag.v7.4.0.min.js?cachebuster=123 HTTP/1.1Host: cdn.shopify.comConnection: closeUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding: gzip, deflateAccept-Language: en-US,en;q=0.9
3. 发送上述请求将返回 404 错误页面  但其缓存键(cache key)与正常路径 https://cdn.shopify.com/static/javascripts/vendor/bugsnag.v7.4.0.min.js?cachebuster=123 相同 。

缓存欺骗的极致艺术
4. 为了使该响应被 CDN 缓存,我们需要在 Burp Repeater 中多次发送该畸形请求,或使用 Burp Intruder 持续发送请求,使错误页面被缓存。

缓存欺骗的极致艺术

漏洞影响

对托管在 cdn.shopify.com 上的任意文件进行拒绝服务(DoS)攻击,可能会导致依赖该 CDN 的其他服务同样遭受 DoS,例如:

  • • *.myshopify.com
  • • www.shopify.com
  • • shop.app
  • • shopify.plus
  • • exchangemarketplace.com
  • • linkpop.com
  • • shopifyinbox.com

同时,对 shopify-assets.shopifycdn.com 上的任意资源发起 DoS,也可能影响依赖该 CDN 的其他服务,例如:

  • • accounts.shopify.com

漏洞点评

这个漏洞是在 CF 的 CDN 环境上,并且配置应该也是没有错的。

问题出在源站似乎对 URL 要求相比 CDN 严格很多,导致出现路由无法识别“”出现 404,一些安全性比较高的框架可能就会有这种严格验证的情况

但是 CDN 的缓存规则相对宽松,不同缓存路由视为相同缓存键,造成了此漏洞。

黑客通过不断发起缓存攻击,利用 age 的时间缓存有效性,可以变相实现 0 成本的 DOS 拒绝服务攻击。

当然奖金如果对比其他国内 SRC 来说已经非常可以,但此漏洞真实危害和影响其实相对有限,最近阿里云 DNS 都能被劫持,更别说这种基于漏洞产生的 DOS, 基本可以很快被厂商定位问题并得到及时处置。

但此漏洞场景如果客观来看应该不像个例,甚至可能在某种通用架构普遍存在此问题,这个点才是本篇文章出发点的核心所在!

原文始发于微信公众号(迪哥讲事):缓存欺骗的极致艺术

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月25日00:58:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   缓存欺骗的极致艺术https://cn-sec.com/archives/4171185.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息