Vercel 被黑客入侵是因为一名员工在 OAuth 提示上点击了“Allow”。我们都这么做。
发布: (2026年4月23日 GMT+8 21:07)
4 分钟阅读
原文: Dev.to
Source: Dev.to
背景
Vercel 的泄露并非源于复杂的零日漏洞。一次员工在 OAuth 提示框中点击了 Allow,这类操作我们很多人每月都会做数十次,却不去阅读权限细节。
泄露过程
- 初始妥协 – Lumma Stealer 恶意软件从 Context.ai 的一名员工处窃取了凭证,其中包括用于 Context.ai 与 Google Workspace 集成的 OAuth 令牌,该令牌已连接到 Vercel 的系统。
- 持久令牌 – 该 OAuth 令牌在会话结束后 未 失效;它保持有效,随后被攻击者用于横向渗透 Vercel 基础设施。
- 未被发现的访问 – 攻击者大约从 2024 年6月 到 2026 年4月(近两年)保持了访问。OAuth 令牌在授予后是不可见的,因此传统的安全警报(登录失败、暴力破解尝试、可疑 IP)未能触发。
为什么 OAuth 令牌危险
- 一次性授权,永久遗忘 – 用户往往只授权一次,之后再也不回顾权限。
- 没有可见的认证事件 – 有效令牌发起的 API 调用看起来与正常流量完全相同,监控系统通常将其视为良性。
- 委托而非认证 – 点击 “Allow” 是在委托权限,而不是对用户进行身份验证。信任模型假设第三方服务能够永久保持安全,实际上很少成立。
个人审计经验
- 在 GitHub → Settings → Applications 中检查,发现了几年前的多个 OAuth 授权,其中很多无法辨认。
- 审查了跨服务的 OAuth 连接(GitHub、Vercel、Slack、Notion 等),并撤销了所有在过去 90 天内未使用的授权。整个过程大约花了 20 分钟,暴露出大量残留的权限。
团队层面的缓解措施
- 季度 OAuth 授权审计 – 定期审查所有 OAuth 权限。
- 撤销陈旧令牌 – 删除任何在设定时间窗口(例如 90 天)内未被主动使用的令牌。
- 监控异常 API 使用 – 即使使用的是有效令牌,也要对异常模式触发警报。
给所有人的建议
- 今天就检查你的 OAuth 授权 – 前往你使用的每项服务的 OAuth 设置(如 GitHub、Vercel、Slack),撤销不再需要的权限。
- 采用定期审计节奏 – 将 OAuth 授权审查视为常规安全任务,而非一次性操作。
- 教育团队区分认证与授权的区别 – 强调 “Allow” 按钮是授权委托,而不是登录事件。
“Allow” 按钮是现代开发中最容易被遗忘却潜在危险的 UI 元素。定期审查并清理 OAuth 权限是一种简单且有效的降低攻击面的方法。