当前位置: 首页 > article >正文

【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. 插件已安装。

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

图片

您需要关注的是图中的“Code”,这是从 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,因此攻击者无需调用此 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


http://www.kler.cn/news/365713.html

相关文章:

  • Flutter之build 方法详解
  • ue5实现数字滚动增长
  • Web3的核心概念:去中心化如何改变互联网
  • R实验——logistic回归、LDA、QDAKNN
  • django5入门【01】环境配置
  • 上传Gitee仓库流程图
  • Visual 使用技巧合辑
  • 栅格的着色器实现【最完善】
  • 使用AutoDL训练YOLO等计算机视觉网络模型(AutoDL+Xftp+VS Code),附详细操作步骤
  • 打开Windows来体验AIGC或者ChatGPT
  • Python使用asyncio实现异步操作
  • 深度学习系列——RNN/LSTM/GRU,seq2seq/attention机制
  • AI学习指南自然语言处理篇-Transformer模型的编码器-解码器结构
  • OpenCV通道拆分:深入理解图像处理
  • Swift 是一种由苹果公司开发的强大而直观的编程语言,主要用于开发 iOS、macOS、watchOS 和 tvOS 等苹果平台的应用程序。
  • Spring Boot:植物健康监测的智能解决方案
  • Spring Boot框架下的Java多线程
  • 【继承】讲解
  • Halcon图像颜色通道拆分合并与四则运算
  • Matlab中实现智能优化算法的平均排序图
  • Redis对象共享池,性能优化小细节
  • 设计模式(七)桥接模式详解
  • Linux之实战命令53:mtr应用实例(八十七)
  • 将获取的数据存储到Excel文件中
  • 动态规划之子数组系列(下)
  • 分行或者分列计算数组中各元素的累积numpy.cumproduct()