ChatGPT 帐户接管 - 通配符网络缓存欺骗

admin 2024年2月19日13:22:54评论11 views字数 1904阅读6分20秒阅读模式

ChatGPT 帐户接管 - 通配符网络缓存欺骗

ChatGPT 帐户接管 - 通配符网络缓存欺骗

介绍
以下是我如何接管您在 ChatGPT 中的帐户。
去年,Nagli 在 ChatGPT 中发现了一个网络缓存欺骗漏洞。其影响至关重要,因为它导致用户的身份验证令牌泄露,并随后导致帐户被接管。OpenAI 向 ChatGPT 的用户通报了该漏洞,并迅速修复了该错误……或者他们真的这么做了吗?
在这篇文章中,我将解释如何滥用路径遍历 URL 解析器混淆来实现我所说的“通配符”缓存欺骗漏洞,从而窃取用户的身份验证令牌并接管他们的帐户。我将假设读者了解 Web 缓存欺骗漏洞的基础知识,因为我不会对其进行过多深入的解释。如果您还不熟悉这个令人敬畏的漏洞,或者想复习一下,我强烈建议您先查看Nagli 的文章,然后再回来阅读这篇文章。此外,这个错误使用了与我去年在Glassdoor中发现的 Web 缓存中毒漏洞类似的概念,该漏洞允许我们缓存“不可缓存”的文件和端点。虽然这不是完全相同的技术,但它展示了 URL 解析器混淆的可能性,特别是路径遍历,为各种缓存漏洞打开了新的大门。
初步发现
在使用 ChatGPT 新实现的“分享”功能(该功能允许用户与其他人公开分享他们的聊天内容)时,我注意到一些奇怪的事情。当我继续与 ChatGPT 交谈时,我的共享聊天链接都不会更新。在处理这样的错误一段时间后,首先想到的是缓存问题。我认为共享聊天已被缓存,因此在缓存条目消失之前不会更新。为了测试这一点,我在开发工具中打开了网络选项卡来检查响应标头,正如我所预测的,我看到了标头Cf-Cache-Status: HIT。这对我来说非常有趣,因为这不是静态文件。我检查了 URL,发现该路径没有预期的静态扩展名:
https://chat.openai.com/share/CHAT-UUID
这意味着可能有一个缓存规则不依赖于文件的扩展名,而是依赖于它在 URL 路径中的位置。为了测试这一点,我检查了 https://chat.openai.com/share/random-path-that-does-not-exist 并且正如预期的那样,它也被缓存了。很快就发现缓存规则看起来像这样:/share/* 这意味着路径下的几乎所有内容/share/都会被缓存。这立即成为一个危险信号(或绿色信号,具体取决于您如何看待它),因为我在上次缓存中毒研究期间对自己做了一个说明,宽松的缓存规则可能非常危险,尤其是在 URL 解析器混乱的情况下。
路径遍历混乱
在使用缓存的网站中,请求在到达 Web 服务器之前必须经过 CDN。这意味着 URL 会被解析两次,这可能会导致 URL 解析器混淆。在 ChatGPT 的案例中,URL 解析器混淆意味着两个服务器以不同的方式解析 URL 编码的正斜杠,其中 Cloudflare 的 CDN 不会解码,也不会规范化 URL 编码的路径遍历,但 Web 服务器会这样做。因此,URL 编码路径遍历允许攻击者从服务器缓存他们想要的任何文件,包括包含授权令牌的影响最大的 API 端点。这听起来有点令人困惑,所以这里是一个示例有效负载:请注意,解码%2F/并且/api/auth/session是一个敏感的 API 端点,其中包含用户的身份验证令牌 https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123 所以让我们对此进行分解。
  • 我们已经确定 CDN 将缓存以下任何内容/share/
  • 我们还说过 CDN 不会解码也不会标准化%2F..%2F,因此响应将被缓存
  • 但是,当 CDN 转发此 URL 时,Web 服务器将解码并规范化%2F..%2F,并使用 进行响应/api/auth/session,其中包含身份验证令牌。
综上所述,当受害者访问 时https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123,他们的身份验证令牌将被缓存。当攻击者稍后访问 时https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123,他们将看到受害者缓存的身份验证令牌。游戏结束了。一旦攻击者获得了身份验证令牌,他们就可以接管该帐户、查看聊天记录、账单信息等。
这是我画的一个小草图,以帮助大家直观地看到这一点:
ChatGPT 帐户接管 - 通配符网络缓存欺骗
总之,由于 CDN 和 Web 服务器之间的路径规范化不一致,我能够使用 URL 编码路径遍历来缓存敏感的 API 端点。
令人惊讶的是,这可能是我在 bug 赏金中最快找到的,也是我更有趣的赏金之一,迄今为止我的最大赏金为 6500 美元。

原文始发于微信公众号(Ots安全):ChatGPT 帐户接管 - 通配符网络缓存欺骗

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月19日13:22:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ChatGPT 帐户接管 - 通配符网络缓存欺骗https://cn-sec.com/archives/2504833.html

发表评论

匿名网友 填写信息