通过 VS Code Web 编辑器漏洞窃取 GitHub 令牌
在基于网页的 Visual Studio Code(vscode.dev 和 github.dev)版本中发现了一个关键漏洞,攻击者只需一次点击即可窃取用户的 GitHub 身份验证令牌。该利用链利用了编辑器处理笔记本和扩展安装方式的多个漏洞,绕过发布者信任系统,在用户会话中执行恶意代码。
利用链:令牌是如何被窃取的
该攻击依赖于多步骤过程,以绕过安全边界并从浏览器会话中提取敏感凭证。
绕过发布者信任
VS Code 实现了发布者信任系统,以防止安装不受信任的扩展。然而,研究人员发现了一种绕过此筛选的方法:
- 本地工作区扩展:攻击者可以使用本地工作区扩展,这些扩展不会像市场扩展那样经过相同的发布者筛选。
- CSP 绕过:虽然内容安全策略(CSP)通常会阻止本地扩展中的 JavaScript 执行,但攻击者可以使用本地扩展将键盘快捷键绑定到命令
install extension without checking publisher。 - 有效载荷:通过触发此快捷键,攻击者可以强制安装第二个“真实”的恶意扩展,完全绕过信任系统。
通过笔记本窃取令牌
恶意扩展安装后,可访问编辑器的内部状态。该漏洞因网页编辑器处理笔记本的方式而进一步放大。如果攻击者能够让受害者在 webview 中打开恶意笔记本,则可能实现跨站脚本(XSS)。由于网页编辑器已登录 GitHub,这个 XSS 可用于访问会话中存储的 GitHub 身份验证令牌。
缓解措施与解决方案
Microsoft 已实施临时修复以应对该漏洞。主要更改包括:
- 笔记本确认:在网页版本的 VS Code 中打开笔记本时添加确认提示,以防止恶意内容自动执行。
- 命令限制:禁用通过命令跳过受信任发布者检查的能力,堵住用于静默安装不受信任扩展的漏洞。
这些更改已于 6 月 3 日左右合并到 VS Code 代码库(在 PR #319705 中提及)。
技术分析与社区洞见
安全研究人员和开发者指出了导致此漏洞出现的多个系统性问题。
基于网页的 IDE 的“原罪”
一些社区成员认为 github.dev 的根本设计存在安全风险。通过允许基于浏览器的 IDE 完全登录 GitHub 并拥有广泛权限,攻击面显著增大。
很遗憾,嵌入网页的 VSCode 编辑器居然会登录 GitHub……在理想的情况下,如果浏览器内的 IDE 能以临时的、针对单个仓库的权限范围或令牌启动,只允许对该仓库进行 pull 和 push,而根本没有 github.com 的网页会话,那就再好不过了。
扩展信任级别
另一个关键的失败点是分配给扩展的信任级别。目前,VS Code 扩展以与编辑器本身相同的信任级别运行,这意味着一旦扩展被攻破,就能广泛访问编辑器的环境。
使这种情况尤其糟糕的攻击面在于 VSCode 扩展与编辑器本身拥有相同的信任级别,而且大多数开发者安装了数十个扩展而未审查其权限。
风险概述
对于开发者而言,主要的启示是,在使用基于网页的编辑器处理未完全受信任的仓库时必须格外谨慎。仅凭一次点击即可窃取令牌,展示了在浏览器环境中将广泛的会话权限与可扩展插件架构相结合的危险性。
SUMMARY: 在基于网页的 VS Code 编辑器(vscode.dev 和 github.dev)中存在的漏洞,使攻击者能够通过恶意扩展和笔记本处理漏洞的组合窃取 GitHub 身份验证令牌。
TITLE: 通过 VS Code Web 编辑器漏洞窃取 GitHub 令牌