View Markdown
---
title: 开发 Next.js 的 Vercel 被黑,数据被叫卖
source_url: https://mp.weixin.qq.com/s?__biz=MzkzNDQxOTU2MQ==&mid=2247515778&idx=1&sn=7ea594245be39b32a5209801826028de&chksm=c3a4300160e8a229458cb140ebd51aa3e979bb15aafca810fd0b0bd1a5bb3ec31b874e9a7dbf&mpshare=1&scene=1&srcid=0420dAOYOB1zPA4H4rOHkqHy&sharer_shareinfo=0019b9e177fa6c74e0ecf33e87ada0fa&sharer_shareinfo_first=0019b9e177fa6c74e0ecf33e87ada0fa#rd
original_url: https://mp.weixin.qq.com/s?__biz=MzkzNDQxOTU2MQ==&mid=2247515778&idx=1&sn=7ea594245be39b32a5209801826028de&chksm=c3a4300160e8a229458cb140ebd51aa3e979bb15aafca810fd0b0bd1a5bb3ec31b874e9a7dbf&mpshare=1&scene=1&srcid=0420dAOYOB1zPA4H4rOHkqHy&sharer_shareinfo=0019b9e177fa6c74e0ecf33e87ada0fa&sharer_shareinfo_first=0019b9e177fa6c74e0ecf33e87ada0fa#rd
capture_status: success
capture_time: 2026-04-20T07:24:05.520046+00:00
snapshot_path: page.html
readable_path: readable.html
markdown_path: content.md
localized_assets:
- assets/4e5242f2fc9b7946be7b2f0350565a6ad553734e2e50dbac1a4bc4fe12a87997-0.jpg
- assets/bb6b28eff69c6dfa81b4edde69455892904f6d02450a1a8eb1180fef37ac2c3b-640.png
- assets/87ed2b1c344bce934662b5aa3314738e4f350b72c882f9a47beb243900c9ec62-640-7487e66f.png
- assets/1b70cf1746f3f081ab129627935d4a23730e9f318b01ea8b58903f06cd0b85c2-640.jpg
- assets/f945835c4d633d4f34a88b855ac42ebfff1c9458fbe75aeb8144d33fbda4c5de-640-9ff01b33.png
- assets/020a7f578e5c2bb77be645ad1d0942ae28e3f9954bb9ba19d5e4dbdf26470daf-640-86a2f32d.png
---

开发 Next.js 的 Vercel 被黑,数据被叫卖
============================
金色传说大聪明
金色传说大聪明
[赛博禅心](javascript:void(0);)
![]()
在小说阅读器读本章
去阅读
![]()
在小说阅读器中沉浸阅读
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 接了 Context.ai**立刻审计 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 的一名员工正在用 Context.ai。他授权给 Context.ai 的 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 表态前几个小时就把 Context.ai 锁出来了。方法是把 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`
预览时标签不可点
修改于
![]()
微信扫一扫
关注该公众号
继续滑动看下一个
View Archive Metadata
{
"capture_time": "2026-04-20T07:24:05.520046+00:00",
"localized_assets": [
"https://img.yinyanbo.eu.org/entries/43/assets/4e5242f2fc9b7946be7b2f0350565a6ad553734e2e50dbac1a4bc4fe12a87997-0.jpg",
"https://img.yinyanbo.eu.org/entries/43/assets/bb6b28eff69c6dfa81b4edde69455892904f6d02450a1a8eb1180fef37ac2c3b-640.png",
"https://img.yinyanbo.eu.org/entries/43/assets/87ed2b1c344bce934662b5aa3314738e4f350b72c882f9a47beb243900c9ec62-640-7487e66f.png",
"https://img.yinyanbo.eu.org/entries/43/assets/1b70cf1746f3f081ab129627935d4a23730e9f318b01ea8b58903f06cd0b85c2-640.jpg",
"https://img.yinyanbo.eu.org/entries/43/assets/f945835c4d633d4f34a88b855ac42ebfff1c9458fbe75aeb8144d33fbda4c5de-640-9ff01b33.png",
"https://img.yinyanbo.eu.org/entries/43/assets/020a7f578e5c2bb77be645ad1d0942ae28e3f9954bb9ba19d5e4dbdf26470daf-640-86a2f32d.png"
],
"markdown_path": "content.md",
"media": [
{
"asset_name": "4e5242f2fc9b7946be7b2f0350565a6ad553734e2e50dbac1a4bc4fe12a87997-0.jpg",
"local_path": "assets/4e5242f2fc9b7946be7b2f0350565a6ad553734e2e50dbac1a4bc4fe12a87997-0.jpg",
"mime_type": "image/jpeg",
"public_url": "https://img.yinyanbo.eu.org/entries/43/assets/4e5242f2fc9b7946be7b2f0350565a6ad553734e2e50dbac1a4bc4fe12a87997-0.jpg",
"replicas": {
"s3": "https://img.yinyanbo.eu.org/entries/43/assets/4e5242f2fc9b7946be7b2f0350565a6ad553734e2e50dbac1a4bc4fe12a87997-0.jpg"
},
"sha256": "4e5242f2fc9b7946be7b2f0350565a6ad553734e2e50dbac1a4bc4fe12a87997",
"size_bytes": 38971,
"storage_key": "entries/43/assets/4e5242f2fc9b7946be7b2f0350565a6ad553734e2e50dbac1a4bc4fe12a87997-0.jpg"
},
{
"asset_name": "bb6b28eff69c6dfa81b4edde69455892904f6d02450a1a8eb1180fef37ac2c3b-640.png",
"local_path": "assets/bb6b28eff69c6dfa81b4edde69455892904f6d02450a1a8eb1180fef37ac2c3b-640.png",
"mime_type": "image/png",
"public_url": "https://img.yinyanbo.eu.org/entries/43/assets/bb6b28eff69c6dfa81b4edde69455892904f6d02450a1a8eb1180fef37ac2c3b-640.png",
"replicas": {
"s3": "https://img.yinyanbo.eu.org/entries/43/assets/bb6b28eff69c6dfa81b4edde69455892904f6d02450a1a8eb1180fef37ac2c3b-640.png"
},
"sha256": "bb6b28eff69c6dfa81b4edde69455892904f6d02450a1a8eb1180fef37ac2c3b",
"size_bytes": 365908,
"storage_key": "entries/43/assets/bb6b28eff69c6dfa81b4edde69455892904f6d02450a1a8eb1180fef37ac2c3b-640.png"
},
{
"asset_name": "87ed2b1c344bce934662b5aa3314738e4f350b72c882f9a47beb243900c9ec62-640-7487e66f.png",
"local_path": "assets/87ed2b1c344bce934662b5aa3314738e4f350b72c882f9a47beb243900c9ec62-640-7487e66f.png",
"mime_type": "image/png",
"public_url": "https://img.yinyanbo.eu.org/entries/43/assets/87ed2b1c344bce934662b5aa3314738e4f350b72c882f9a47beb243900c9ec62-640-7487e66f.png",
"replicas": {
"s3": "https://img.yinyanbo.eu.org/entries/43/assets/87ed2b1c344bce934662b5aa3314738e4f350b72c882f9a47beb243900c9ec62-640-7487e66f.png"
},
"sha256": "87ed2b1c344bce934662b5aa3314738e4f350b72c882f9a47beb243900c9ec62",
"size_bytes": 1058632,
"storage_key": "entries/43/assets/87ed2b1c344bce934662b5aa3314738e4f350b72c882f9a47beb243900c9ec62-640-7487e66f.png"
},
{
"asset_name": "1b70cf1746f3f081ab129627935d4a23730e9f318b01ea8b58903f06cd0b85c2-640.jpg",
"local_path": "assets/1b70cf1746f3f081ab129627935d4a23730e9f318b01ea8b58903f06cd0b85c2-640.jpg",
"mime_type": "image/jpeg",
"public_url": "https://img.yinyanbo.eu.org/entries/43/assets/1b70cf1746f3f081ab129627935d4a23730e9f318b01ea8b58903f06cd0b85c2-640.jpg",
"replicas": {
"s3": "https://img.yinyanbo.eu.org/entries/43/assets/1b70cf1746f3f081ab129627935d4a23730e9f318b01ea8b58903f06cd0b85c2-640.jpg"
},
"sha256": "1b70cf1746f3f081ab129627935d4a23730e9f318b01ea8b58903f06cd0b85c2",
"size_bytes": 98218,
"storage_key": "entries/43/assets/1b70cf1746f3f081ab129627935d4a23730e9f318b01ea8b58903f06cd0b85c2-640.jpg"
},
{
"asset_name": "f945835c4d633d4f34a88b855ac42ebfff1c9458fbe75aeb8144d33fbda4c5de-640-9ff01b33.png",
"local_path": "assets/f945835c4d633d4f34a88b855ac42ebfff1c9458fbe75aeb8144d33fbda4c5de-640-9ff01b33.png",
"mime_type": "image/png",
"public_url": "https://img.yinyanbo.eu.org/entries/43/assets/f945835c4d633d4f34a88b855ac42ebfff1c9458fbe75aeb8144d33fbda4c5de-640-9ff01b33.png",
"replicas": {
"s3": "https://img.yinyanbo.eu.org/entries/43/assets/f945835c4d633d4f34a88b855ac42ebfff1c9458fbe75aeb8144d33fbda4c5de-640-9ff01b33.png"
},
"sha256": "f945835c4d633d4f34a88b855ac42ebfff1c9458fbe75aeb8144d33fbda4c5de",
"size_bytes": 583824,
"storage_key": "entries/43/assets/f945835c4d633d4f34a88b855ac42ebfff1c9458fbe75aeb8144d33fbda4c5de-640-9ff01b33.png"
},
{
"asset_name": "020a7f578e5c2bb77be645ad1d0942ae28e3f9954bb9ba19d5e4dbdf26470daf-640-86a2f32d.png",
"local_path": "assets/020a7f578e5c2bb77be645ad1d0942ae28e3f9954bb9ba19d5e4dbdf26470daf-640-86a2f32d.png",
"mime_type": "image/png",
"public_url": "https://img.yinyanbo.eu.org/entries/43/assets/020a7f578e5c2bb77be645ad1d0942ae28e3f9954bb9ba19d5e4dbdf26470daf-640-86a2f32d.png",
"replicas": {
"s3": "https://img.yinyanbo.eu.org/entries/43/assets/020a7f578e5c2bb77be645ad1d0942ae28e3f9954bb9ba19d5e4dbdf26470daf-640-86a2f32d.png"
},
"sha256": "020a7f578e5c2bb77be645ad1d0942ae28e3f9954bb9ba19d5e4dbdf26470daf",
"size_bytes": 968388,
"storage_key": "entries/43/assets/020a7f578e5c2bb77be645ad1d0942ae28e3f9954bb9ba19d5e4dbdf26470daf-640-86a2f32d.png"
}
],
"original_url": "https://mp.weixin.qq.com/s?__biz=MzkzNDQxOTU2MQ==&mid=2247515778&idx=1&sn=7ea594245be39b32a5209801826028de&chksm=c3a4300160e8a229458cb140ebd51aa3e979bb15aafca810fd0b0bd1a5bb3ec31b874e9a7dbf&mpshare=1&scene=1&srcid=0420dAOYOB1zPA4H4rOHkqHy&sharer_shareinfo=0019b9e177fa6c74e0ecf33e87ada0fa&sharer_shareinfo_first=0019b9e177fa6c74e0ecf33e87ada0fa#rd",
"readable_path": "readable.html",
"snapshot_path": "page.html",
"source_url": "https://mp.weixin.qq.com/s?__biz=MzkzNDQxOTU2MQ==&mid=2247515778&idx=1&sn=7ea594245be39b32a5209801826028de&chksm=c3a4300160e8a229458cb140ebd51aa3e979bb15aafca810fd0b0bd1a5bb3ec31b874e9a7dbf&mpshare=1&scene=1&srcid=0420dAOYOB1zPA4H4rOHkqHy&sharer_shareinfo=0019b9e177fa6c74e0ecf33e87ada0fa&sharer_shareinfo_first=0019b9e177fa6c74e0ecf33e87ada0fa#rd",
"status": "success",
"title": "\u5f00\u53d1 Next.js \u7684 Vercel \u88ab\u9ed1\uff0c\u6570\u636e\u88ab\u53eb\u5356",
"wechat_blocked": true,
"wechat_credentials_used": true,
"wechat_fetch_reason": "credential_retry_succeeded"
}