Parameter.ai 的一个研究团队在 OpenAI 的 ChatGPT 平台上发现了一个严重的安全缺陷,该缺陷允许通过公共分享链接实现完整的账户接管。该漏洞源于三个看似无害功能的结合:一个与数学相关的交互式图表、一个 HTML 预览工具以及特定的内容安全策略 (CSP) 配置。通过构建恶意对话并将其公开分享,攻击者可以诱骗已登录用户执行代码,该代码以与用户自身 Web 会话相同的权限运行,从而有效地授予攻击者访问用户已验证 API 的权限。

此视觉效果说明了如何利用公共分享功能将恶意内容注入用户的会话。
技术机制依赖于涉及名为 MathLive 的数学库的“沙箱逃逸”。虽然 ChatGPT 的预览功能通常将代码隔离在受限框架中,但 MathLive 库在 ChatGPT 主页面上安装了一个监听器,用于处理屏幕键盘的消息。由于该监听器不验证传入消息的来源,隔离的预览框架可以向主页面发送 `postMessage`。此消息指示主页面渲染包含原始 HTML 的新键盘布局。研究人员发现,主页面的 `createHTML` 辅助函数未能对此输入进行清理,从而允许注入带有 `srcdoc` 属性的 `iframe`。由于主页面创建了这个框架,浏览器授予其 `chatgpt.com` 身份,从而绕过了预览工具的标准隔离机制。
为了绕过阻止内联脚本的网站内容安全策略,研究人员利用了来自 YouTube oEmbed 端点的 JSONP 风格回调。由于 ChatGPT 的 CSP 允许来自 YouTube 的脚本,研究人员使用精心设计的回调在新创建的框架内执行任意 JavaScript。一旦实现执行,团队便展示了他们可以调用 ChatGPT 的后端 API 来枚举受害者的近期对话,并检索从未被分享过的私人聊天内容。OpenAI 通过更新其 Web 前端以拒绝跨框架消息来解决此问题,并将该报告归类为 P1(高优先级)严重级别漏洞。研究人员指出,该漏洞是系统复杂性的结果,即各个组件在独立运行时功能正常,但在组合到单个页面时却创造了一条危险路径。

这张图片提供了研究人员利用发现的漏洞检索私人聊天内容的视觉证明。