這是一次針對 GitHub.dev 環境的安全性漏洞分析。對於開發者來說,GitHub.dev 是一個非常方便的功能,只要在 GitHub 儲存庫頁面按下鍵盤上的句點鍵,就能直接在瀏覽器中開啟一個輕量化的 Visual Studio Code (VS Code) 編輯器,無需下載任何軟體即可進行簡單的程式碼修改與提交。然而,這種便利性在特定的機制下變成了安全漏洞。
漏洞的核心背景:GitHub.dev 與 OAuth 權杖
要理解這個攻擊,首先要知道 GitHub.dev 是如何運作的。當你在瀏覽器啟動這個 Web 版編輯器時,GitHub.com 會透過 OAuth 權杖(OAuth Token,一種代表使用者身分與權限的數位通行證)將你的身分資訊傳遞給 github.dev。
這個權杖的作用是讓 Web 版編輯器能代表你與 GitHub API 進行互動,例如讀取程式碼或提交 Pull Request。問題在於,這個權杖的權限範圍(Scope)過大,它並非僅限於你目前開啟的那一個儲存庫,而是擁有你帳號下所有可存取儲存庫的讀寫權限。這意味著一旦權杖被竊取,攻擊者就能控制你所有的私有專案。
攻擊路徑:從 Webview 到指令面板
這次攻擊的關鍵在於 VS Code 的 Webview 機制。Webview 是 VS Code 用來渲染 Markdown 預覽或 Jupyter Notebook 等非純文字內容的元件。由於 Webview 執行的是 JavaScript,如果攻擊者能誘導使用者開啟一個包含惡意程式碼的 Webview,就能發動攻擊。
具體的攻擊流程如下。首先,攻擊者會利用 Webview 與 VS Code 主視窗之間的訊息傳遞機制,在背景模擬使用者的鍵盤輸入事件(keydown events)。攻擊者會模擬按下 Ctrl+Shift+P,這會強制開啟 VS Code 的指令面板(Command Palette)。
接著,攻擊者利用了 VS Code 的一個特性:本地工作區擴充功能(Local Workspace Extensions)。如果一個擴充功能被放置在專案路徑下的 .vscode/extensions 資料夾中,VS Code 會允許它直接安裝,而不會跳出發行者信任對話框。
透過模擬鍵盤指令,攻擊者可以繞過信任檢查,直接安裝一個惡意擴充功能。一旦該擴充功能被安裝,它就能直接從環境中提取 GitHub OAuth 權杖,並透過 API 掃描並竊取受害者所有私有儲存庫的資料。
實務上的影響與限制
這次漏洞最危險的地方在於它只需要使用者點擊一次連結(One-Click)即可觸發,且整個過程在背景完成,使用者幾乎沒有察覺的機會。
不過,這裡有一個重要的區分:此漏洞僅影響運行在瀏覽器中的 GitHub.dev 版本,並不影響安裝在電腦上的 VS Code 桌面版(VS Code Desktop)。這是因為桌面版與 Web 版在處理權杖傳遞與沙箱隔離的機制有所不同。
給開發者的安全建議
面對這類攻擊,最重要的是提高對第三方專案的警覺心。雖然 GitHub.dev 很方便,但在開啟不信任的儲存庫或點擊不明連結進入編輯環境時應保持謹慎。同時,應密切關注 Microsoft 與 GitHub 發布的更新補丁,確保使用的 Web 環境已修復此漏洞。
來源:thehackernews.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。