2023年6月3日,安全圈再度被一则重磅消息刷屏。知名安全研究员Ammar Askar于6月2日发布推文,公开了一个概念验证(PoC)漏洞。此次受影响的是GitHub浏览器版VS Code(github.dev)。简单来说,只要用户点击一个恶意链接,其账户中的GitHub OAuth令牌就可能被黑客窃取。

漏洞根源究竟在哪里?根据Askar的博文分析,问题出在GitHub浏览器版VS Code(github.dev)的Webview沙箱机制。Webview本应作为隔离沙箱,用于安全呈现Jupyter Notebook、Markdown预览等内容,防止它们直接操控主编辑器。然而,VS Code为了确保快捷键在这些隔离窗口中也能正常运作,设计了一个“贴心”功能:将按键事件转发回主编辑器窗口。攻击者发现,页面内运行的JavaScript可以伪造这些按键事件,而主窗口竟会将其视为真实输入进行处理。
该PoC的实现过程十分精巧。恶意仓库中放置了一个Jupyter Notebook以及一个本地工作区扩展。Notebook内的脚本会自动等待VS Code弹出安装扩展的提示,随后模拟键盘输入Ctrl+Shift+A,直接代替用户点击“接受安装”。本地扩展一旦被安装,便会利用VS Code对工作区扩展的隐式信任,注册一个自定义快捷键,进而触发第二个扩展悄悄完成静默安装。第二个扩展从编辑器会话中读取GitHub OAuth令牌,调用GitHub API查询私有仓库名称,最终将仓库列表和窃取的令牌一同展示在信息框中。整个过程不超过30秒,用户只需打开那个恶意的Notebook链接即可。
该问题同样影响桌面版VS Code,只是攻击门槛更高——攻击者必须首先诱使目标克隆恶意仓库并打开Notebook。此外,如果桌面版VS Code的Webview中存在其他XSS漏洞,同类攻击技术甚至可能进一步升级为远程代码执行(RCE)风险。
令人意外的是,Askar并未按照常规流程联系微软MSRC进行协调披露。他给出的理由是:此前报告VS Code漏洞时,微软会默默修复问题,却不提供任何致谢,甚至直接归类为“没有安全影响”。这一说法背后其实有“前科”——其他研究人员曾报告过VS Code内置Git扩展的命令注入漏洞、Jupyter Notebook扩展的XSS漏洞,同样被判定不符合漏洞奖励范围。可以说,这类安全问题在微软那里似乎一直不被重视。
至于如何防范,Askar提供了两条建议:第一,清除浏览器中github.dev的本地站点数据,这样下次访问github.dev时会先跳转到登录页面,让用户有机会退出可疑链接;第二,如果已经运行过这个PoC,还需要手动从github.dev环境中卸载对应的扩展。截至发稿,微软方面尚未就此事发布公开声明。
参考
https://blog.ammaraskar.com/github-token-stealing/
