共计 1129 个字符,预计需要花费 3 分钟才能阅读完成。
每当我们登录到我们的 ChatGPT 实例时,应用程序都会从服务器获取我们的帐户上下文,如我们的电子邮件、名称、图像和 accessToken。
此 BUG 的利用方式是:“Web 缓存欺骗”,链接如下。
奥马尔·吉尔:网络缓存欺骗攻击 (omergil.blogspot.com)
该漏洞利用方式非常简单,如果我们设法强制负载均衡器将我们的请求缓存在我们特制的特定路径上,我们将能够从缓存的响应中读取受害者的敏感数据。
为了让漏洞发挥作用,我们需要让 CF-Cache-Status 响应为“HIT”,这意味着它缓存了数据,并将提供给跨同一区域的下一个请求。我们收到“DYNAMIC”响应时,不会缓存数据。
当我们部署 Web 服务器时,缓存 (Caching) 的主要目标是能够更快地为最终用户提供大量资源,主要是 JS / CSS / 静态文件。CloudFlare 有一个默认扩展列表,缓存在他们的负载均衡器。链接如下。
https://developers.cloudflare.com/cache/about/default-cache-behavior/
需要注意的时,“Cloudflare 仅根据文件扩展名而不是 MIME 类型进行缓存”。如果我们设法找到一种方法来加载具有以下指定文件扩展名之一的相同端点,同时强制端点保留敏感 JSON 数据,我们将能够缓存它。
因此,我要尝试的第一件事是获取在端点上附加了文件扩展名的资源,看看它是否会抛出错误或显示原始响应.
chat.openai[.]com/api/auth/session.css -> 400 ❌
chat.openai[.]com/api/auth/session/test.css – 200 ✔️
OpenAI 仍然会返回带有 css 文件扩展名的敏感 JSON,这可能是正则表达式的问题或者只是他们没有将此攻击向量纳入上下文。只剩下一件事要检查,我们是否可以从缓存服务器中提取“HIT”。
成功完成了利用。
利用步骤如下:
1. 攻击者制作 /api/auth/session 端点的专用.css 路径。如 https://chat.openai.com/api/auth/session/checkit.css
2. 攻击者分发链接(直接给受害者或公开)
3. 受害者访问链接。
4. 响应被缓存。
5. 攻击者再次访问链接获取 JWT 凭证。
利用视频如下:
链接: https://pan.baidu.com/s/1DjW5jP31RbeENDnLtzB-SQ?pwd=open 提取码: open
在此利用方式修复后,@_ayoubfathi_通过添加制表的 URL 编码表示形式 (\t) – %09. 以及有效负载 (%0A%0D%09),重新绕过修复从而接管任何用户帐户。
查看完整对话
查看帐户状态。