AI宝库

AI宝库首页 › AI 资讯 › 我们接管了ChatGPT账户

我们接管了ChatGPT账户

来源:Hacker News · 发布时间:10-31 · 由 AI宝库每小时自动聚合

文章 URL:https://www.parameter.ai/labs/we-found-a-gap-at-openai 评论 URL:https://news.ycombinator.com/items?id=50314699 要点:108#评论:48

做数学:我们如何接管ChatGPT账户

通过绕过ChatGPT的沙盒和内容安全政策,我们的研究团队能够简单地通过发送链接来接管任何人的账户。

2026年10月,我们找到了一种方法,将一个普通的公用ChatGPT股份转变为由攻击者控制的JavaScript运行在谁打开的签名会话内。

攻击者可以创建恶意对话,使用ChatGPT的正常共享功能来发布,并将链接发送给另一个用户。 当受害者打开股权时,有效载荷作为chatgpt.com执行,并访问受害者经认证的网页会话。

我们确认这个代码可以列出受害者的谈话列表,从从未与攻击者共享的私人谈话中取回内容,并将对话中的数据发送到外部服务器。 有效载荷并不限于修改页面或显示警报——它可以直接将ChatGPT经认证的API称为受害者,基本上允许我们接管受害者的ChatGPT帐户。

受害人不需要安装App、加入项目、粘贴码或打开开发工具。 开放共同联系是唯一需要采取的行动。

OpenAI于10月26日确定发行,并将报告分类为P1.

链条开始有两个功能,它们自己看起来是无害的:一个图表和一个HTML预览。

技术通道

它从一个图表和一个预览开始

启动这一研究的问题很简单:如果将预览代码装入另一个网站,它还能和什么交谈?

ChatGPT可以使用它的"预览"功能将一个HTML代码块变成一个小的工作网页。 由于该页面可能包含任意代码,ChatGPT在不同的网页地址上敏锐地在一个受限制的框架内运行。 "预览"可以运行JavaScript,但浏览器视之为不同的网站,因此无法直接检查周围已签名的ChatGPT页面。

起初,这种孤立似乎完全如所愿。 预览中的代码无法读取父代码。 文档,这是 ChatGPT 主页。 这应该是结束的。

对话中还包含一个正常的互动图。 在幕后,图上加载了一个叫"MathLive"的数学库。 装入它所做的不只是绘制出图表:它还在主的ChatGPT页面上为与MathLive在屏幕上键盘相关的消息安装了收听器。

浏览器调用相关的API后Message. 即使浏览器阻止了两个帧相互阅读页面,这也是两个帧交换信息的合法方式。 您可以把它看作是一个邮件插槽:受限制的预览不能走入主页,但它仍然可以通过插槽来放出一个消息。

只有接收者检查发送信息的人才安全

MathLive没有检查我们感兴趣的环境它的收听器接受了更改了虚拟键盘布局的消息,这种布局被允许包含HTML. 该图已经安装了接收器;预览给了我们一个不信任的发送器。 两个无关的特性意外地创造了一条穿过沙盒的路径。

本来不应该奏效的信息

预览发送了两封信。 第一个用我们的HTML取代了虚拟键盘布局。 第二段告诉MathLive显示键盘,使其使新的布局:

MathLive承认了公共消息类型,但其顶级控制器使用了无源策略,这意味着它接受来自任何网络地址的信息。 它也不要求更新设置信息来自先前核准的窗口。 任何人如果能够联系到听众,并且知道消息格式,都可以取而代之。

当键盘打开后,MathLive将所提供的布局加入到一个HTML字符串中,并在真实的ChatGPT页面中被分配到内HTML. 一个叫CreativeHTML的帮助者最初看起来可能使数值消毒。 它没有;它标记字符串为可信任的,并且将我们的HTML通过没有改变。

这是令人兴奋的,但我们仍然没有 JavaScript 执行。 通过内置HTML插入的脚本标记不会自动运行。

下一步是使用 srcdoc 的 iframe,浏览器功能,让一个嵌入式框架直接在属性中携带其 HTML:

MathLive在没有沙盒属性的情况下将这个框架插入了主 ChatGPT 文档。 这给了我们两个有用的属性。 首先,srcdoc创建了外部脚本可以执行的新文档。 第二,由于主版ChatGPT页面创建了帧,浏览器给了它https://chatgpt.com的网页身份。 因此,新框架内的代码可以访问主页。

搭载YouTube JSONP的CSP

ChatGPT的内容安全政策,或CSP再次阻止了我们。 CSP控制一个页面可加载的脚本,而策略正确地被内置了JavaScript. 然而,它确实允许了YouTube的脚本。

YouTube的oEmbed端点支持JSONP风格的回调参数。 JSONP的响应是JavaScript而不是普通的JSON. 结束点试图拒绝无效的回调,但它在返回其验证错误之前将回调放入了回调:

反应是这样开始的:

结束我们的回电;由于YouTube已经被ChatGPT的CSP允许,浏览器将这个响应作为脚本加载,并在新框架内运行了我们的回调。

我们现在有任意的 JavaScript 作为 chatgpt.com 运行。 最初的"预览"仍然被隔离在其单独的网页地址上;我们通过说服主页中一个值得信赖的组件为我们创建一个新的,没有遮盖的文档而跨越了边界。

将实验室错误变成一个公共链接

迄今为止,这是一次有用的沙盒出逃,但第一个工作版本并不是令人信服的真实世界攻击。 它使用由研究人员控制的ChatGPT App作为发件人。 受害人需要先连接或援引App。

我们接下来尝试通过HTML的原生附件来运送有效载荷。 ChatGPT在同一沙盒预览中打开了附件,从而可以发送恶意的MathLive消息。

然而,当我们作为公开份额输出对话时,附件仍然存在,但先前的图表没有。 该图之所以重要,是因为它加载了"MathLive",并在主页上安装了脆弱的消息收听器。 没有它,附件仍然可以发送信息,但没有任何信息在听或处理。

突破是将两段直接放入一个普通的公开对话中:

- 主页上一个真实的图表初始化的数学。

- 后来的助理作者HTML预览发送了这两封信。

由此产生的/share/<id>链接为另一个用户保留了完整的链条。 攻击者通过电子邮件、聊天、支持票或社交贴纸,受害者不需要安装任何东西,加入攻击者的工作空间,或通过攻击者控制的流量进行认证。 他们只好参观攻击者共享的ChatGPT URL.

我们观察了两个互动版本。 在最稳定的再版中,被害者打开了股权并点击了一次ChatGPT的普通预览按钮。 我们后来将 HTML 块标记为可预览的块,以便 ChatGPT 自动打开。 在该版本中,打开链接是受害者的唯一点击。 我们把自动路径复制了三次,在一个单独的账户中,包括经过一次硬刷新之后,警报大约在4.5秒后出现。

图表和预览独立上载,因此有效载荷可以偶尔在MathLive准备好之前发送信息。 最终的航母通过在限定时间内重试同两条电文来处理该赛事。 主页的一位警卫确保了私人对话证明和外出请求只运行过一次。

此时,公用共享可以显示被浏览器识别出来自chatgpt.com的提示并可以在主页上添加一个横幅。 这证明了我们的代码运行的地方。 它还没有显示为什么虫子很重要。

警告还不够

此时,显示警示,是剥削所能做的最不有趣的事情。 JavaScript作为chatgpt.com运行,这意味着它可以使用与普通网络应用程序相同的认证上下文与ChatGPT交互。

有效载荷读取了该页面已经获得的会话信息,并用它来调用ChatGPT的对话API. 首先,它列举了受害者最近的对话。 然后,它可以请求为选定的私人对话提供消息数据:

获取/ 后端- api/ conversation?. & limit=20& order= updated&offset=0

获取/后端- api/ conversation/ < conversation-id>?num tuns=2

这是直接认证的 API 访问,而不是在屏幕上偶然可见的文本。 目标对话与恶意分享无关,从未与攻击者分享过。

一旦被注入的JavaScript得到响应,将数据发送出站是直截了当的。 有效载荷为我们控制的服务器创建了普通图像请求。

我们故意只把一个小部分的响应发到场外。 注入的代码已经收到经认证的谈话回复,并且可以读取其内容,因此脆弱性不仅限于这一价值。

结果形成了实用的跨用户数据-被窃取的原始。 一个恶意的公开对话可以在另一个用户的签名-in ChatGPT会话内执行,列举私人对话,检索私人消息内容,并将所选数据发送到攻击者控制的服务器。

因为代码运行与网络应用程序的认证访问,它的覆盖范围本质上不局限于我们的证据中使用的对话端点。 通过ChatGPT认证的前端API所暴露出的其他数据和动作坐落在同一安全边界内。 基本上我们可以代表被害人的ChatGPT账户做任何行动

出了什么问题 OpenAI修好了

预览沙盒本身就起作用了。 预览中的代码无法直接读取 ChatGPT 页面。 问题在于主页的另一部分愿意接受其指示。

三个设计决定将这个错误变成了一个充分利用:

- MathLive接受了一个改变状态的信息但没有证明是哪个框架发出的

- 消息格式允许以键盘放出数据提供原始 HTML。

- HTML可以创建一个无法保存的文档,它继承了chatgpt.com的身份。

YouTube的回应是CSP的最后工作,仅屏蔽该端点会移除一条路径到JavaScript,同时仍然留下一个无法被信任的预览可以将HTML插入到ChatGPT.

OpenAI同时复制了JavaScript执行和私人对话证明。 平面被推出两个版本的ChatGPT网络前端。 在推出期间,CSP的更改屏蔽了部分原链条,而一个版本仍需要更新。 10月26日,OpenAI确认,现在两个版本都拒绝了报告使用的跨框架的MathLive信息,并标出问题已解决。

防御性课程很简单:

- 信息接收器应核查发送者的网页地址和获得许可的确切窗口。

- 跨窗口设置不应包含原始 HTML。

- 动态生成的文档在内容受到不可信框架影响时,仍应被放入沙箱。

- CSP应该是备用控制,而不是攻击者控制的HTML到达主站点后的唯一屏障。

这个bug很有趣,因为每个单个特性看起来都是合理的。 预览被隔离。 图形可以装入数学键盘。 框架可以交换消息。 CSP允许一个主要的媒体供应商。 可以分享公共对话。 只有将所有这些特点合并成一页,脆弱性才会出现。

时间线

技术指出

上面的主要故事包含了完整的开发链。 读者详细情况如下:

本文由 AI宝库自动抓取并翻译,版权归原作者所有;如需查看原文请点下方链接。

相关 AI 工具

相关免费羊毛

同源资讯

阅读原文(parameter.ai)

标题、摘要与正文均来自该信源的公开页面,版权归原作者所有;本站自动聚合与翻译,仅作出处跳转。

← 返回 AI 资讯列表AI工具图鉴首页

返回 AI宝库首页 · 提交工具 · 商务合作 · 关于本站 · 602 款 AI 工具分类导航 · 每日 AI 热门项目与动态