Microsoft Visual Studio Code 缺陷可让扩展窃取密码

发布时间:2023-08-10 08:15

VS代码

Microsoft 的 Visual Studio Code (VS Code) 代码编辑器和开发环境包含一个缺陷,允许恶意扩展检索存储在 Windows、Linux 和 macOS 凭据管理器中的身份验证令牌。

这些令牌用于与各种第三方服务和 API(例如 Git、GitHub 和其他编码平台)集成,因此窃取它们可能会对受损组织的数据安全造成严重后果,可能导致未经授权的系统访问、数据泄露、 ETC。

该缺陷是 由 Cycode 研究人员发现的,他们将其连同他们开发的有效概念验证 (PoC) 报告给了 Microsoft。然而,这家科技巨头决定不解决这个问题,因为扩展预计不会从环境的其他部分沙箱化。

通过扩展窃取秘密

Cycode 发现的安全问题是由于 VS Code 的“秘密存储”中缺乏对身份验证令牌的隔离造成的,该 API 是一个允许扩展在操作系统中存储身份验证令牌的 API。

这是使用 Keytar 完成的,Keytar 是 VS Code 的包装器,用于与 Windows 凭据管理器(在 Windows 上)、钥匙串(在 macOS 上)或密钥环(针对 Linux)进行通信。

这意味着 VS Code 中运行的任何扩展(甚至是恶意扩展)都可以访问秘密存储并滥用 Keytar 来检索任何存储的令牌。

Cycode 研究员 Alex Ilgayev 告诉 BleepingComputer,除了内置的 GitHub 和 Microsoft 身份验证之外,所有保存的凭据都来自使用第三方扩展。

“除了内置的 Github/Microsoft 身份验证之外,VSCode 中保存的所有令牌都来自扩展,”Ilgayev 告诉 https://28u.cc

“它们要么由官方扩展(来自 Microsoft)定义,例如 Git、Azure、Docker/Kubernetes 等,要么由第三方扩展定义,例如 CircleCI、GitLab、AWS。”

包含登录令牌的钥匙串
包含登录密码的钥匙串
来源:Cycode

发现问题后,Cycode 的研究人员开始尝试创建恶意扩展来窃取 CircleCI(带有 VS Code 扩展的流行编码平台)的代币。他们通过修改 CircleCI 的扩展来运行一个命令来实现这一点,该命令将公开其安全令牌,甚至将其直接发送到研究人员的服务器。

逐渐地,他们开发了一种更通用的攻击方法来提取这些秘密,而不篡改目标扩展的代码。

“我们开发了一个概念验证的恶意扩展,它不仅可以从其他扩展中成功检索令牌,还可以从 VS Code 的 GitHub 和 Microsoft 帐户的内置登录和同步功能中成功检索令牌,从而实现“令牌窃取”攻击。”- Cycode。

接下来,必须对检索到的令牌进行解密,Cycode 发现用于加密令牌的算法是 AES-256-GCM,通常是安全的。但是,用于加密令牌的密钥是从当前可执行路径和计算机 ID 派生的,因此可以轻松重新创建密钥。

解密检索到的令牌
有助于解密秘密的信息
来源:Cycode

检索到的令牌由 VS Code 的 Electron 可执行文件中运行的自定义 JS 脚本解密,解密并打印本地安装的扩展的所有密码。

解密检索到的令牌
解密检索到的令牌
来源:Cycode

Cycode 研究人员发现的第二个缺陷是“getFullKey”函数通过给定的“extensionId”检索机密,该“extensionId”源自扩展程序的名称和发布者。

此问题允许任何人修改这些字段并欺骗 VS Code 授予他们访问另一个扩展的安全令牌的权限。

Cycode 使用再次模仿 CircleCI 的 PoC 扩展对此进行了测试;然而,他们指出,复制任何其他扩展并获取其秘密都是微不足道的。

披露和(不)修复

Cycode 告诉 https://28u.cc,他们两个月前向微软披露了这个问题,甚至展示了他们的 PoC 扩展及其窃取存储的扩展令牌的能力。

不管怎样,微软的工程师并不认为这是一个安全问题,并决定维持 VS Code 秘密存储管理框架的现有设计。

https://28u.cc 已联系 Microsoft 请求对上述内容发表评论,但尚未收到对我们问题的答复。

客户热线:037125966675