【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

相关推荐
油泼辣子多加5 小时前
2024年12月18日Github流行趋势
github
hunteritself5 小时前
AI Weekly『12月16-22日』:OpenAI公布o3,谷歌发布首个推理模型,GitHub Copilot免费版上线!
人工智能·gpt·chatgpt·github·openai·copilot
Clockwiseee6 小时前
php伪协议
windows·安全·web安全·网络安全
pubuzhixing7 小时前
开源白板新方案:Plait 同时支持 Angular 和 React 啦!
前端·开源·github
Lspecialnx_11 小时前
文件解析漏洞中间件(iis和Apache)
网络安全·中间件
学习溢出13 小时前
【网络安全】逆向工程 练习示例
网络·安全·网络安全·渗透测试·逆向工程
玖疯子13 小时前
如何详细地遵循RustDesk的步骤来搭建远程访问和自定义服务器?
github
测试者家园13 小时前
ChatGPT生成接口文档的方法与实践
软件测试·chatgpt·测试用例·接口测试·接口文档·ai赋能·用chatgpt做软件测试
小华同学ai14 小时前
ShowDoc:Star12.3k,福利项目,个人小团队的在线文档“简单、易用、轻量化”还专门针对API文档、技术文档做了优化
前端·程序员·github