Shopify CDN缓存投毒导致的DoS漏洞分析与修复

本文详细分析了Shopify CDN域名存在的Web缓存投毒漏洞,攻击者通过反斜杠替换正斜杠导致404错误被缓存,从而引发服务拒绝。漏洞影响多个Shopify服务,已通过统一路径处理修复。

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是相同的:

然而,第二个URL将从源服务器返回404。当攻击者发送将斜杠替换为反斜杠的特定文件请求时,服务器将返回404 Not Found错误页面,此错误将被保存到缓存中,任何对该文件的后续请求都将返回404 Not Found错误。此场景可被利用导致几乎所有Shopify网站的DoS,因为Shopify网站使用的所有JavaScript和静态文件都托管在cdn.shopify.com上。

复现步骤

  1. 打开托管在cdn.shopify.com上的任何文件(例如:https://cdn.shopify.com/static/javascripts/vendor/bugsnag.v7.4.0.min.js)并使用Burp Suite拦截请求。
  2. 将URL中的斜杠替换为反斜杠,并在URL末尾添加缓存破坏查询参数(例如:?cachebuster={随机值})。
  3. 发送修改后的请求,返回404并具有与原始URL相同的缓存键。
  4. 通过多次发送畸形请求或使用Burp Intruder保持错误页面缓存。
  5. 尝试在浏览器中打开原始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日公开披露。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计