惡意擴(kuò)展可濫用 VS Code 漏洞竊取認(rèn)證令牌
微軟的 Visual Studio Code (VS Code) 代碼編輯器存在一個(gè)漏洞,允許惡意擴(kuò)展程序檢索 Windows、Linux 和 macOS 中存儲(chǔ)的身份驗(yàn)證令牌。
這些令牌用于集成各種第三方服務(wù)和 API,如 Git、GitHub 和其他編碼平臺(tái),因此竊取這些令牌可能會(huì)對(duì)數(shù)據(jù)安全造成重大影響,導(dǎo)致未經(jīng)授權(quán)的系統(tǒng)訪問、數(shù)據(jù)泄露等。
Cycode 研究人員發(fā)現(xiàn)了這個(gè)漏洞,并將其連同他們開發(fā)的概念驗(yàn)證(PoC)報(bào)告給了微軟。然而,微軟并沒有修復(fù)它的打算,因?yàn)閿U(kuò)展程序不應(yīng)該與其他環(huán)境隔絕。
利用擴(kuò)展竊取機(jī)密
Cycode 發(fā)現(xiàn)的安全問題是由于 VS Code 的 "秘密存儲(chǔ)"(Secret Storage)缺乏對(duì)身份驗(yàn)證令牌的隔離造成的,該 API 允許擴(kuò)展在操作系統(tǒng)中存儲(chǔ)身份驗(yàn)證令牌。這需要使用 Keytar,即 VS Code 與 Windows 憑據(jù)管理器(Windows)、鑰匙串(macOS)或鑰匙圈(Linux)通信的封裝程序。
這意味著在 VS Code 中運(yùn)行的任何擴(kuò)展,甚至是惡意擴(kuò)展,都可以訪問秘密存儲(chǔ)器,并濫用 Keytar 來檢索任何存儲(chǔ)的令牌。
發(fā)現(xiàn)這個(gè)問題后,Cycode 的研究人員開始嘗試創(chuàng)建一個(gè)惡意擴(kuò)展來竊取 CircleCI 的令牌,CircleCI 是一個(gè)使用 VS Code 擴(kuò)展的流行編碼平臺(tái)。他們通過修改 CircleCI 的擴(kuò)展來運(yùn)行一條命令,從而暴露其安全令牌,甚至直接將其發(fā)送到研究人員的服務(wù)器上。
漸漸地,他們開發(fā)出了一種用途更廣的攻擊方法,可以在不篡改目標(biāo)擴(kuò)展代碼的情況下提取這些機(jī)密。
此過程的關(guān)鍵是發(fā)現(xiàn)任何 VS Code 擴(kuò)展都有權(quán)訪問鑰匙串,因?yàn)樗窃诓僮飨到y(tǒng)已經(jīng)授權(quán)訪問鑰匙串的應(yīng)用程序內(nèi)運(yùn)行的。
"我們開發(fā)了一個(gè)概念驗(yàn)證惡意擴(kuò)展,它不僅能從其他擴(kuò)展中成功獲取令牌,還能從 VS Code 的內(nèi)置登錄和同步功能中獲取 GitHub 和微軟賬戶的令牌,從而實(shí)現(xiàn)了 "令牌竊取 "攻擊"。- Cycode.
Cycode 發(fā)現(xiàn),用于加密令牌的算法是 AES-256-GCM,這通常是安全的。然而,用于加密令牌的密鑰是根據(jù)當(dāng)前可執(zhí)行路徑和機(jī)器 ID 導(dǎo)出的,因此很容易重新創(chuàng)建密鑰。
檢索到的令牌通過在 VS Code 的 Electron 可執(zhí)行文件中運(yùn)行的自定義 JS 腳本進(jìn)行解密,解密并打印本地安裝的擴(kuò)展的所有密碼。
微軟并未修復(fù)
Cycode 的分析師兩個(gè)月前向微軟披露了這個(gè)漏洞,甚至演示了他們的 PoC 擴(kuò)展及其竊取存儲(chǔ)擴(kuò)展令牌的能力。
然而,微軟的工程師們并沒有將此視為安全問題,并決定維持 VS Code 秘密存儲(chǔ)管理框架的現(xiàn)有設(shè)計(jì)。
參考鏈接:https://www.bleepingcomputer.com/news/security/malicious-extensions-can-abuse-vs-code-flaw-to-steal-auth-tokens/