ChatGPT:通过共享链接与 MathLive 沙箱逃逸接管账户
恶意的 ChatGPT 共享链接可借助 MathLive 的未校验消息在受害者会话中执行攻击者 JavaScript;OpenAI 已于 10 月 26 日修复。
摘要
- 恶意的公开 ChatGPT 共享链接可在打开者的登录会话中执行攻击者的 JavaScript,从而以该 ChatGPT 账户行事。Parameter Security 于 2026 年 10 月 18 日向 OpenAI 报告了这条链。
- 2026 年 10 月 26 日之前打开过攻击者共享会话的人都可能是受害者:既不需要安装应用,也不需要加入工作区,更不需要通过攻击者登录,只需打开链接。
- OpenAI 将报告定为 P1,并于 2026 年 10 月 26 日在两个 Web 前端版本上完成服务端修复。未分配 CVE,也没有报告真实滥用。
- ChatGPT 的修复已部署。嵌入 MathLive 的团队应审计自己的消息处理器;公开文章并未确定各集成的修复状态。
我受影响吗?
作为 ChatGPT 用户,以下条件必须同时成立:
- 您在 2026 年 10 月 26 日之前打开过由不可信来源通过公开
/share/链接共享的 ChatGPT 会话。 - 该会话被刻意设计成同时包含一个图表和一段 HTML Preview。
- 在最可靠的攻击版本中,您在页面打开后点击过一次 ChatGPT 的 Preview 按钮。在后续版本中,打开链接是唯一步骤;Parameter 将该自动路径复现了三次,包括硬刷新之后。
该漏洞位于 ChatGPT 的 Web 前端并已修复,因此如今打开被做过手脚的共享链接不会执行载荷。Parameter 的私密会话验证是在其自控的两个独立账户之间完成的,并报告该漏洞没有真实滥用。
如果您构建的 Web 应用嵌入了 MathLive(ChatGPT 用来渲染交互图表的库),则存在另一种暴露:
- 您的页面加载 MathLive,它为屏幕上的数学键盘安装一个
postMessage监听器。 - 可受攻击者影响的内容能在同页面的某个框架中运行,例如内嵌预览、沙箱化小组件或用户编写的 HTML。
- 该监听器会处理改变键盘设置的消息,因为 MathLive 的顶层控制器接受来自任意来源的消息。
请检查您的项目是否嵌入 MathLive:
grep -A1 '"node_modules/mathlive"' package-lock.json
grep -rn "mathlive" --include=*.ts --include=*.js --include=*.vue --include=*.tsx src | head -20
如何修复?
ChatGPT 用户无需安装或重置任何内容。OpenAI 已在两个 Web 前端版本中部署修复,到 2026 年 10 月 26 日两者都会拒绝攻击所依赖的跨框架 MathLive 消息。
对于您自己的 MathLive 集成,公开文章并未指定已修复的上游版本。npm 注册表将 v0.111.1 列为最新版,但 GitHub Releases 仍将 v0.100.0 标记为最新版,因此不能仅凭该页面判断包的全部发布情况。不要假定升级即可阻断这条链,应检查相关消息处理器。在集成层面落实 Parameter 的防御建议:
- 在处理任何改变状态的消息之前先验证发送者:同时检查
event.origin(发送者的网址)和event.source(获得授权的确切窗口)。 - 将跨窗口设置当作数据而非 HTML:键盘布局及类似结构不得赋给接收页面的
innerHTML。 - 只要动态创建的文档内容可能受不可信框架影响,就保持其沙箱化,使被构造的
srcdociframe 无法继承您页面的身份。 - 将内容安全策略视为后备控制,而不是攻击者 HTML 到达主页面之后的唯一屏障。
这些措施针对集成边界。请查看该库的安全公告和发行说明,并验证您部署版本中相关消息处理的行为。
根本原因是什么?
Preview 的沙箱本身守住了;同一页面里的第二个功能,MathLive 的屏幕键盘,在边界上留了一扇门。Parameter 的文章完整记录了这条链。
ChatGPT 通过 Preview 功能在另一个网址的受限框架中渲染 HTML 代码块,因此该框架无法读取周围已登录的页面。同一会话中的交互图表会把数学排版库 MathLive 加载到主 chatgpt.com 页面。加载 MathLive 会安装一个处理其虚拟键盘消息的监听器。Parameter 发现该监听器接受来自任意发送者的、改变键盘布局的消息,而且布局可以携带原始 HTML。反混淆后的控制流等价于:
window.addEventListener("message", (event) => {
if (event.data?.type !== "mathlive#virtual-keyboard-message") return;
if (!validateOrigin(event.origin, this.originValidator)) return;
this.handleMessage(event.data, event.source);
});
if (message.action === "update-setting" && message.layouts) {
this.layouts = message.layouts;
}
Parameter 指出,顶层控制器使用 none 来源策略,意味着任意网址都能发送该消息。它也不要求 update-setting 消息来自事先批准的窗口。布局规范化保留了 markup 字段,因此攻击者的 HTML 得以存活。当键盘显示时,布局会到达真实 ChatGPT 页面中的 HTML 汇点:
keyboardContainer.innerHTML = MathfieldElement.createHTML(keyboardHtml);
createHTML 辅助函数看起来像净化器,实际却是一个原样返回输入的包装函数,把字符串标记为可信并原样放行。按 Parameter 的总结,三个设计决策将此变成完整利用:
- MathLive 在未证明是哪个框架发送的情况下接受改变状态的消息。
- 消息格式允许原始 HTML 作为键盘布局数据。
- 该 HTML 能创建继承
chatgpt.com身份的非沙箱化文档。
如何被利用?
- 攻击者编写一个包含真实交互图表、并在其后放置助手生成的 HTML 块的 ChatGPT 会话。图表将 MathLive 加载到主页面,HTML 块被渲染为 Preview。
- 攻击者通过 ChatGPT 的正常分享功能发布该会话,并通过邮件、聊天、工单或社交媒体把公开
/share/<id>链接发给受害者。 - 受害者打开链接。Preview 框架向主页面发送两条消息:一条
update-setting消息用攻击者的 HTML 替换虚拟键盘布局,一条show消息让 MathLive 渲染它。 - MathLive 将该 HTML 写入主
chatgpt.com页面的innerHTML。插入的 HTML 是一个带srcdoc属性但没有sandbox属性的iframe,因此浏览器创建一个继承chatgpt.com身份的新文档。 - ChatGPT 的内容安全策略阻止内联脚本,但允许来自
www.youtube.com的脚本。该框架加载一个 YouTube oEmbed URL,其 JSONP 风格回调参数携带攻击者的 JavaScript,端点在自身的校验错误响应中把它返回。 - 回调在新的框架中作为
chatgpt.com运行,携带受害者的已登录会话,可直接调用 ChatGPT 的已认证 API。
发送消息的代码和 YouTube URL 都发布在 Parameter 的文章中,上面的两段代码摘录也来自该文章。
攻击如何展开?
共享链接加载图表并安装一个受信任的监听器,沙箱化的 Preview 借助它把攻击者 HTML 推入主页面,再由一个被允许的 YouTube 脚本完成收尾。
Preview 的会话"] --> B["受害者打开公开
/share 链接"] B --> C["图表将 MathLive 加载
到 chatgpt.com"] C --> D["Preview 发送 update-setting
postMessage(来源未校验)"] D --> E["MathLive 将布局 HTML 写入
innerHTML(无净化)"] E --> F["非沙箱 srcdoc iframe
继承 chatgpt.com 身份"] F --> G["YouTube JSONP 脚本执行
(CSP 允许 youtube)"] G --> H["攻击者 JS 充当受害者:
读取私密聊天,任意操作"]
攻击者能做什么?
载荷以与真实 ChatGPT 页面相同的已认证访问权限运行,因此其影响范围不限于屏幕上恰好显示的内容。Parameter 演示了三项具体能力:
- 调用
GET /backend-api/conversations枚举受害者最近的会话。 - 调用会话详情端点,获取从未与攻击者共享过的私密会话内容。
- 通过一个普通的图片请求,把该会话中被选中的一小段发送到研究者控制的服务器。
载荷解析页面自身的引导数据以获取会话访问令牌和账户 ID,并在请求头中使用。Parameter 的评估是,这相当于通过 Web 应用对受害者账户的完全控制。研究者写道:"essentially, we could perform any action on behalf of the victim's ChatGPT account"。其边界在于已认证前端能做什么,而不在验证所选的端点。
攻击条件并不苛刻:攻击者只需一个普通 ChatGPT 账户来编写会话、一条传送链接的渠道,以及至多一次受害者交互。OpenAI 在复现代码执行和私密聊天验证后将其定为 P1。
修复为何有效?
OpenAI 的修复让主页面不再信任发送者。两个 Web 前端版本现在都会拒绝报告所用的跨框架 MathLive 消息,因此不可信的 Preview 无法再替换键盘布局并向已登录页面注入 HTML。修复在服务端,用户无需安装。部署期间 OpenAI 还修改了内容安全策略,在其中一个前端仍在等待更新时挡住了链条的一部分。
正如 Parameter 指出,YouTube 这一步是对内容安全策略的绕过,而非原因。仅封禁该端点只会移除通向 JavaScript 的一条路径,而不可信的 Preview 仍能把 HTML 推入主页面。因此修复针对的是每个载荷变体都必须跨越的消息边界。
如何检查是否已被入侵?
Parameter 未公布可靠的事后检测流程。载荷使用受害者已有的浏览器会话,因此正常的会话记录不能排除遭到利用的可能。如果怀疑存在未授权活动,请在 ChatGPT 的安全设置中检查活跃会话,并遵循 OpenAI 账户安全指南。按照事件响应流程调查可能泄露的秘密信息和可用的组织日志;不要假定读取私密聊天一定会生成数据导出事件。
对于您自己的 MathLive 集成,审计在代码侧而非日志侧:搜索每一个处理设置的 postMessage 监听器,确认每个都验证了发送者。未验证 event.origin 与 event.source 就处理消息的监听器属于同一类缺陷,无论页面是什么。
时间线
- 2026-10-13:Parameter 针对 ChatGPT 生产代码确认 MathLive 消息转 HTML 路径。
- 2026-10-14:通过正常 UI 复现该链并升级为任意 JavaScript。
- 2026-10-16:在不同账户和工作区之间确认公开共享链接投递,仅需一次 Preview 点击。
- 2026-10-17:确认从共享导航自动打开 Preview,并在硬刷新后复现。
- 2026-10-18:Parameter 向 OpenAI 漏洞赏金计划提交报告。
- 2026-10-19:加入受控的私密会话泄露验证。
- 2026-10-21:OpenAI 复现问题,将严重程度从 P2 提升至 P1。
- 2026-10-22:OpenAI 报告一个 Web 前端已修复,第二个仍在更新。
- 2026-10-23:内容安全策略变更挡住链条的一部分,仍待一次前端更新。
- 2026-10-26:OpenAI 确认两个前端都拒绝所报告的消息,关闭问题并支付总额 5,000 美元赏金。
- 2026-10-28:Parameter 发布技术文章。
常见问题
ChatGPT 用户需要做什么吗?
不需要。修复在 OpenAI 一侧,已部署到两个 Web 前端版本,无需安装或重置任何内容。
它在野外被利用了吗?
没有报告真实滥用。Parameter 的私密聊天验证是在其自控的独立账户之间完成的,The Hacker News 于 2026 年 10 月 31 日报道称该公司没有报告任何真实滥用。严重程度来自被演示的能力,而非已观察到的滥用。
MathLive 本身修复了吗?
公开文章并未指定 MathLive 的修复版本。请检查已安装的包及其消息处理行为;GitHub Releases 并未列出所有 npm 版本。落实上面的集成层面检查。
Preview 的沙箱为什么没拦住它?
沙箱确实拦住了直接访问:Preview 内的代码无法读取 ChatGPT 主页面。入口来自同一页面的第二个功能。图表加载了 MathLive,而 MathLive 的键盘监听器接受来自任意框架的指令,使不可信的 Preview 能把 HTML 交给受信任的页面。
暴露规模有多大?
ChatGPT 的 Web 前端是使用最广的 Web 应用之一;OpenAI 自己曾在 2025 年 9 月报告每周活跃用户 7 亿。在 2026 年 10 月 26 日之前,任何可能打开共享链接的登录用户都在范围内。但暴露规模不等于实际影响:没有报告真实滥用。
载荷能做的比读取聊天更多吗?
能。载荷以受害者的会话调用 ChatGPT 自身的已认证 API,因此能触及正常前端可触及的一切,而不只是会话。Parameter 演示了读取私密聊天并外传选中的一小段,并将该原语评估为代表账户执行任意操作的能力。
用 Ostorlab 找出您自己的应用在哪里嵌入 MathLive
如果您的 Web 应用嵌入了 MathLive,第一个问题是在哪里。Ostorlab 的软件成分分析会构建项目的依赖清单,一次扫描即可告诉您哪些应用引入了 MathLive,以及"如何修复?"中的集成审查应在何处进行。
参考文献
- Parameter Security,Do the Math: How We Took Over ChatGPT Accounts,2026 年 10 月 28 日:https://www.parameter.ai/labs/we-found-a-gap-at-openai(2026 年 10 月 31 日核对)
- The Hacker News,A Shared ChatGPT Link Could Run Attacker Code in Your Session and Read Private Chats,2026 年 10 月 31 日:https://thehackernews.com/2026/10/a-shared-chatgpt-link-could-run.html(2026 年 10 月 31 日核对)
- MathLive 安全公告:https://github.com/arnog/mathlive/security/advisories(2026 年 10 月 31 日核对)
- MathLive: https://registry.npmjs.org/mathlive/latest ; https://github.com/arnog/mathlive/releases
- MathLive 包页面及每周下载数字:https://www.npmjs.com/package/mathlive(2026 年 10 月 31 日核对)
- OpenAI, How people are using ChatGPT (2025-09-15): https://openai.com/index/how-people-are-using-chatgpt/