透過 VS Code 網頁編輯器漏洞竊取 GitHub 令牌
在基於網頁的 Visual Studio Code 版本(vscode.dev 與 github.dev)中發現了一個嚴重漏洞,允許攻擊者僅透過一次點擊就竊取使用者的 GitHub 認證令牌。此利用手法結合了一系列錯誤,涉及編輯器對筆記本的處理以及擴充功能的安裝,繞過發佈者信任機制,在使用者會話中執行惡意程式碼。
攻擊鏈結:令牌如何被竊取
此攻擊依賴多步驟流程,以繞過安全邊界並從瀏覽器會話中外洩敏感憑證。
繞過發佈者信任
VS Code 實作了發佈者信任系統,以防止安裝未受信任的擴充功能。然而,研究人員發現了一種繞過此審核的方法:
- 本機工作區擴充功能:攻擊者可以使用本機工作區的擴充功能,這類擴充功能不會經過與 Marketplace 擴充功能相同的發佈者審核。
- 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 擴充功能與編輯器本身擁有相同的信任層級,而大多數開發者安裝了數十個擴充功能卻未檢視其權限。
風險摘要
對開發者而言,主要的教訓是,在使用網頁式編輯器處理未完全受信任的倉庫時必須格外謹慎。僅透過一次點擊即可外洩令牌,顯示了在瀏覽器環境中結合廣泛會話權限與可擴充插件架構的危險性。