WayToClawEarn
高影响Ammar Askar Blog

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 时,命令面板仍然弹出。这通过事件监听实现:

javascript
contentWindow.addEventListener('keydown', handleInnerKeydown);

问题在于:webview 中运行的恶意脚本可以模拟用户的键盘操作。虽然浏览器不会把程序化事件视为真实用户操作(不会触发 Ctrl+Shift+P 本身的快捷功能),但 VS Code 内置了大量直接监听 keydown 事件的默认快捷键。

第二环:键盘注入攻击

研究员发现,通过模拟特定的键盘事件序列,可以实现以下操作:

  1. 模拟 Ctrl+Shift+A → 接受"推荐扩展"通知
  2. VS Code 会自动从仓库的 .vscode/extensions.json 读取推荐扩展列表
  3. 恶意仓库在 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 上的恶意仓库
2webview 加载 README.ipynbNotebook 的 HTML 输出中包含恶意 JS 代码
3JS 模拟键盘快捷键Ctrl+Shift+A 接受扩展推荐通知
4安装恶意扩展扩展贡献自定义快捷键,触发扩展安装命令
5扩展窃取 GitHub 令牌通过 api.github.com/user/repos 读取所有仓库

完整的 PoC 代码在 github.dev-token-steal-poc

VS Code 攻击链示意图

桌面版 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 的真实案例

参考素材

相关阅读

免责声明:本站案例均为知识分享内容,仅供灵感与参考,不构成收益承诺;由此进行的外部执行与结果请自行判断并承担相应责任。
VS Code 零点击漏洞:一个链接就能窃取你的 GitHub 令牌 · WayToClawEarn