概述

项目 内容
事件名称 Vercel April 2026 Security Incident
披露时间 2026年4月19日
初始感染 约2026年2月(Context.ai 员工中 Lumma Stealer)
攻击者手法 通过第三方 OAuth 应用横向移动
影响范围 部分客户项目的非敏感环境变量被读取
攻击者定性 高复杂度,AI 加速攻击速度(CEO Rauch 原话)
协同调查方 Google Mandiant、GitHub、Microsoft、npm、Socket

事件时间线

时间 事件
约2026年2月 Context.ai 员工感染 Lumma Stealer(下载 Roblox 漏洞脚本),凭据、Session Token、OAuth Token 被窃
约2026年3月 攻击者进入 Context.ai 的 AWS 环境,窃取消费者用户的 OAuth Token(包括一名 Vercel 员工的 Google Workspace Token)
2026年3月 攻击者使用窃取的 OAuth Token 进入 Vercel 员工的 Google Workspace 账号
2026年3-4月 攻击者从 Google Workspace 账号 pivot 到 Vercel 内部系统,开始枚举客户环境变量
2026年4月10日 OpenAI 向某 Vercel 客户发出泄露 API Key 通知(客户报告)
2026年4月19日 Vercel 发布安全公告,CEO Rauch 在 X 上详细披露攻击链
2026年4月19日后 客户通知、凭证轮换指导、仪表盘安全更新

攻击链详解(MITRE ATT&CK)

Stage 1:第三方 OAuth compromise(T1199)

Context.ai 是一家 AI 可观测性工具厂商,其 Google Workspace OAuth 应用已被 Vercel 员工授权使用。

初始感染:下载 Roblox 外挂中了 Lumma Stealer

根据 HUDSON Rock 和 CyberScoop 的调查,Context.ai 的一名员工想要玩 Roblox 游戏外挂,在网上搜索并下载了"Roblox 漏洞利用脚本"。这个脚本表面上是游戏作弊工具,实际内嵌了 Lumma Stealer 窃密木马。

这是一个非常经典的木马传播路径:

  1. 目标群体:游戏玩家,特别是想用外挂的年轻用户
  2. 诱饵:免费的 Roblox 漏洞利用脚本
  3. 实际载荷:Lumma Stealer — 专门窃取浏览器凭据、Session Token、加密货币钱包、FTP 记录的窃密木马
  4. 传播渠道:论坛、第三方下载站、YouTube 教程视频的链接
员工想要免费开挂
           ↓
去游戏论坛/第三方站下载"Roblox 漏洞利用脚本"
           ↓
脚本里捆了 Lumma Stealer
           ↓
执行后,浏览器凭据、Session、OAuth Token 全部被盗
           ↓
数据上传到攻击者 C2 服务器

Stage 2:OAuth 持久化访问(T1550.001)

Google OAuth 应用一旦授权,访问令牌长期有效,不需要密码,且在密码轮换后依然有效。

OAuth App: 110671459871-30f1spbu0hptbs60cb4vsmv79i7bbvqj.apps.googleusercontent.com

这个 OAuth 应用在 Vercel 员工授权后,攻击者就获得了"无需密码的长期访问权限"。

Stage 3:横向移动到 Vercel(T1550.001)

使用窃取的 Google OAuth Token 登录 Google Workspace 账号
           ↓
利用 Google Workspace session 进入 Vercel 员工账号
           ↓
从员工账号 pivot 到 Vercel 内部环境
           ↓
枚举并读取客户项目环境变量

Stage 4:环境变量窃取(T1213.003)

Vercel 的环境变量模型中,未被标记为"sensitive"的值会以明文形式存储和传输。攻击者利用内部访问权限读取了这些明文环境变量,其中常包含:

  • OpenAI API Key
  • 数据库凭证
  • 第三方服务 Token
  • 部署保护 Token

为什么影响这么大

1. OAuth 的"信任链"问题

这不是 Vercel 自己的漏洞,而是第三方供应商的 OAuth 应用被攻破,导致 Vercel 受到牵连。

现代 SaaS 环境中,企业会授权数十个第三方 OAuth 应用,这些应用持有长期有效的访问令牌,但组织通常没有集中管理这些令牌的机制。

2. 环境变量的"非敏感"默认值

Vercel 的设计是:环境变量默认不加密,只有标记为"sensitive"的才加密。

这意味着即使用户没有特意标记,任何获得 Vercel 内部访问权限的攻击者都能读取明文环境变量。

3. 检测-披露时间差

至少一名客户在 4月10日 就收到了 OpenAI 的泄露通知,而 Vercel 直到 4月19日 才公开披露,整整晚了 9 天。

如果那个 API Key 只存在于 Vercel,那就说明攻击者在 Vercel 披露之前就已经在黑市/野外使用了这批凭据。


平台设计的问题

设计决策 安全影响
OAuth 第三方授权 第三方被攻破 = 本方被入侵
环境变量默认不明文加密 内部访问 = 环境变量可读
非敏感环境变量可枚举 攻击者有内部访问权限就能列出所有值

2026 年 SaaS 供应链攻击模式

这不是孤例。2026 年已经发生了多起类似的开发者平台供应链攻击

事件 手法
LiteLLM 包管理器供应链投毒
Axios npm 包被篡改
Codecov CI/CD 脚本被篡改
CircleCI 客户凭据泄露
Vercel 第三方 OAuth 横向移动

攻击者越来越倾向于攻击开发者生态——因为这里有大量的长期有效凭据,且平台安全往往不如生产环境严格。


防御建议

对 Vercel 客户

  1. 立即轮换所有未标记为 sensitive 的环境变量(API Key、数据库密码、Token 等)
  2. 启用 2FA(强制使用 Authenticator App 或 Passkey)
  3. 将所有敏感凭据标记为 sensitive
  4. 审查最近部署,删除可疑的 deployment
  5. 开启活动日志监控,检查异常访问
  6. 检查部署保护 Token,如果设置过则轮换

对所有 SaaS 平台用户

  1. 像管理供应商一样管理 OAuth 应用 — 定期审查已授权的第三方应用,及时撤销不再使用的
  2. 限制 OAuth 权限范围 — 只授权业务必需的最小权限
  3. 监控 OAuth 异常登录 — 关注来自新设备/新地点的 OAuth 访问
  4. 假设平台侧可能受침 — 不要在环境变量里存永久凭据,使用短期 Token 或 secret manager
  5. Google Workspace 日志保留 — 确保日志保留时间超过 6 个月,以便溯源

思维延伸

OAuth 是新的"密码"

这件事最值得深思的一点:OAuth Token 比密码更危险

密码可以改,改完就失效。但 OAuth Token 一旦授权,只要不过期就能持续使用,而且不依赖于用户的密码轮换

传统的"密码安全"思维在这里完全失效——你轮换了密码,但 OAuth Token 还在。攻击者拿到 Token 后,可能在长达几个月内都畅通无阻。

AI 加速攻击

Vercel CEO Rauch 在 X 上明确指出,攻击者表现出"非同寻常的速度和对我司产品 API 的深度理解",暗示攻击者使用了 AI 辅助。

这意味着:

  • 攻击者可以用 AI 快速学习不熟悉的平台 API surface
  • 自动化地发现内部系统和环境变量枚举路径
  • 将原本需要数周的情报收集工作压缩到数天

IOCs( Indicators of Compromise)

OAuth App Client ID: 110671459871-30f1spbu0hptbs60cb4vsmv79i7bbvqj.apps.googleusercontent.com

Google Workspace 管理员应立即检查是否有用户授权过这个 OAuth 应用。


参考

  • Vercel 官方公告:https://vercel.com/kb/bulletin/vercel-april-2026-security-incident
  • Trend Micro 分析:https://www.trendmicro.com/en_us/research/26/d/vercel-breach-oauth-supply-chain.html
  • GitHub 研究仓库:https://github.com/alecccg03/Supply-Chain-Attack-Mapping
  • Context.ai 安全公告:https://context.ai/security-update
  • Hudson Rock 调查:https://www.infostealers.com/article/breaking-vercel-breach-linked-to-infostealer-infection-at-context-ai/