REPORT
4 月 19 日,Vercel 發(fā)了一份 1 分鐘讀完的安全公告。地址:vercel.com/kb/bulletin/vercel-april-2026-security-incident
措辭克制,沒(méi)有時(shí)間線,沒(méi)有點(diǎn)名攻擊者
但同一天凌晨 2:02,BreachForums 上有人開(kāi)始叫賣 Vercel 數(shù)據(jù)。這是一個(gè)數(shù)據(jù)黑市論壇,自稱 ShinyHunters 的賣家聲稱手里有 Vercel 的訪問(wèn)密鑰、源代碼和數(shù)據(jù)庫(kù),標(biāo)價(jià) 200 萬(wàn)美元
![]()
Vercel 官方安全公告,4 月 20 日已經(jīng)更新過(guò)
影響速覽
憑證Vercel 已經(jīng)直接聯(lián)系了受波及客戶。按 Vercel 說(shuō)法,沒(méi)收到聯(lián)系的客戶,憑證和個(gè)人數(shù)據(jù)沒(méi)有理由被認(rèn)為已泄露
環(huán)境變量打 sensitive 標(biāo)簽的加密保護(hù),目前沒(méi)有證據(jù)被讀取。非 sensitive 的需要立刻輪換
Next.js / Turbopack經(jīng)供應(yīng)鏈審計(jì)后確認(rèn)安全,開(kāi)源項(xiàng)目沒(méi)有 npm 投毒
Workspace 接了 Context.ai立刻審計(jì) OAuth grant 并撤銷重新授權(quán)
![]()
從一個(gè)員工在用的第三方 AI 工具開(kāi)始的攻擊鏈
事件發(fā)生時(shí),Vercel 正在 IPO 前夕。它是 Next.js 的母公司,全球前端部署市場(chǎng)約 22% 的份額,Next.js 僅 npm 周下載就 600 萬(wàn)次
Vercel 被攻破的入口,是一個(gè)員工日常用的第三方 AI 工具
一份惜字如金的公告
公告原文不到 200 個(gè)英文單詞
We've identified a security incident that involved unauthorized access to certain internal Vercel systems.
我們發(fā)現(xiàn)了一起涉及未授權(quán)訪問(wèn) Vercel 內(nèi)部某些系統(tǒng)的安全事件
At this time, we have identified a limited subset of customers that were impacted and are engaging with them directly.
目前,我們已經(jīng)識(shí)別出一小部分受影響的客戶,正在直接與他們溝通
整篇 bulletin 一分鐘讀完。沒(méi)有點(diǎn)名攻擊者,沒(méi)有披露范圍,沒(méi)有時(shí)間線。后面掛了一行 IoC:
INDICATOR OF COMPROMISE
110671459871-30f1spbu0hptbs60cb4vsmv79i7bbvqj.apps.googleusercontent.com
這是 Google Workspace 上某個(gè) OAuth client 的 ID。Vercel 建議所有 Workspace 管理員,立刻自查這個(gè) app 有沒(méi)有出現(xiàn)在自家組織里
公告最后給了一個(gè)上下文:
the incident originated from a small, third-party AI tool whose Google Workspace OAuth app was the subject of a broader compromise, potentially affecting its hundreds of users across many organizations.
事件源頭是一個(gè)小型第三方 AI 工具,它的 Google Workspace OAuth app 在更大范圍內(nèi)被攻破,可能影響了它在多個(gè)組織里的數(shù)百用戶
按 Vercel 的說(shuō)法,這個(gè)第三方 AI 工具的 OAuth app 在更大范圍被攻破。Vercel 只是這數(shù)百用戶里的一個(gè)
攻擊者怎么進(jìn)的內(nèi)網(wǎng)
CEO Guillermo Rauch 在 4 月 20 日凌晨 4:08 UTC,在 X 上做了詳細(xì)復(fù)盤。這是把鏈路真正講清楚的第一手材料
事件源頭是一個(gè)叫 Context.ai 的企業(yè) AI 平臺(tái),被攻破了。Context.ai 給企業(yè)搭專用 Agent,Agent 訓(xùn)練在公司自己的知識(shí)、流程和規(guī)范上
Vercel 的一名員工正在用 Context.ai。他授權(quán)給 Context.ai 的 OAuth scope,達(dá)到了 deployment 級(jí)別的 Google Workspace 權(quán)限。Context.ai 自己被攻破后,攻擊者順著這個(gè) OAuth 拉鏈,拿下了員工的公司 Google Workspace 賬號(hào)
接下來(lái)是橫向移動(dòng)。攻擊者通過(guò)這個(gè)員工賬號(hào)進(jìn) Vercel 內(nèi)部環(huán)境,然后開(kāi)始枚舉環(huán)境變量
Vercel 提供兩種環(huán)境變量:sensitive 和非 sensitive。打了 sensitive 標(biāo)簽的,是加密靜態(tài)存儲(chǔ)的,攻擊者讀不到。但非 sensitive 那些沒(méi)加密,可以被讀到
攻擊者通過(guò)枚舉非 sensitive 環(huán)境變量,進(jìn)一步拿到了更多權(quán)限
Rauch 的原話:
Vercel stores all customer environment variables fully encrypted at rest. We have numerous defense-in-depth mechanisms to protect core systems and customer data. We do have a capability, however, to designate environment variables as 'non-sensitive'. Unfortunately, the attacker got further access through their enumeration.
Vercel 所有客戶環(huán)境變量在靜態(tài)存儲(chǔ)時(shí)都是完全加密的,我們有多重縱深防御機(jī)制保護(hù)核心系統(tǒng)和客戶數(shù)據(jù)。但我們確實(shí)提供一個(gè)把環(huán)境變量標(biāo)記為非敏感的能力。不幸的是,攻擊者通過(guò)枚舉這些變量,拿到了進(jìn)一步的訪問(wèn)權(quán)限
Vercel 自己設(shè)計(jì)的安全機(jī)制(sensitive 加密)攔下了關(guān)鍵憑證。但同一個(gè)產(chǎn)品的另一個(gè)能力(非 sensitive 不加密),反過(guò)來(lái)給攻擊者送了梯子
200 萬(wàn)美元的賣單
公告發(fā)出之前幾個(gè)小時(shí),BreachForums 上已經(jīng)有人掛賣了
![]()
賣單 4 月 19 日凌晨 2:02 上線,標(biāo)題是 Vercel Database Access Key & Source Code
發(fā)帖賬號(hào)叫 ShinyHunters,論壇認(rèn)證管理員,1905 信譽(yù)分,2023 年 5 月加入,發(fā)了 42 個(gè)主題。配了一張證明截圖,是 Vercel 內(nèi)部 user 表的 schema:
id, name, displayName, email, active, admin, guest, timezone, createdAt, updatedAt, lastSeen
這看起來(lái)像 IDP 的導(dǎo)出,不是客戶數(shù)據(jù)庫(kù)
明面要價(jià) 200 萬(wàn)美元
賣家還在私信里說(shuō),用 BTC 付款的話,50 萬(wàn)美元 就能成交
帖子里有這么一句話:
You send one update with a payload, and it will hit every developer on the planet who runs an installation or updates a package.
你發(fā)一個(gè)帶 payload 的更新,全世界每個(gè)安裝或升級(jí)這個(gè)包的開(kāi)發(fā)者都會(huì)中招
這是 XZ Utils 2024 那個(gè)劇本的精確描述
X 用戶 @DiffeKey 把賣家和「VercelCloud」賬號(hào)的 DM 截圖放出來(lái)了
![]()
VercelCloud 讓對(duì)方別再騷擾員工,ShinyHunters 回 200 萬(wàn)美元,BTC 付款 50 萬(wàn)也接受
按網(wǎng)絡(luò)安全媒體 BleepingComputer 的核實(shí),最近幾起聲稱是 ShinyHunters 干的攻擊,原 ShinyHunters 團(tuán)伙否認(rèn)參與。這個(gè)名字現(xiàn)在被多方借用,歸因要打折扣
Dev.to 上有人提到,賣家放出來(lái)的樣本里有 580 條 Vercel 員工記錄,含名字、郵箱、賬號(hào)狀態(tài)、活動(dòng)時(shí)間戳
已確認(rèn)的 vs 還在 claim 的
把 Rauch 的復(fù)盤和賣家的 claim 排在一起,差距很明顯:
![]()
左邊是 Vercel 公告 + Rauch 復(fù)盤里坐實(shí)的事,右邊是 BreachForums 賣單上的 claim
Rauch 明確說(shuō),Next.js、Turbopack 和 Vercel 維護(hù)的所有開(kāi)源項(xiàng)目,經(jīng)過(guò)供應(yīng)鏈審計(jì)后是安全的
Vercel 周下載 600 萬(wàn)次的 Next.js 沒(méi)事。這一句直接駁了賣家「全球供應(yīng)鏈攻擊」的賣點(diǎn)
社區(qū)里另一位開(kāi)發(fā)者 Theo Browne 在 X 上指出,從他能觀察到的范圍看,受沖擊最重的是 Vercel 的 Linear 和 GitHub 集成。打了 sensitive 標(biāo)簽的環(huán)境變量,看起來(lái)明顯比普通環(huán)境變量保護(hù)得好
攻擊者「被 AI 顯著加速」
Rauch 在 X 上對(duì)這個(gè)攻擊團(tuán)隊(duì)的形容:
一個(gè)高度復(fù)雜、且我強(qiáng)烈懷疑被 AI 顯著加速的攻擊團(tuán)隊(duì),以驚人的速度推進(jìn),對(duì) Vercel 內(nèi)部有深度理解
這是來(lái)自 CEO 視角的、第一手的判斷。攻擊者的技術(shù)底色和 AI 助力之間,至少是高度相關(guān)的
獨(dú)立研究員 Jaime Blasco(@jaimeblascob)在 Rauch 表態(tài)前幾個(gè)小時(shí)就把 Context.ai 鎖出來(lái)了。方法是把 Vercel 公告里掛出的 OAuth client ID,跟一個(gè)已被下架的 Chrome 擴(kuò)展所使用的 OAuth grant,反查到同一個(gè) Google account ID
Vercel 同時(shí)披露,正在和 Mandiant(Google 旗下的頂級(jí)事件響應(yīng)公司)聯(lián)合調(diào)查,以及其他網(wǎng)絡(luò)安全公司、行業(yè)同行、執(zhí)法部門。Context.ai 也被直接聯(lián)系,配合排查整個(gè)攻破事件的范圍
IPO 前夕
事件發(fā)生的時(shí)間點(diǎn)很微妙
幾天前剛有報(bào)道,Vercel 正準(zhǔn)備 IPO,背景是過(guò)去一年 240% 的收入增長(zhǎng),主要來(lái)自企業(yè)級(jí) AI 部署工作流的需求。IPO 前的 quiet period,企業(yè)跟投資者和公眾的溝通方式受法律嚴(yán)格限制
按行業(yè)第三方估算,Vercel 在現(xiàn)代前端部署市場(chǎng)占有約 22% 的份額
公告發(fā)出之后,Hacker News 上的討論 2 小時(shí)積累了 203 個(gè)贊、78 條評(píng)論。社區(qū)主要在抱怨溝通方式,事件本身倒沒(méi)引發(fā)集體抱怨
有人評(píng)論:
I've been part of a response team on a security incident and I really feel for them. However, this initial communication is terrible.
我在事件響應(yīng)隊(duì)里待過(guò),能體會(huì)他們的處境。但這次的初版溝通真的很差
另一條更刺:
Why am I reading about this here and not via an email? I've been a paying customer for over a year now.
為什么我得在這看到這件事,而不是收到郵件?我付費(fèi)用戶都一年多了
現(xiàn)在該做什么
如果你是 Vercel 客戶:
自查 Workspace看里面有沒(méi)有那個(gè) OAuth client ID 的 app
輪換環(huán)境變量把所有非 sensitive 的環(huán)境變量輪換一遍
打 sensitive 標(biāo)以后所有敏感憑證都打 sensitive 標(biāo)簽
鎖版本把 next、turbo、@vercel/* 鎖到已知安全的版本
查 CI檢查 npm install 有沒(méi)有異常
npm token給 npm org token 打開(kāi) 2FA 和 publish-provenance
如果你接了第三方 AI 工具到 Workspace:
審計(jì) token審計(jì)過(guò)去 30 天 OAuth-app-issued 的 token
撤銷重授權(quán)撤銷并重新授權(quán)所有 AI 工具的 Workspace OAuth grant
收窄 scope重新審視當(dāng)時(shí)給出的 OAuth scope,是不是真的需要那么寬
Vercel 在公告里掛出的 IoC:
INDICATOR OF COMPROMISE
110671459871-30f1spbu0hptbs60cb4vsmv79i7bbvqj.apps.googleusercontent.com
一個(gè)觀察
Context.ai 的安全系統(tǒng)并沒(méi)有被繞過(guò),而是在被合理授權(quán)后、自己被攻破的
OAuth scope 給得越寬,被攻破的代價(jià)就越高。員工授權(quán)一個(gè) AI 工具時(shí)點(diǎn)的那個(gè)「授權(quán)全部 Workspace 權(quán)限」按鈕,等于把企業(yè)內(nèi)部的橫向移動(dòng)通道,免費(fèi)送給了任何一個(gè)能攻破這個(gè) AI 工具的攻擊者
下次有 AI Agent 讓你點(diǎn) OAuth 授權(quán)之前,可以先問(wèn)一句:這個(gè) scope,真的需要這么寬嗎
參考材料
→ Vercel 官方公告:vercel.com/kb/bulletin/vercel-april-2026-security-incident
→ CEO Guillermo Rauch 在 X 的復(fù)盤:x.com/rauchg/status/2045995362499076169
→ Jaime Blasco 的獨(dú)立溯源:x.com/jaimeblascob/status/2045960143209152981
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
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.