ChatGPT 账号接管漏洞复盘:一条分享链接就能读走私密对话,赏金只要 5000 美元
一条看起来再正常不过的 ChatGPT 分享链接,点开之后会把你自己账号里的私密对话读出来、传走——你不需要安装任何东西,不需要授权,也不需要粘贴任何代码。这就是这次 ChatGPT 账号接管漏洞的全部触发条件。10 月 28 日,安全研究团队 Parameter Labs 公布了这条完整的攻击链,把它定级为 P1(最高等级)。OpenAI 在 10 月 26 日修复了它,付出的赏金是 5000 美元。
这件事值得单独讲一遍,不是因为漏洞有多玄,而是因为它把三件事凑到了一起:一个在 AI 产品里被大量使用的前端组件、一套看起来「沙箱隔离很到位」的架构、以及一个业内几乎公认「太便宜」的漏洞赏金。三样东西单独看都不致命,拼起来就是一个跨账号的会话劫持。
一句话结论:沙箱没坏,坏的是「谁都能给主页面发指令」

- ChatGPT 账号接管漏洞是什么:攻击者构造一条公开的 ChatGPT 分享链接,任何已登录用户点开,恶意 JavaScript 就会在
chatgpt.com域下执行,并以受害者身份调用后端接口。 - 能拿到什么:最近的对话列表、一条从未对外分享过的私密对话全文,以及会话里的 access token 和账号 ID。
- 根因在哪:不是沙箱被突破。Parameter Labs 的原话是「Preview 沙箱本身工作正常」。问题在于有三处设计同时松了口子。
- 修复状态:10 月 26 日两个前端版本都拒绝 MathLive 消息,问题关闭。现在是安全的,但流程值得复盘。
- 争议点:P1 级、影响全体登录用户的漏洞,赏金 5000 美元。Hacker News 上 176 条评论,大半在骂这个数字。
ChatGPT 账号接管漏洞的四步链路
攻击者要做的事只有一件:建一个普通对话。里面放两样东西——一张真的图表(graph),和一条后面由助手生成的 HTML Preview(网页预览)。把这个对话公开分享,就得到一条日常形态的 /share/<id> 链接。
剩下的链路分四步走通:
- 预览框发出消息。HTML Preview 跑在另一个源的受限 iframe 里,读不到父页面,但它可以
postMessage。而主页面这边,图表组件加载了 MathLive(一个数学公式输入库),它顺手注册了一个虚拟键盘的消息监听器。 - MathLive 不验发信人。它的来源策略设成了
none,意思是任何源都能发消息进来;而且update-setting这类会改状态的指令,不要求来自之前批准过的窗口。预览框塞进去一个「键盘布局」,布局里的markup字段是攻击者可控的原始 HTML。 - HTML 直通主页面。MathLive 把布局拼成字符串,直接赋给真实 ChatGPT 页面里的
innerHTML。它用的createHTML只是 Trusted Types 的类型包装,不做净化,内容原样穿过。innerHTML里插的<script>不会执行——但插入一个不带sandbox属性的<iframe srcdoc>可以,新文档继承chatgpt.com身份,就能碰父页面了。 - 借 YouTube 的 JSONP 绕开 CSP。ChatGPT 的 CSP 挡住内联脚本、限定脚本来源,但允许 YouTube。YouTube 的 oEmbed 接口会在拒绝前,把非法的 JSONP callback 原样回显进错误响应。把 callback 结尾加上
;void,就能中和掉后面追加的错误对象;再用经典function语法(Google 会转义尖括号)避开格式限制。这个响应是 HTTP 200、text/javascript,于是被 ChatGPT 当成 YouTube 脚本加载,攻击者的代码就在新框架里跑起来了。
值得单独指出的是:前面几版利用方式都要求受害者做点什么——早期版本需要一个研究者自己的 ChatGPT App,原生 HTML 附件又会在分享后丢掉关键的图表。最后能「开链接即中招」的版本,靠的是把图表和预览塞进同一个公开对话,让整条链路在分享时完整保留。payload 里最长的那个字符串最终到 7390 个字符(iframe 标记),全靠 URL 编码层层塞进 srcdoc。
时间线:从发现到修复用了 13 天
| 日期(2026 年) | 进展 |
|---|---|
| 10 月 | 发现漏洞 |
| 10 月 13 日 | 在生产代码上确认 MathLive 的「消息转 HTML」路径 |
| 10 月 14 日 | 通过正常 UI 复现,把固定提示升级成任意 JavaScript |
| 10 月 16 日 | 确认跨账号、跨工作区投放,只需受害者点一次预览 |
| 10 月 17 日 | 确认在分享页导航时自动触发预览,硬刷新后依然有效 |
| 10 月 18 日 | 提交给 OpenAI 漏洞赏金计划 |
| 10 月 19 日 | 补上「读取受控私密对话」的泄露证明 |
| 10 月 21 日 | OpenAI 复现,等级从初始的 P2 提到 P1 |
| 10 月 23 日 | CSP 调整挡住部分链路,仍有一个前端待更新 |
| 10 月 26 日 | 两个前端都拒绝 MathLive 消息,问题关闭,发放 5000 美元赏金 |
| 10 月 28 日 | Parameter Labs 发布技术细节 |
自动生效的那个版本,研究者在一个独立账号上复现了 3 次,包括硬刷新之后,弹窗大约在 4.5 秒后出现。这个数字很说明问题:它不是某种需要你配合的边角情况,而是一个稳定的、可重复的「点开就中」。
真正被偷走的是什么
注入的代码跑在受害者的已认证网页上下文里,这意味着它可以直接调后端 API,而不是爬到页面上的可见文字。文章给出的能力清单:
- 枚举受害者的近期对话(
/backend-api/conversations,一次拉 20 条) - 读取一条从未分享给攻击者的私密对话全文
- 从父文档里解析
#client-bootstrap,拿到 access token 和账号 ID,并核对 token 所属账号与会话是否一致 - 用
Authorization: Bearer <受害者 token>带上ChatGPT-Account-ID头发请求,再用一个普通图片请求把选中的值外传 - 理论上可触达前端暴露的账号操作。演示的证明只做到私密对话,这一点别夸大。
外传只发了「一小段选中的值」——但要注意,代码手上已经有完整的已认证响应了。发出去多少只是取证的取舍,不是能力上限。请求前它还清掉了 token、账号、bootstrap、session、header 的引用,这是典型的痕迹处理。
5000 美元赏金,和 176 条骂声
Hacker News 上这条拿到 361 分、176 条评论,技术讨论没占多少,绝大部分在吵赏金。几个有代表性的说法:有人指出「它毕竟需要用户点一条链接」,但依然认为给得太少,并警告这会劝退后来者;有人把这笔钱形容成「客客气气的『谢了啊,别再来』价」;也有人认为 5000 美元对一家小创业公司算合理,对 OpenAI 就「荒谬」。还有人预测下一个发现者会把漏洞私卖。
反方也有:有观点认为服务端漏洞修得快,本身就不值钱;大规模悬赏会把漏洞挖掘变成产业。Simon Willison 的评价最短也最锋利——「对于这么严重的漏洞,有点便宜了」。
我不想替任何一方站台,但有个结构性的观察值得记下:赏金定价反映的是公司的注意力分配,不是漏洞的实际风险。一个 P1、影响全体登录用户、能读私密对话的洞,和一次只能改错别字的前端 bug,在提交表单上长的是一模一样的。区别只在复现成本和「有没有人愿意去挖」。
这件事对普通用户意味着什么
先说结论:现在不需要你做任何事。10 月 26 日两个前端版本都拒收了这条消息,链路已经断掉。你不需要改设置,不需要撤销授权,也不需要重新登录。
但有三条习惯值得留下:
- 陌生分享链接别随手点。这条漏洞的核心动作就是「打开一条别人给的 share 链接」。以前这算低风险操作,现在得当成未知附件对待。
- 公开分享前想一秒。攻击者能利用,是因为「一个对话里同时有图表和网页预览」这件事在分享时会被完整带走。你分享出去的对话,结构本身也是被分享的内容。
- 把「沙箱」当成一层,不是一道墙。这次沙箱没坏,坏的是跨组件之间的信任边界。你在任何产品里看到「iframe 隔离」,它隔的是 DOM,不隔消息。
给做前端的人:三条能直接抄的结论
Parameter Labs 在文末给了防御建议,我认为这三条最硬:
- 消息接收方要同时校验来源地址和那个被授权的具体窗口。只验 origin 不够——同源里也可能有别的 iframe 在发消息。
none这种「谁都能发」的默认值,任何涉及改状态的指令都不该用它。 - 跨窗口的配置数据里不许带原始 HTML。键盘布局这种「看起来只是数据」的东西,一旦被拼进
innerHTML,它就是执行面。Trusted Types 的包装函数不是净化器,别把它当净化器用。 - CSP 不能当唯一防线。这次绕开 CSP 靠的是白名单域名上的一个合法 JSONP 反射接口——白名单越长,可利用的回显面越大。动态生成的文档要保持
sandbox,别让srcdoc裸奔。
小结
这是一次干净、完整、公开披露的安全研究:13 天从发现到修复,链路每一步都能复现,写清楚了根因,也承认了沙箱本身没问题。它同时也是个提醒——AI 产品的攻击面已经不只在模型和 API 上了,而在「预览」「分享」「组件之间传消息」这些看起来很日常的地方。
至于 5000 美元,它会作为一个反复被引用的价格锚点留在圈子里。下次再有 P1,人们会拿它来比。
参考来源
- Parameter Labs:We Found a Gap at OpenAI(技术细节原始出处,2026-10-28)
- Simon Willison:How We Took Over ChatGPT Accounts(2026-10-31)
- Hacker News 讨论(361 分 / 176 条评论)


