VS Code 零点击漏洞:一个链接就能窃取你的 GitHub 令牌
安全研究员披露 VS Code webview 键盘注入漏洞,点击链接即可窃取 GitHub OAuth 令牌。微软已修复但仅评中等风险。
2026年6月3日 · 阅读约 7 分钟
核心结论
2026 年 6 月 3 日,安全研究员 Ammar Askar 披露了一个严重的 VS Code 安全漏洞:攻击者只需诱导用户点击一个链接,就能在 github.dev(浏览器版 VS Code)中窃取用户的 GitHub OAuth 令牌,从而读取和写入包括私有仓库在内的所有代码。漏洞利用了 VS Code webview 的键盘快捷键注入机制,绕过 iframe 沙箱隔离。微软已修复该漏洞,但将其评级为 "中等"(Moderate),引发安全社区广泛讨论。
关键数据:
- 漏洞类型:Remote Code Execution(通过 github.dev webview)
- 攻击入口:一个恶意 GitHub 仓库的 README.ipynb(Jupyter Notebook)
- 影响面:所有使用 github.dev 的 GitHub 用户
- 修复状态:微软已修复,评级为 Moderate
- HN 热度:266 分,34 条评论
漏洞解剖:从一次点击到令牌失窃
发现这个漏洞的安全研究员 Ammar Askar 是一名专攻编程语言和安全的计算机科学家。他在博客中详细披露了完整的攻击链路。
攻击入口:github.dev
GitHub 有一个便捷功能叫 github.dev——在任何仓库的 URL 中将 github.com 改成 github.dev,就会在浏览器中启动一个轻量版的 VS Code。这个浏览器版 VS Code 非常强大:你可以查看所有文件(包括私有仓库)、发送 Pull Request、甚至提交代码。
这一切依赖 GitHub 向 github.dev 的跨域 OAuth Token 传递机制:
"这个令牌没有限定到特定仓库,而是有权限访问你所有的仓库。"
第一环:Webview 沙箱绕过
VS Code 作为 Electron 应用,使用 <iframe> 实现安全沙箱——webview 中的 JavaScript 应该与主进程完全隔离。webview 使用 vscode-webview:// 作为 origin,而主窗口使用 vscode-file://。
但 VS Code 为了用户体验,实现了一个键盘快捷键消息传递机制:当用户在 webview 中按下 Ctrl+Shift+P 时,命令面板仍然弹出。这通过事件监听实现:
contentWindow.addEventListener('keydown', handleInnerKeydown);问题在于:webview 中运行的恶意脚本可以模拟用户的键盘操作。虽然浏览器不会把程序化事件视为真实用户操作(不会触发 Ctrl+Shift+P 本身的快捷功能),但 VS Code 内置了大量直接监听 keydown 事件的默认快捷键。
第二环:键盘注入攻击
研究员发现,通过模拟特定的键盘事件序列,可以实现以下操作:
- 模拟
Ctrl+Shift+A→ 接受"推荐扩展"通知 - VS Code 会自动从仓库的
.vscode/extensions.json读取推荐扩展列表 - 恶意仓库在 JSON 中声明了一个恶意扩展
但 VS Code 1.97 引入了 "发布者信任"(Publisher Trust)系统——首次安装来自新发布者的扩展会弹出额外的确认对话框。
绕过方法:利用 VS Code 的 本地工作区扩展(local workspace extensions)功能。在受信任的工作区(github.dev 始终是受信任的)中,可以在 .vscode/extensions.json 中声明本地扩展。虽然 Content Security Policy 会拦截从本地文件加载的扩展,但扩展的 package.json 可以贡献自定义快捷键绑定——这样就形成了一个完整的指令链。
第三环:完整攻击链
攻击流程总结为 5 步:
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 受害者点击恶意链接 | 跳转到 github.dev 上的恶意仓库 |
| 2 | webview 加载 README.ipynb | Notebook 的 HTML 输出中包含恶意 JS 代码 |
| 3 | JS 模拟键盘快捷键 | Ctrl+Shift+A 接受扩展推荐通知 |
| 4 | 安装恶意扩展 | 扩展贡献自定义快捷键,触发扩展安装命令 |
| 5 | 扩展窃取 GitHub 令牌 | 通过 api.github.com/user/repos 读取所有仓库 |
完整的 PoC 代码在 github.dev-token-steal-poc。

桌面版 VS Code 也受影响
这个漏洞不仅影响浏览器版的 github.dev,也影响桌面版 VS Code。区别在于触发条件:
- github.dev:只需点击一个链接即可触发(无需用户确认)
- 桌面版:需要用户先克隆恶意仓库并打开 Notebook 文件
桌面版的攻击面更小,但因为 VS Code 是开发者的主力编辑器,一旦攻破后果更严重——Electron 应用的 JS 代码执行几乎等同于完整的远程代码执行(RCE)。
微软的修复与争议
微软在收到报告后修复了该漏洞,但将其评级为 "中等"(Moderate)。研究员对此表达了强烈不满:
"上次我向 MSRC 报告 VS Code 漏洞是一次可怕的经历——他们在完全不给我署名的情况下悄悄修复了我指出的 bug。他们把它标记为'重复'。"
最终,研究员选择公开披露此事,希望通过社区压力推动微软改进其安全响应流程:
"对于这些人,我很抱歉,但这是我能影响 MSRC 和 VS Code 安全态势的少数杠杆之一。"
HN 社区反应
Hacker News 社区对这件事的反应比较冷静,主要聚焦在 root cause 分析上。一位用户指出:
"从宏观来看(也许有点无用),可惜的是 web 嵌入式 VS Code 编辑器根本不需要登录 GitHub。无论纵深防御与否,那个 origin 的 OAuth 令牌创造了一个巨大的攻击面。"
社区整体对研究员的"白送"行为表示感谢——他本可以选择把漏洞卖给零日市场,但选择公开披露以推动改进。
对开发者的 3 条实操建议
1. 清理 github.dev 本地数据
如果你从未使用过 github.dev,在点击不明链接时会多一个确认对话框。但一旦通过过这个对话框,攻击就可以无感触发。立即清理 github.dev 的浏览器本地数据可以减少暴露面:
- 浏览器设置 → 隐私与安全 → 查看网站数据
- 搜索
github.dev - 删除所有关联数据
2. 评估 VS Code 安全扩展机制
检查你的团队是否在 VS Code 中使用了工作区推荐扩展(.vscode/extensions.json)。这是很有用的功能,但也是攻击面之一。建议:
- 只从经过验证的发布者安装扩展
- 对
github.dev的使用保持警惕,不随意打开未知仓库 - 考虑为 github.dev 使用独立的浏览器配置文件
3. 关注 AI Agent 工具的安全配置
这个漏洞的价值在于它展示了 AI 时代的攻击面扩张。类似 github.dev 这样的 web 版开发工具、AI 编程 Agent(Claude Code、Codex)、自动化工作流工具都在创造新的攻击媒介。
想深入了解 AI 编程工具的安全配置?推荐阅读:AI 编程 Agent 安全配置教程:3 步给 Claude Code/Codex 加权限沙箱
安全研究也是一个可以赚钱的方向——安全研究员用 Claude Code 做漏洞挖掘:月入 $10,000 的真实案例
参考素材
相关阅读
- 想系统学习 AI Agent 安全?看 AI 编程 Agent 安全配置教程
- 漏洞挖掘也能赚钱?安全研究员的 $10,000 月入案例