天塌了!Cursor和Windsurf用戶零日漏洞曝光,一鍵劫持,數(shù)百萬(wàn)開(kāi)發(fā)者開(kāi)源插件噩夢(mèng),網(wǎng)友:零信任太重要了 原創(chuàng)
編譯 | 沈建苗
審校 | 云昭
?出品 | 51CTO技術(shù)棧(微信號(hào):blog51cto)
近日,一位來(lái)自 Koi Security 的安全研究員,偶然發(fā)現(xiàn)了一個(gè)深藏于當(dāng)今 AI 編程工具基礎(chǔ)架構(gòu)中的嚴(yán)重零日漏洞。如果該漏洞被利用,一個(gè)技術(shù)水平不高的攻擊者就可能“一鍵”劫持超過(guò)一千萬(wàn)臺(tái)設(shè)備。
Cursor 和 Windsurf 等 AI 編程助手日益流行,向全球開(kāi)發(fā)者承諾“生產(chǎn)力加速”。但在它們精美界面背后,有一個(gè)共同的基礎(chǔ)設(shè)施:由社區(qū)構(gòu)建的 VS Code 分支版本,以及一個(gè)開(kāi)放的插件市場(chǎng)。這套系統(tǒng)成就了功能的“魔法”,卻也留下了一個(gè)致命盲點(diǎn)。
這個(gè)漏洞被命名為 VSXPloit:只因 OpenVSX(一條開(kāi)發(fā)者供應(yīng)鏈中的關(guān)鍵組件)中一個(gè)被忽視的缺陷,任何運(yùn)行 VS Code 分支版本的設(shè)備都可能在毫無(wú)察覺(jué)的情況下被完全控制。一處漏洞,系統(tǒng)淪陷。
背后真相:插件權(quán)限和“信任危機(jī)”
究竟怎么回事?
如今基于AI的編輯器嚴(yán)重依賴擴(kuò)展程序來(lái)實(shí)現(xiàn)最基本的功能。語(yǔ)法高亮、代碼檢查和調(diào)試等功能并非硬編碼到編輯器中,而是由擴(kuò)展程序來(lái)提供。
這些擴(kuò)展程序每個(gè)都以完全權(quán)限在開(kāi)發(fā)者的機(jī)器上運(yùn)行。這意味著,只要有一個(gè)擴(kuò)展程序被攻陷,就可能導(dǎo)致安裝它的任何人全面控制機(jī)器。
圖片
Oren Yomtov是Koi Security這家提供軟件配置和擴(kuò)展程序安全平臺(tái)的公司的安全研究員,他無(wú)意中發(fā)現(xiàn)了這噩夢(mèng)般的場(chǎng)景。
Koi Security 的安全研究員 Oren Yomtov 在研究 OpenVSX 的構(gòu)建流程時(shí),發(fā)現(xiàn)了這處致命缺陷。
在一篇博文中,Yomtov解釋道,OpenVSX 是一個(gè)開(kāi)源插件市場(chǎng),支撐著 Cursor、Windsurf、VSCodium 等編輯器的插件生態(tài)。
該漏洞不僅允許攻擊者接管單個(gè)擴(kuò)展程序,更可能引發(fā)一場(chǎng) 供應(yīng)鏈災(zāi)難:掌控整個(gè)市場(chǎng)。通過(guò)該漏洞,攻擊者可冒用受信任的 ??@open-vsx?
? 賬戶推送惡意更新。
一開(kāi)始,Yomtov 以為是誤報(bào)——畢竟這段代碼已經(jīng)運(yùn)行多年,被數(shù)千萬(wàn)用戶使用。但他在實(shí)驗(yàn)室中成功復(fù)現(xiàn)了整個(gè)攻擊流程:模擬攻擊完美執(zhí)行,這場(chǎng)“不可想象”的安全事故就這樣被證實(shí)。
看似不可想象的突然變成了現(xiàn)實(shí):一場(chǎng)悄無(wú)聲息的全面的安全災(zāi)難近在眼前。
漏洞:經(jīng)典“Pwn 請(qǐng)求”的變體
要了解該漏洞的工作原理,首先需要了解擴(kuò)展程序是如何進(jìn)入OpenVSX的。
如果你想將擴(kuò)展程序發(fā)布到OpenVSX,有兩個(gè)選擇:
1. 自行上傳到OpenVSX。
2. 通過(guò)創(chuàng)建合并請(qǐng)求,將該擴(kuò)展程序添加到extensions.json文件中的列表,請(qǐng)求擴(kuò)展程序自動(dòng)發(fā)布。
圖片
Yomtov說(shuō):“問(wèn)題就出在夜間構(gòu)建上。”
OpenVSX 每晚都會(huì)運(yùn)行一個(gè)自動(dòng)化流程,獲取社區(qū)提交的擴(kuò)展程序的最新版本,構(gòu)建它們,然后發(fā)布到OpenVSX市場(chǎng)。本意是為了讓開(kāi)發(fā)者的工作更輕松,但在這里它卻引入了一個(gè)嚴(yán)重缺陷。
要自動(dòng)發(fā)布擴(kuò)展程序,開(kāi)發(fā)者只需提交一個(gè)簡(jiǎn)單的合并請(qǐng)求,將其添加到公開(kāi)列表中即可。此后,OpenVSX接手任務(wù):提取代碼、安裝依賴項(xiàng)、構(gòu)建擴(kuò)展程序,并使用屬于受信任的@open-vsx帳戶的強(qiáng)大秘密令牌來(lái)發(fā)布。
圖片
該令牌本應(yīng)保持隱藏狀態(tài),只有受信任的基礎(chǔ)架構(gòu)才能看到。然而,由于構(gòu)建過(guò)程會(huì)運(yùn)行來(lái)自公共代碼庫(kù)的任意代碼,任何擴(kuò)展程序的開(kāi)發(fā)者都可以編寫(xiě)惡意更新,悄無(wú)聲息地獲取令牌。
更令人擔(dān)憂的是,他們無(wú)需直接提交惡意擴(kuò)展程序。他們可以將代碼隱藏在依賴項(xiàng)中,甚至隱藏在依賴項(xiàng)的依賴項(xiàng)中,系統(tǒng)會(huì)在夜間構(gòu)建期間自動(dòng)執(zhí)行這些代碼。之后,竊取令牌就輕而易舉。
有了該令牌,攻擊者不僅可以控制自己的擴(kuò)展程序,還可以發(fā)布更新、覆蓋現(xiàn)有的擴(kuò)展程序,并悄無(wú)聲息地劫持整個(gè)市場(chǎng)。
影響規(guī)模:數(shù)百萬(wàn)開(kāi)發(fā)者的一場(chǎng)供應(yīng)鏈噩夢(mèng)
若能訪問(wèn)@open-vsx帳戶的令牌(密鑰),攻擊者就可以制造一場(chǎng)全球供應(yīng)鏈噩夢(mèng)。Yomtov解釋道:“該令牌是超級(jí)管理員憑證。它可以發(fā)布新的擴(kuò)展程序,覆蓋現(xiàn)有的擴(kuò)展程序,并冒充生態(tài)系統(tǒng)中的任何發(fā)布者。”
之后,破壞幾乎變得毫不費(fèi)力。每當(dāng)開(kāi)發(fā)者安裝擴(kuò)展程序,或者編輯器在后臺(tái)自動(dòng)更新擴(kuò)展(這種情況不斷發(fā)生),攻擊者的有效載荷就會(huì)悄無(wú)聲息地傳遞到他們的機(jī)器上。沒(méi)有警報(bào),沒(méi)有提示,毫無(wú)懷疑,全面接管。
那么,這個(gè)有效載荷能做什么呢?“幾乎無(wú)所不能,”Yomtov說(shuō)。VS Code及其分支中的擴(kuò)展程序以Node.js進(jìn)程的形式運(yùn)行,這意味著它們可以訪問(wèn)文件、啟動(dòng)其他程序、發(fā)出網(wǎng)絡(luò)請(qǐng)求并執(zhí)行任意代碼。
對(duì)流行擴(kuò)展程序(比如Python 插件)進(jìn)行惡意更新,可能會(huì)悄然安裝鍵盤(pán)記錄程序、竊取瀏覽器 cookie、竊取源代碼、感染構(gòu)建版本,或在整條開(kāi)發(fā)管道中植入后門(mén)。
這方面曾有零星的案例:VS Code擴(kuò)展程序竊取SSH密鑰或加密錢(qián)包。但這絕不是漏網(wǎng)之魚(yú),而是一場(chǎng)全面的接管,整個(gè)生態(tài)系統(tǒng)遭到供應(yīng)鏈攻擊。就像SolarWinds那樣,只不過(guò)針對(duì)的是開(kāi)發(fā)者工具。
雖然Cursor、Windsurf和VSCodium等桌面編輯器受到的影響最為嚴(yán)重,但就連Gitpod或StackBlitz等基于瀏覽器的環(huán)境也可能受到影響,這取決于受感染擴(kuò)展程序的集成程度。
零信任警醒:假設(shè)每個(gè)擴(kuò)展程序是不可信的
我們?cè)儐?wèn)Yomtov用戶和組織應(yīng)該從這起事件中吸取什么教訓(xùn)。他的回答很直接:“假設(shè)每個(gè)擴(kuò)展程序都是不可信的,除非證明是可信賴的。”
擴(kuò)展程序可能看起來(lái)像是無(wú)害的附加組件,但實(shí)際上,它們是功能強(qiáng)大的軟件組件,通常由個(gè)人編寫(xiě),以全面權(quán)限運(yùn)行,會(huì)在無(wú)人監(jiān)督的情況下自動(dòng)更新。
Yomtov說(shuō):“這與從npm或PyPI中拉取軟件包沒(méi)什么不同,通常甚至更糟糕。如果你不會(huì)盲目信任擁有root 權(quán)限訪問(wèn)你系統(tǒng)的GitHub 代碼庫(kù),也不會(huì)信任擴(kuò)展程序。”
為了保護(hù)我們自己,Yomtov建議組織將擴(kuò)展程序視為其攻擊面的一部分,運(yùn)用與針對(duì)任何其他依賴項(xiàng)相同的規(guī)程。這意味著:
1. 維護(hù)一份真實(shí)的清單,記錄已安裝的擴(kuò)展程序、安裝在哪些機(jī)器上以及由誰(shuí)安裝。
2. 根據(jù)擴(kuò)展程序的構(gòu)建者、維護(hù)方式以及實(shí)際功能來(lái)評(píng)估風(fēng)險(xiǎn)。
3. 對(duì)允許的擴(kuò)展程序執(zhí)行明確的策略,并在出現(xiàn)異常情況時(shí)采取行動(dòng)。
4. 持續(xù)監(jiān)控,因?yàn)閿U(kuò)展程序可能會(huì)悄無(wú)聲息地更新,并在一夜之間引入新的風(fēng)險(xiǎn)。
Koi的研究團(tuán)隊(duì)繼續(xù)發(fā)現(xiàn)易受攻擊的擴(kuò)展程序和主動(dòng)惡意的擴(kuò)展程序,不僅出現(xiàn)在 OpenVSX或微軟的市場(chǎng)中,甚至出現(xiàn)在其他擴(kuò)展程序市場(chǎng)(比如Chrome Web Store)中。
Yomtov說(shuō):“生態(tài)系統(tǒng)的發(fā)展速度比護(hù)欄更快。在這種情況改變之前,最安全的假設(shè)是零信任。除非你仔細(xì)審查并密切關(guān)注,否則每個(gè)擴(kuò)展程序都是潛在的后門(mén)。”
還好,漏洞已修復(fù)
Yomtov和Koi Security團(tuán)隊(duì)很負(fù)責(zé)任,向維護(hù)OpenVSX項(xiàng)目的Eclipse基金會(huì)披露了該漏洞。在隨后的幾周,他們與維護(hù)人員密切合作,驗(yàn)證該問(wèn)題,設(shè)計(jì)可靠的修復(fù)方案,并確保補(bǔ)丁得到正確實(shí)施和部署。
目前,得益于此次合作,該漏洞已被修復(fù),對(duì)于每天依賴該市場(chǎng)的數(shù)百萬(wàn)開(kāi)發(fā)者來(lái)說(shuō),已經(jīng)恢復(fù)安全,也是是一件幸事。
但這起事件也敲響了警鐘:零信任,即便是看起來(lái)可信賴的基礎(chǔ)架構(gòu)也需要持續(xù)審查,如果它掌握著整個(gè)開(kāi)發(fā)生態(tài)系統(tǒng)的密鑰,更應(yīng)如此。
參考鏈接:
本文轉(zhuǎn)載自??51CTO技術(shù)棧??,作者:沈建苗
