TL;DR

Ngày 19/4/2026, Vercel công bố sự cố bảo mật: một OAuth app Google Workspace của bên thứ ba bị compromise, attacker đọc được environment variables ở dạng plaintext trong Edge Config của một subset khách hàng. Sensitive environment variables được mã hoá và không bị ảnh hưởng. Vercel khuyến nghị mọi user — không chỉ người được thông báo — xoay toàn bộ secrets non-sensitive ngay. Bài này là playbook 7 bước để làm nhanh và gọn.

Chuyện gì vừa xảy ra

  • 17/4/2026: telemetry nội bộ Vercel phát hiện pattern API access bất thường. Theo Project Discovery, cửa sổ exfiltration kéo dài ~47 giờ, attacker xoay vòng residential proxy để né rate limit.
  • 19/4/2026: Vercel public bulletin trên Knowledge Base sau khi threat actor rao bán dữ liệu trên dark web forum.
  • Attack vector: một OAuth app bên thứ ba (được cộng đồng HN xác định là context.ai, sau đó OAuth client đã bị xoá) giữ scope quá rộng — env:readconfig:write xuyên suốt org workspace. Không phải zero-day trong Vercel runtime.
  • Cái gì lộ: env vars thường + project config trong Edge Config (KV store đa vùng trên Cassandra, sub-10ms đọc edge). Không lộ: source code, private npm packages, env vars đánh dấu Sensitive.

Vì sao bạn nên hành động kể cả khi chưa bị báo

Vercel dùng cụm từ mơ hồ "limited subset of customers" — không công bố con số cụ thể. Như GitGuardian cảnh báo: "xoay secrets trong CI/CD chưa đủ — bạn phải săn hành vi lạ trên mọi SaaS và cloud đã tích hợp". Secrets bị lộ không tự thông báo. Attacker có thể đang dùng key của bạn để query DB, gọi API, rút tiền Stripe ngay bây giờ. Chờ email xác nhận = mất giờ vàng response.

Playbook 7 bước xoay secrets

Dựa trên khuyến nghị chính thức của Vercel, @matsiiako, và best practice từ secret management community:

  1. Xoay mọi secrets non-sensitive ngay: DB credentials, API keys (Stripe, OpenAI, AWS, Supabase...), auth tokens, JWT/HMAC signing keys. Ưu tiên production trước.
  2. Bulk-migrate sang Sensitive: trong Vercel dashboard → Settings → Environment Variables, remove và re-add với Sensitive toggle bật (hoặc dùng Infisical Vercel sync để đánh dấu hàng loạt). Sensitive chỉ khả dụng ở Production và Preview.
  3. Bật Environment Variable Policy ở cấp team: Settings → Security & Privacy → Enforce Sensitive Environment Variables. Mọi var mới sẽ mặc định Sensitive.
  4. Schedule rotation tự động cho DB creds và API keys quan trọng — cron + secret manager, không để key dùng quá 30–90 ngày.
  5. Chuyển sang dynamic secrets: HashiCorp Vault, Doppler, hoặc Infisical với dynamic DB credentials — creds sống vài phút đến vài giờ, không phải vài tháng.
  6. Pull secrets ở runtime qua SDK thay vì nhồi hết vào Vercel env vars. Ít secrets lưu = ít secrets để lộ.
  7. Audit logs: review Vercel activity log (dashboard hoặc vercel logs CLI) tìm deployment lạ hoặc env read bất thường. Quan trọng hơn — săn downstream trên AWS CloudTrail, Stripe dashboard, DB audit log, GitHub audit log cho mọi hành vi dùng key bị lộ.

Tại sao Sensitive flag là khác biệt sinh tử

Theo byteiota và Theo (t3.gg), env vars đánh dấu Sensitive KHÔNG bị lộ trong vụ này. Cơ chế:

  • Stored ở dạng không đọc được — ngay cả project owner cũng không xem được value sau khi save.
  • Chỉ available ở môi trường Production và Preview (không dùng được local dev).
  • Không edit được key — muốn đổi giá trị phải ghi đè value mới, hoặc delete rồi recreate.
  • Team owner có thể bật Enforce Sensitive policy để mọi var mới auto-sensitive.

Feature này tồn tại từ lâu nhưng mặc định tắt. Nhiều dev chưa từng bật. Đó là lý do tại sao một sự cố scope hẹp lại biến thành rủi ro ngành rộng.

Bối cảnh rộng hơn: platform là attack vector

Vụ Vercel nối tiếp một chuỗi supply-chain attack trong tháng 3/2026 — Axios NPM compromise (quy cho nhóm APT Bắc Hàn), nhóm TeamPCP tấn công Trivy, KICS, LiteLLM, Telnyx. Pattern chung: 1 dev tool / OAuth app bị compromise → hàng trăm org downstream lộ secrets. Tương tự Okta 2022, CircleCI 2023, Snyk 2024.

Bài học: đừng tin trust model mặc định của platform. Coi mọi env var là potentially compromised; ép short-lived, dynamic-injected secrets; scope token theo project chứ không theo org.

Điều Vercel vẫn chưa nói

  • Số customer ảnh hưởng chính xác — "limited subset" là bao nhiêu?
  • Chưa có email blast đến toàn user base (phàn nàn lớn nhất trên HN).
  • Tên 3rd-party app chưa confirm chính thức từ Vercel (cộng đồng đoán context.ai).
  • Timeline đầy đủ: breach thực sự bắt đầu khi nào vs khi phát hiện?

Bước tiếp theo

Vercel đang điều tra cùng incident-response experts, đã thông báo law enforcement, publish IOC cho Google Workspace admin kiểm tra. Nhưng response thực sự nằm ở phía bạn: đừng chờ. Mở tab Vercel dashboard ngay, chạy 7 bước trên, và coi vụ này là cú hích cuối để chuyển team sang secret management chuyên dụng.

Nguồn: Vercel KB bulletin, byteiota, BleepingComputer, Vercel docs — Sensitive env vars, @matsiiako tweet.