Shopify | 报告 #1695604 - 通过缓存投毒在cdn.shopify.com和shopify-assets.shopifycdn.com上实现DoS漏洞
摘要
在Shopify的CDN域名上发现了一个Web缓存投毒漏洞,缓存服务器将反斜杠和正斜杠视为等效,而源服务器对包含反斜杠的路径返回404错误。这种差异允许攻击者发送带有反斜杠而非正斜杠的请求,导致404错误被缓存并为合法请求提供服务,从而创建拒绝服务条件,可能影响多个Shopify服务。该漏洞通过在所有受影响的CDN域名上实施一致的路径处理得以修复。
时间线
- 2022年9月8日:bassem_sadaqah向Shopify提交报告。
- 2022年9月9日:Shopify团队确认问题并标记为“已分类”。
- 2022年9月13日:添加弱点“缓存投毒”。
- 2022年9月16日:奖励bassem_sadaqah 3800美元奖金,严重性从高调整为中(5.8)。
- 2022年9月22日:问题修复,报告关闭。
- 2024年8月1日:请求披露报告。
- 2025年6月4日:报告公开披露。
漏洞详情
在cdn.shopify.com上存在一个Web缓存投毒漏洞,允许攻击者阻止访问网站上托管的任何文件。该漏洞存在是因为缓存服务器将反斜杠视为正斜杠处理,但源服务器在URL中存在反斜杠时返回404错误。
因此,根据缓存服务器,以下两个URL是相同的:
- https://cdn.shopify.com/static/javascripts/vendor/bugsnag.v7.4.0.min.js
- https://cdn.shopify.com\static\javascripts\vendor\bugsnag.v7.4.0.min.js
然而,第二个URL将从源服务器返回404。当攻击者发送将斜杠替换为反斜杠的特定文件请求时,服务器将返回404 Not Found错误页面,此错误将被保存到缓存中,任何对该文件的后续请求都将返回404 Not Found错误。此场景可被利用导致几乎所有Shopify网站的DoS,因为Shopify网站使用的所有JavaScript和静态文件都托管在cdn.shopify.com上。
复现步骤
- 打开托管在cdn.shopify.com上的任何文件(例如:https://cdn.shopify.com/static/javascripts/vendor/bugsnag.v7.4.0.min.js)并使用Burp Suite拦截请求。
- 将URL中的斜杠替换为反斜杠,并在URL末尾添加缓存破坏查询参数(例如:?cachebuster={随机值})。
- 发送修改后的请求,返回404并具有与原始URL相同的缓存键。
- 通过多次发送畸形请求或使用Burp Intruder保持错误页面缓存。
- 尝试在浏览器中打开原始URL,将显示404错误页面而非JavaScript文件。
同一漏洞也适用于shopify-assets.shopifycdn.com,用于其他Shopify网站如accounts.shopify.com。
影响
- 对托管在cdn.shopify.com上的任何文件造成DoS,可能导致使用此CDN的其他服务(如*.myshopify.com、www.shopify.com、shop.app、shopify.plus、exchangemarketplace.com、linkpop.com、shopifyinbox.com)的DoS。
- 对托管在shopify-assets.shopifycdn.com上的任何文件造成DoS,可能导致使用此CDN的其他服务(如accounts.shopify.com)的DoS。
修复
Shopify工程团队通过在所有受影响的CDN域名上实施一致的路径处理来修复此漏洞。问题已不再可复现。
奖励与严重性
- 奖金:3800美元
- CVSS基础评分:5.8(AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:N/A:L)
- 环境评分:4.9(非核心,修改自CR:L/IR:L/AR:L)
- 最终严重性:中(4.9)
附件
- POC1.png
- POC2.png
- POC_VIDEO.mp4
报告于2025年6月4日公开披露。