ChatGPT 漏洞:一个分享链接就能劫持账户
ChatGPT 漏洞可通过公开聊天链接劫持账户并读取他人的聊天记录。OpenAI 支付了 5000 美元赏金。本文解析攻击原理。
本文的其他语言版本:العربيةDeutschEnglishEspañolFrançaisItaliano日本語Polski
10 月 28 日,Parameter 的 Mukul Goyal 发布了一个 ChatGPT 漏洞的分析:攻击者只需一个普通的公开对话链接(chatgpt.com/share/…)就能劫持账户。攻击者的代码会在打开链接者已登录的会话中运行。OpenAI 于 10 月 26 日关闭了这份报告,并通过漏洞赏金计划支付了 5000 美元。
这个 ChatGPT 漏洞是怎么回事
攻击由四个漏洞串联而成(按研究人员的描述):
- 对话中的交互式图表会加载 MathLive,这是一个用于输入数学公式的开源库。该库接受页面框架之间的消息时不限发送方,不检查是谁发来的。
- MathLive 的键盘布局数据可以包含 HTML,而该库会不经过滤地将其插入主页面。
- 这段 HTML 会创建一个没有
sandbox属性的 iframe,因此新文档继承了 chatgpt.com 的源。 - ChatGPT 的内容安全策略(Content Security Policy)阻止了内联脚本,但允许 YouTube。YouTube 的 oEmbed 接口支持 JSONP 风格的回调,研究人员借此从受信任的域名加载了自己的代码。
实际操作中,攻击者会发布一个看起来完全正常的对话。开头是一个真实的图表(用来加载 MathLive),后面是一个 HTML 预览,也就是把 HTML 代码块变成一个可运行小页面的 Preview 功能。正是这个预览向该库发送了恶意消息。
研究人员表示,打开分享链接是唯一需要的操作。在最稳定的版本中,受害者需要点击一次 Preview;在后来的版本中,预览会自动打开,大约 4.5 秒后就能看到代码执行的证据。
攻击者具体能做什么?
代码以 chatgpt.com 的身份在受害者的会话中运行,因此可以代表受害者调用 ChatGPT 的已认证 API。在概念验证中,研究人员获取了最近的对话列表,接着读取了一段没有任何人分享给他们的私密对话内容,并把其中一小段发送到了自己的服务器。
据文章所述,他们几乎可以用这种方式在受害者账户上执行任何操作(原话是 “Essentially, we could perform any action on behalf of the victim’s ChatGPT account”)。该攻击在不同账户和工作区之间同样有效。
OpenAI 如何应对?
Parameter 文章中的时间线:
- 10 月 13 日:研究人员在生产代码中确认了 MathLive 的漏洞路径。
- 10 月 18 日:向 OpenAI 的漏洞赏金计划提交报告。
- 10 月 21 日:OpenAI 复现了该漏洞,并将优先级从 P2 提升到 P1。
- 10 月 22 日:修复上线到两个网页前端中的一个;10 月 23 日,CSP 的调整阻断了攻击链的一部分。
- 10 月 26 日:两个前端都会拒绝攻击中使用的消息,报告关闭,研究人员获得赏金。
文章没有提到该漏洞在真实攻击中被利用,也没有说明 OpenAI 具体在代码中做了哪些修改。
为什么这件事引发热议?
第一,攻击非常简单。这个链接看起来和任何其他分享的 ChatGPT 对话没有区别,所以检查网址也无济于事。
第二,赏金金额。文章登上了 Hacker News 首页,评论里讨论最多的就是金额:许多人认为,一个链接就能劫持账户的漏洞只给 5000 美元太少了,也有人担心这么低的赏金会让研究人员不愿报告漏洞。
第三,问题的源头。有意思的是,整条攻击链竟然始于一个输入数学公式的库(文章标题 “Do the Math” 正是由此而来)。聊天里的交互功能越多(图表、页面预览),可能出问题的地方也就越多。而分享对话以前就出过问题:众所周知,在 Meta Muse 泄露事件中,分享聊天的标题出现在了公共 DNS 里。
今后需要注意什么?
研究人员为 Web 应用开发者总结了两条经验:
- 接收框架间消息的一方应同时检查发送方的源,以及它授予权限的那个确切窗口。
- CSP 应该是备用防线,而不是攻击者的 HTML 已经进入页面后的唯一屏障。
对我们用户来说,这个漏洞已经修复。不过值得记住的是,别人与聊天机器人的对话链接,终究是来自陌生人的链接。关于如何保护账户和 API 密钥,我在 AI 智能体安全指南中有更详细的介绍。
常见问题
这个 ChatGPT 漏洞已经修复了吗?
是的。据研究人员称,OpenAI 于 10 月 26 日确认,ChatGPT 的两个网页前端都会拒绝攻击中使用的消息。
我需要对自己的账户做些什么吗?
Parameter 的文章没有给出任何面向用户的操作建议,也没有提到研究人员测试之外的攻击。
OpenAI 为这份报告支付了多少钱?
通过漏洞赏金计划支付了 5000 美元。该报告被定为 P1 优先级。
真的只要打开链接就够了吗?
据研究人员称,是的。在一个攻击版本中还需要点击一次 Preview,而在后来的版本中预览会自动启动。