开发 Next.js 的 Vercel 被黑,数据被叫卖
REPORT
4 月 19 日,Vercel 发了一份 1 分钟读完的安全公告。地址:vercel.com/kb/bulletin/vercel-april-2026-security-incident
措辞克制,没有时间线,没有点名攻击者
但同一天凌晨 2:02,BreachForums 上有人开始叫卖 Vercel 数据。这是一个数据黑市论坛,自称 ShinyHunters 的卖家声称手里有 Vercel 的访问密钥、源代码和数据库,标价 200 万美元

Vercel 官方安全公告,4 月 20 日已经更新过
影响速览
凭证Vercel 已经直接联系了受波及客户。按 Vercel 说法,没收到联系的客户,凭证和个人数据没有理由被认为已泄露
环境变量打 sensitive 标签的加密保护,目前没有证据被读取。非 sensitive 的需要立刻轮换
Next.js / Turbopack经供应链审计后确认安全,开源项目没有 npm 投毒
Workspace 接了立刻审计 OAuth grant 并撤销重新授权

从一个员工在用的第三方 AI 工具开始的攻击链
事件发生时,Vercel 正在 IPO 前夕。它是 Next.js 的母公司,全球前端部署市场约 22% 的份额,Next.js 仅 npm 周下载就 600 万次
Vercel 被攻破的入口,是一个员工日常用的第三方 AI 工具
一份惜字如金的公告
公告原文不到 200 个英文单词
We've identified a security incident that involved unauthorized access to certain internal Vercel systems.
我们发现了一起涉及未授权访问 Vercel 内部某些系统的安全事件
At this time, we have identified a limited subset of customers that were impacted and are engaging with them directly.
目前,我们已经识别出一小部分受影响的客户,正在直接与他们沟通
整篇 bulletin 一分钟读完。没有点名攻击者,没有披露范围,没有时间线。后面挂了一行 IoC:
INDICATOR OF COMPROMISE
110671459871-30f1spbu0hptbs60cb4vsmv79i7bbvqj.apps.googleusercontent.com
这是 Google Workspace 上某个 OAuth client 的 ID。Vercel 建议所有 Workspace 管理员,立刻自查这个 app 有没有出现在自家组织里
公告最后给了一个上下文:
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.
事件源头是一个小型第三方 AI 工具,它的 Google Workspace OAuth app 在更大范围内被攻破,可能影响了它在多个组织里的数百用户
按 Vercel 的说法,这个第三方 AI 工具的 OAuth app 在更大范围被攻破。Vercel 只是这数百用户里的一个
攻击者怎么进的内网
CEO Guillermo Rauch 在 4 月 20 日凌晨 4:08 UTC,在 X 上做了详细复盘。这是把链路真正讲清楚的第一手材料
事件源头是一个叫 Context.ai 的企业 AI 平台,被攻破了。Context.ai 给企业搭专用 Agent,Agent 训练在公司自己的知识、流程和规范上
Vercel 的一名员工正在用。他授权给 的 OAuth scope,达到了 deployment 级别的 Google Workspace 权限。Context.ai 自己被攻破后,攻击者顺着这个 OAuth 拉链,拿下了员工的公司 Google Workspace 账号
接下来是横向移动。攻击者通过这个员工账号进 Vercel 内部环境,然后开始枚举环境变量
Vercel 提供两种环境变量:sensitive 和非 sensitive。打了 sensitive 标签的,是加密静态存储的,攻击者读不到。但非 sensitive 那些没加密,可以被读到
攻击者通过枚举非 sensitive 环境变量,进一步拿到了更多权限
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 所有客户环境变量在静态存储时都是完全加密的,我们有多重纵深防御机制保护核心系统和客户数据。但我们确实提供一个把环境变量标记为非敏感的能力。不幸的是,攻击者通过枚举这些变量,拿到了进一步的访问权限
Vercel 自己设计的安全机制(sensitive 加密)拦下了关键凭证。但同一个产品的另一个能力(非 sensitive 不加密),反过来给攻击者送了梯子
200 万美元的卖单
公告发出之前几个小时,BreachForums 上已经有人挂卖了

卖单 4 月 19 日凌晨 2:02 上线,标题是 Vercel Database Access Key & Source Code
发帖账号叫 ShinyHunters,论坛认证管理员,1905 信誉分,2023 年 5 月加入,发了 42 个主题。配了一张证明截图,是 Vercel 内部 user 表的 schema:
id, name, displayName, email, active, admin, guest, timezone, createdAt, updatedAt, lastSeen
这看起来像 IDP 的导出,不是客户数据库
明面要价 200 万美元
卖家还在私信里说,用 BTC 付款的话,50 万美元 就能成交
帖子里有这么一句话:
You send one update with a payload, and it will hit every developer on the planet who runs an installation or updates a package.
你发一个带 payload 的更新,全世界每个安装或升级这个包的开发者都会中招
这是 XZ Utils 2024 那个剧本的精确描述
X 用户 @DiffeKey 把卖家和「VercelCloud」账号的 DM 截图放出来了

VercelCloud 让对方别再骚扰员工,ShinyHunters 回 200 万美元,BTC 付款 50 万也接受
按网络安全媒体 BleepingComputer 的核实,最近几起声称是 ShinyHunters 干的攻击,原 ShinyHunters 团伙否认参与。这个名字现在被多方借用,归因要打折扣
Dev.to 上有人提到,卖家放出来的样本里有 580 条 Vercel 员工记录,含名字、邮箱、账号状态、活动时间戳
已确认的 vs 还在 claim 的
把 Rauch 的复盘和卖家的 claim 排在一起,差距很明显:

左边是 Vercel 公告 + Rauch 复盘里坐实的事,右边是 BreachForums 卖单上的 claim
Rauch 明确说,Next.js、Turbopack 和 Vercel 维护的所有开源项目,经过供应链审计后是安全的
Vercel 周下载 600 万次的 Next.js 没事。这一句直接驳了卖家「全球供应链攻击」的卖点
社区里另一位开发者 Theo Browne 在 X 上指出,从他能观察到的范围看,受冲击最重的是 Vercel 的 Linear 和 GitHub 集成。打了 sensitive 标签的环境变量,看起来明显比普通环境变量保护得好
攻击者「被 AI 显著加速」
Rauch 在 X 上对这个攻击团队的形容:
一个高度复杂、且我强烈怀疑被 AI 显著加速的攻击团队,以惊人的速度推进,对 Vercel 内部有深度理解
这是来自 CEO 视角的、第一手的判断。攻击者的技术底色和 AI 助力之间,至少是高度相关的
独立研究员 Jaime Blasco(@jaimeblascob)在 Rauch 表态前几个小时就把 锁出来了。方法是把 Vercel 公告里挂出的 OAuth client ID,跟一个已被下架的 Chrome 扩展所使用的 OAuth grant,反查到同一个 Google account ID
Vercel 同时披露,正在和 Mandiant(Google 旗下的顶级事件响应公司)联合调查,以及其他网络安全公司、行业同行、执法部门。Context.ai 也被直接联系,配合排查整个攻破事件的范围
IPO 前夕
事件发生的时间点很微妙
几天前刚有报道,Vercel 正准备 IPO,背景是过去一年 240% 的收入增长,主要来自企业级 AI 部署工作流的需求。IPO 前的 quiet period,企业跟投资者和公众的沟通方式受法律严格限制
按行业第三方估算,Vercel 在现代前端部署市场占有约 22% 的份额
公告发出之后,Hacker News 上的讨论 2 小时积累了 203 个赞、78 条评论。社区主要在抱怨沟通方式,事件本身倒没引发集体抱怨
有人评论:
I've been part of a response team on a security incident and I really feel for them. However, this initial communication is terrible.
我在事件响应队里待过,能体会他们的处境。但这次的初版沟通真的很差
另一条更刺:
Why am I reading about this here and not via an email? I've been a paying customer for over a year now.
为什么我得在这看到这件事,而不是收到邮件?我付费用户都一年多了
现在该做什么
如果你是 Vercel 客户:
自查 Workspace看里面有没有那个 OAuth client ID 的 app
轮换环境变量把所有非 sensitive 的环境变量轮换一遍
打 sensitive 标以后所有敏感凭证都打 sensitive 标签
锁版本把 next、turbo、@vercel/* 锁到已知安全的版本
查 CI检查 npm install 有没有异常
npm token给 npm org token 打开 2FA 和 publish-provenance
如果你接了第三方 AI 工具到 Workspace:
审计 token审计过去 30 天 OAuth-app-issued 的 token
撤销重授权撤销并重新授权所有 AI 工具的 Workspace OAuth grant
收窄 scope重新审视当时给出的 OAuth scope,是不是真的需要那么宽
Vercel 在公告里挂出的 IoC:
INDICATOR OF COMPROMISE
110671459871-30f1spbu0hptbs60cb4vsmv79i7bbvqj.apps.googleusercontent.com
一个观察
Context.ai 的安全系统并没有被绕过,而是在被合理授权后、自己被攻破的
OAuth scope 给得越宽,被攻破的代价就越高。员工授权一个 AI 工具时点的那个「授权全部 Workspace 权限」按钮,等于把企业内部的横向移动通道,免费送给了任何一个能攻破这个 AI 工具的攻击者
下次有 AI Agent 让你点 OAuth 授权之前,可以先问一句:这个 scope,真的需要这么宽吗
参考材料
→
Vercel 官方公告:vercel.com/kb/bulletin/vercel-april-2026-security-incident
→
CEO Guillermo Rauch 在 X 的复盘:x.com/rauchg/status/2045995362499076169
→
Jaime Blasco 的独立溯源:x.com/jaimeblascob/status/2045960143209152981
