【ChatGPT插件漏洞三连发之二】零点击Github仓库接管

admin 2024年3月20日13:51:51评论9 views字数 2101阅读7分0秒阅读模式

在我们深入研究细节之前,我们想先解释一下插件上的帐户接管意味着什么。

举个例子,当您安装与您的 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) 的私有存储库。

【ChatGPT插件漏洞三连发之二】零点击Github仓库接管

(截图取自攻击者帐户,显示他如何从受害者的 GitHub 读取私人文件)

技术细节

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

  1. AskTheCode 为用户创建一个新帐户,并要求用户访问其 GitHub 帐户的权限。AskTheCode 存储 GitHub 凭据。

  2. AskTheCode 为 ChatGPT 生成代码。

  3. ChatGPT 使用该代码连接到 AskTheCode 上的用户帐户。

  4. 插件已安装。

为方便起见,我们附上了描述流程的图表:

【ChatGPT插件漏洞三连发之二】零点击Github仓库接管

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

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

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

【ChatGPT插件漏洞三连发之二】零点击Github仓库接管

而回应:

【ChatGPT插件漏洞三连发之二】零点击Github仓库接管

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

问题和攻击

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

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

而这可以通过使用接口 https://auth.pluginlab.ai/members/requestMagicEmailCode 来实现。

该接口接收邮件名并返回(功能不明)用户memberID 以及其他数据:

【ChatGPT插件漏洞三连发之二】零点击Github仓库接管

攻击流程

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

  1. 攻击者使用接口 https://auth.pluginlab.ai/members/requestMagicEmailCode 获取他想要的任何用户(受害者)的 memberID。
    请注意,memberID 只是邮件的 SHA1,因此攻击者无需调用此 API,而是可以自行计算 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 框架的其他数十个插件。

来源:salt.security

推荐阅读:【ChatGPT插件漏洞三连发之一】未授权恶意插件安装

添加好友,加入安全行业交流群

【ChatGPT插件漏洞三连发之二】零点击Github仓库接管

关注星尘安全

解锁更多行业优质好文

原文始发于微信公众号(星尘安全):【ChatGPT插件漏洞三连发之二】零点击Github仓库接管

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月20日13:51:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【ChatGPT插件漏洞三连发之二】零点击Github仓库接管http://cn-sec.com/archives/2588881.html

发表评论

匿名网友 填写信息