文章摘要
文章披露了VSCode的一个安全漏洞,攻击者可通过诱导用户点击链接窃取GitHub令牌,从而获得对用户仓库(包括私有仓库)的读写权限。该漏洞涉及github.dev功能与VSCode Webview的安全模型问题,文章还包含漏洞详情、防护建议及完整披露时间线。
文章总结
标题:通过VSCode漏洞一键窃取GitHub令牌
核心内容概述
漏洞危害
攻击者仅需诱导用户点击恶意链接,即可窃取具备完整读写权限的GitHub令牌(包括私有仓库访问权限)。该漏洞源于Visual Studio Code(VSCode)Webview的安全模型缺陷。
技术背景
github.dev功能
GitHub提供的在线版VSCode(github.dev)通过OAuth令牌实现仓库操作,该令牌具有用户所有仓库的全局权限,成为攻击目标。VSCode Webview安全机制
- Webview通过
<iframe>实现跨域隔离,限制JavaScript执行。 - 主窗口与Webview通过
postMessage通信实现交互功能(如Markdown预览联动)。
- Webview通过
漏洞原理
键盘事件伪造
- 安全边界突破:Webview默认将键盘事件(如keydown)转发至主窗口,以支持快捷键功能(如Ctrl+Shift+P调出命令面板)。
- 攻击利用:恶意脚本可伪造键盘事件,模拟以下操作链:
1. 触发推荐扩展安装通知(通过.vscode/extensions.json)
2. 发送Ctrl+Shift+A快捷键自动同意安装
3. 通过本地工作区扩展绕过发布者信任检查
4. 最终执行任意代码(如窃取令牌)
技术细节
- 攻击载体:Jupyter Notebook中的Markdown单元格通过<img onerror>注入JavaScript。
- 关键步骤:伪造快捷键安装恶意扩展,利用扩展API直接获取GitHub令牌。
影响范围
- github.dev用户:点击恶意链接即中招(需用户曾登录过github.dev)。
- 桌面版VSCode:需用户主动打开恶意仓库中的文件,风险较低但存在RCE可能。
防护措施
- 立即清除浏览器数据
- 清除
github.dev的Cookies和本地存储(Chrome:地址栏>网站设置>清除数据)。
- 清除
- 临时缓解
- 首次访问github.dev时出现的授权对话框可作为中断攻击的机会(需未保存登录状态)。
厂商响应与披露
- 微软未积极处理:历史记录显示MSRC多次低估VSCode漏洞风险(如标记XSS为"低危")。
- 完全披露原因:抗议微软安全响应中心对漏洞报告的漠视,推动安全修复优先级提升。
- 时间线:漏洞于2026年6月2日公开,同步提交至VSCode GitHub仓库。
延伸思考
- 防御深度优势:VSCode的CSP策略和DOMPurify有效限制了其他潜在攻击面。
- 安全与体验平衡:需重新评估Webview事件转发机制的设计合理性。
(注:原文中的图片引用、代码片段及部分技术细节已简化为文字描述,保留核心逻辑链条。)
评论总结
以下是评论内容的总结,平衡呈现不同观点并保留关键引用:
对作者的赞赏
- 肯定作者为提高VS Code安全性所做的努力
- 关键引用:
- "Thank you for essentially donating the time...you're still trying to help"(评论1)
- "This is a very good writeup"(评论2)
对GitHub/VSCode安全设计的批评
- 认为网页版VSCode与GitHub的深度集成存在安全隐患
- 关键引用:
- "it's a pity that the web embedded VSCode editor is signed into GitHub at all"(评论2)
- "a huge vulnerability surface arises from that original sin"(评论2)
对MSRC(微软安全响应中心)的负面评价
- 批评其响应流程和对待研究者的态度
- 关键引用:
- "Classic MSRC...they silently fixed the bug"(评论4)
- "The MSRC situation is really unbelievable"(评论5)
技术漏洞讨论
- 详细分析漏洞利用链和绕过方法
- 关键引用:
- "You cannot just use the shortcut trick...because of new publisher trust system"(评论7)
- "the CSP only prevents the JS in local extension but nothing about its package.json"(评论7)
安全实践建议
- 强调隔离和损害控制的重要性
- 关键引用:
- "best thing to do is segregate and control damage"(评论8)
- "trust no one, nothing...your token is going to get leaked"(评论8)
替代方案推荐
- 建议使用其他编辑器如Zed
- 关键引用:
- "If you like VSCode but don't like Microsoft, try Zed"(评论6)
安全事件亲身经历
- 分享令牌被盗的亲身经历和感受
- 关键引用:
- "the biggest feeling is the one of feeling violated"(评论8)
- "github token got stolen and also cloudflare tokens"(评论8)
总结呈现了从赞赏、技术分析到批评的完整观点谱系,保留了原始讨论中的核心论据和代表性语句。