ChatGPT 账户劫持漏洞披露:通过共享链接实现任意代码执行
安全研究团队 Mukul Goyal 于 2026 年 10 月发现,攻击者可通过绕过 ChatGPT 的沙箱机制和内容安全政策(CSP),利用公共对话分享功能接管任何用户的账户。该漏洞允许恶意 JavaScript 在受害者的已登录会话中执行,从而读取私人对话并操控账户。

OpenAI 已于 2026 年 10 月 26 日修复此问题,并将其严重性等级定为 P1。受害者仅需点击攻击者分享的 ChatGPT 链接即可触发攻击,无需安装应用、加入项目或打开开发工具。
技术原理:从沙箱逃逸到身份验证会话控制
此次攻击的核心在于将普通的 HTML 预览转化为可执行代码。ChatGPT 的预览功能通常运行在受限框架内,隔离了主页面的访问权限。然而,研究人员发现了一种利用 postMessage API 和 MathLive 库缺陷的组合攻击路径。
flowchart TD
A["Attacker publishes a ChatGPT conversation"] --> B["Victim opens the public share"]
B --> C["HTML Preview crosses into the main chatgpt.com page"]
C --> D["JavaScript runs in the victim's signed-in session"]
D --> E["Any action on chatgpt.com as the victim:
read private chats and files, change the account"]
攻击流程如下:
- 初始化监听器: 攻击者在对话中包含一个图表组件,该组件加载 MathLive 数学库。MathLive 在主页面安装了一个消息监听器,用于处理虚拟键盘布局更新。
- 发送恶意消息: 攻击者创建的 HTML 预览块向主页面发送两条
postMessage消息。第一条消息试图替换虚拟键盘布局为恶意 HTML,第二条消息触发键盘显示以渲染该布局。 - 缺乏来源验证: MathLive 的消息监听器未严格验证发送者的来源(Origin)或窗口授权,导致其接受了来自沙箱预览框的消息。
- 注入 HTML: 恶意布局数据被直接赋值给主页面的
innerHTML。虽然浏览器阻止了脚本标签的直接执行,但攻击者利用srcdociframe 属性创建了一个新的文档上下文。 - CSP 绕过与执行: 新创建的 iframe 继承了
chatgpt.com的身份。尽管 CSP 禁止内联脚本,但允许加载来自 YouTube 的脚本。攻击者利用 YouTube oEmbed 端点的 JSONP 回调参数,将恶意代码作为合法的外部脚本加载并执行。
关键代码片段
攻击者发送的伪造消息结构如下:
top.postMessage({
type: "mathlive#virtual-keyboard-message",
action: "update-setting",
layouts: [{
label: "Compatibility",
layers: [{ id: "compatibility", markup }]
}]
}, "*");
top.postMessage({
type: "mathlive#virtual-keyboard-message",
action: "show",
animate: false
}, "*");
YouTube oEmbed 端点返回的响应中,回调参数被直接拼接到 JavaScript 代码中,使得攻击者能够注入任意逻辑:
// API callback
globalThis.__marker=31337;void({
"error": {
"code": 400,
"message": "Invalid JSONP callback name: ..."
}
});
实际影响:跨用户数据窃取与账户接管
一旦 JavaScript 在 chatgpt.com 的上下文中执行,它便拥有与正常 Web 应用程序相同的身份验证权限。研究人员证实,注入的代码可以:
- 列出受害者的所有对话记录。
- 获取从未与攻击者共享的私人对话内容。
- 调用 ChatGPT 认证 API,代表受害者执行操作。
为了证明数据外泄的可能性,攻击载荷通过图像请求将部分响应数据发送至外部服务器。由于代码使用了 Web 应用的认证上下文,其潜在危害不仅限于对话读取,还包括修改账户设置等敏感操作。
OpenAI 的修复措施与安全建议
OpenAI 在收到报告后迅速行动。10 月 21 日,漏洞严重性从 P2 提升至 P1。10 月 26 日,OpenAI 确认两个前端版本均已拒绝报告中使用的跨 MathLive 消息,并发布修复补丁。研究人员获得总计 5,000 美元的赏金。
此次事件暴露了三个主要的设计缺陷:
- 消息接收者未验证发送者的确切窗口和 URL。
- 允许原始 HTML 作为键盘布局数据传入。
- 动态创建的文档未保持沙箱状态,导致继承主站身份。
针对此类漏洞的安全防御原则包括:
- 消息接收者必须严格验证发送者的 Origin 和被授权的窗口引用。
- 跨窗口设置不应包含原始 HTML 字符串。
- 当内容可能受不受信任的框架影响时,动态创建的文档应保持沙箱限制。
- CSP 应作为备份控制手段,而非唯一防线,尤其是在攻击者可控的 HTML 进入主站点时。
时间线回顾
| 日期 | 事件 |
|---|---|
| 2026 年 10 月 13 日 | 确认针对 ChatGPT 生产代码的 MathLive 消息至 HTML 的攻击路径。 |
| 2026 年 10 月 14 日 | 通过正常 UI 复现攻击链,并将固定警报升级为任意 JavaScript 执行。 |
| 2026 年 10 月 16 日 | 确认在不同账户和工作空间间通过一次预览点击即可实现公共分享投递。 |
| 2026 年 10 月 17 日 | 确认通过分享导航自动触发预览,并在硬刷新后复现。 |
| 2026 年 10 月 18 日 | 向 OpenAI 漏洞赏金计划提交报告。 |
| 2026 年 10 月 19 日 | 添加受控的私人聊天披露证明。 |
| 2026 年 10 月 21 日 | OpenAI 复现问题;严重性从初始 P2 分诊提升至 P1。 |
| 2026 年 10 月 22 日 | OpenAI 报告一个 Web 前端已修复,另一个仍在更新中。 |
| 2026 年 10 月 23 日 | CSP 更改阻止了部分攻击链,但其中一个前端更新尚未完成。 |
| 2026 年 10 月 26 日 | OpenAI 确认两个前端均拒绝报告中的消息,解决问题,并授予总计 5,000 美元赏金。 |





