安全研究員Ammar Askar近日披露了一個令人警醒的VSCode安全漏洞:攻擊者只需要一個操作:讓用戶點擊一條惡意鏈接——就能從VSCode的webview中竊取用戶的GitHub訪問令牌。這個漏洞的可怕之處在于它的攻擊路徑極其隱蔽,整個過程不需要用戶任何額外交互,看起來就像正常使用一個Jupyter notebook。
![]()
這個漏洞的核心在于VSCode的webview機制與Jupyter notebook的深度集成。VSCode為了支持notebook功能,允許在webview中渲染任意HTML內容,并通過postMessage接口與外部通信。問題出在webview的鍵盤事件處理上:VSCode webview會轉發某些鍵盤組合鍵到編輯器核心,其中就包括Ctrl+Shift+P——這個快捷鍵的作用是調出VSCode的命令面板。
攻擊的精確步驟是這樣的:首先,攻擊者創建一個包含惡意JavaScript的Jupyter notebook,當用戶在VSCode中打開這個notebook時,惡意腳本就開始運行。這個腳本通過監聽webview的keydown事件,精確地檢測用戶何時按下Ctrl+Shift+P。一旦檢測到,腳本就會模擬發送命令面板的打開指令,然后通過postMessage接口向VSCode發送一條精心構造的消息,指示VSCode安裝一個來自攻擊者控制的擴展。
![]()
這個擴展安裝過程之所以能夠實現,是因為VSCode在用戶首次安裝擴展時會彈出一個確認對話框,但攻擊者找到了繞過方法——利用VSCode的"信任發布者"機制。如果用戶之前曾經信任過某個發布者的擴展,VSCode會記住這個選擇并自動放行來自同一發布者的擴展安裝。攻擊者正是利用了這個信任傳遞邏輯,讓惡意擴展悄無聲息地通過安裝驗證。
擴展安裝成功后,攻擊者就獲得了對用戶GitHub令牌的完全訪問權限。這個令牌是從VSCode的GitHub集成中提取的,具有讀寫用戶所有私有倉庫的權限。這意味著攻擊者可以讀取源代碼、植入后門、甚至以受害者身份推送惡意提交。
![]()
從技術層面看,這個漏洞揭示了現代IDE安全架構中的一個根本性矛盾:為了提供豐富的擴展性和功能集成,IDE必須在安全邊界上做出妥協。VSCode的webview原本設計用來隔離不受信任的網頁內容,但Jupyter notebook的集成需求迫使其放寬了這層隔離。這種"功能優先"的安全權衡,在其他開發工具中也普遍存在。
目前VSCode已發布了安全更新修復此問題,但這個漏洞的存在時間長度和影響范圍仍然令人擔憂。對于開發者而言,主動更新VSCode、避免打開來源不明的notebook文件、以及定期審查已安裝擴展的發布者信任狀態,是降低風險的關鍵做法。
參考來源
https://blog.ammaraskar.com/github-token-stealing/
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.