返回 文章 学习 CMS 文章

Parameter Labs 披露可接管 ChatGPT 账户的漏洞攻击链

一条从沙箱 iframe 出发、经 MathLive 虚拟键盘与 YouTube oEmbed 绕过 CSP,最终在 ChatGPT 页面执行 JavaScript 的完整攻击链。

ChatGPT漏洞披露沙箱逃逸CSP
成长分 / 100 68 综合收获、行动、留存与影响

为什么值得读完整展示了一个真实产品中沙箱逃逸与 CSP 绕过如何被逐步串联成严重漏洞

帮助理解 HTML 预览类沙箱功能的安全边界与常见失误点

关键洞察
  1. ChatGPT 的交互式 HTML 应用运行在沙箱 iframe 中,必须严格隔离以防访问 OpenAI API 与私密数据
  2. OpenAI 使用的 MathLive 库自带虚拟键盘,可从沙箱 iframe 通过 postMessage() 在父页面触发
  3. 接收消息的代码使用 innerHTML,且没有机制阻止其他沙箱 frame(包括 HTML 预览 frame)调用该方法
转成行动

深入阅读

正文与原文对照

原文保真覆盖:全文原文字符:2102

我们如何接管 ChatGPT 账户(via)Parameter Labs 描述了他们针对 ChatGPT 的 artifacts 模式实现(OpenAI 曾称之为“Canvas”,但最新版本似乎叫 HTML previews)发现的一个漏洞利用,其中交互式自定义 HTML 应用显示在沙箱化的 iframe 中。

这些 iframe 中的 HTML 必须保持严格沙箱化,以避免不受信任的代码与 OpenAI API 交互并访问私有数据,这一点很重要。

Parameter 发现了一条相当复杂的攻击链。OpenAI 使用 MathLive JavaScript 库作为其图形支持的一部分,而该库包含自己的虚拟键盘,可以通过沙箱化 iframe 中的 postMessage() 在父页面中触发。

该消息接收代码使用了 innerHTML,因此任何发送消息的内容都可以向父页面添加自定义 HTML——而且没有任何机制阻止其他沙箱化 frame(包括 HTML preview frame)调用该方法。

这意味着 iframe 中的不受信任代码可以插入 HTML,而虽然 innerHTML 不会直接执行 script 元素,但它可以被用来注入一个没有沙箱限制的新 iframe。

OpenAI 的 CSP 规则完全阻止了内联脚本,并且只允许从少数几个域加载脚本,但其中之一是 YouTube——而 YouTube oEmbed 端点可以被用来以执行 JavaScript 的方式反射回 JavaScript。

一旦攻击在 ChatGPT 上获得 JavaScript 执行能力,从 API 获取私有用户数据并通过图片引用将其外泄就变得轻而易举。

最终结果是:你可以创建一个 ChatGPT 分享 URL,当另一个已登录用户访问它时,就可以外泄其私有数据或代表其执行操作。

OpenAI 修补了该漏洞并支付了 5,000 美元的漏洞赏金,我认为对于如此严重的漏洞来说这有点便宜。