击穿 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 攻击。
复现步骤
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
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
漏洞影响
对托管在 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, 基本可以很快被厂商定位问题并得到及时处置。
但此漏洞场景如果客观来看应该不像个例,甚至可能在某种通用架构普遍存在此问题,这个点才是本篇文章出发点的核心所在!
原文始发于微信公众号(迪哥讲事):缓存欺骗的极致艺术
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论