
Vercel 遭駭(2026 年 4 月):每位開發者今天都該執行的 60 分鐘緊急應變手冊
2026 年 4 月 19 日,Vercel 確認攻擊者入侵了第三方 AI 工具(Context.ai),劫持了一名 Vercel 員工的 Google Workspace 帳號,並讀取了有限 subset 客戶專案中未標記為「敏感(sensitive)」的環境變數。如果你在過去 30 天內有部署任何專案到 Vercel,你必須假設你的某個環境變數可能已經落入他人手中,並且需要迅速行動。
這裡有一個令人不安的事實:大多數 vibecoders 會直接從範本複製 .env 值,卻從未碰過 「敏感(sensitive)」切換開關。這正是攻擊者所讀取的那類變數。這份手冊將引導你完成接下來的 60 分鐘,告訴你該檢查什麼、該輪換什麼,以及如何強化你的技術堆疊,讓下一次平台資安事件不會搞垮你的應用程式。
重點摘要:接下來 60 分鐘該做什麼
如果你沒時間讀完全文,請立刻執行這六件事:
- 暫停生產環境分支的自動部署。
- 執行
vercel env pull並在輸出結果中搜尋秘密模式(sk_live_、AKIA、ghp_、eyJ)。 - 輪換所有儲存為非敏感環境變數的 API 金鑰,優先處理付款、資料庫、身分驗證和雲端供應商的金鑰。
- 使用 Vercel 的「敏感」環境變數切換開關重新加入已輪換的秘密,然後重新部署。
- 開啟 Vercel 4 月 1 日至 20 日的活動紀錄,標記任何你不認識的部署、登入或權杖事件。
- 檢視相同時間範圍內的 GitHub 組織稽核紀錄,尋找新的個人存取權杖(PATs)、部署金鑰或工作流程變更。
以下是完整的詳細說明,包含你所需的指令、模式和輪換順序。
Vercel 2026 年 4 月資安事件究竟發生了什麼事?
Vercel 於 2026 年 4 月 19 日揭露,攻擊者入侵了 Context.ai,這是一款 Vercel 員工使用的第三方 AI 生產力工具。隨後,攻擊者接管了該員工的 Vercel Google Workspace 帳號,滲透進 Vercel 的內部環境,並存取了未標記為「敏感」的環境變數。
標記為「敏感」的變數使用獨立的加密讀取路徑,Vercel 表示沒有證據顯示這些變數遭到洩露。除此之外,儲存 API 金鑰、資料庫 URL、JWT 秘密的一般環境變數均可被讀取。雖然有網路犯罪論壇貼文聲稱以 200 萬美元出售 Vercel 數據,但 Vercel 尚未確認數據遭竊。無論如何,安全的做法是為了輪換目的假設已遭入侵,即使 Vercel 沒有直接發送電子郵件給你。
該公司評估攻擊者「基於其操作速度和對 Vercel 系統的詳細了解,具有高度複雜性」。翻譯成白話就是:這不是腳本小子在鬧著玩,請嚴肅看待時間壓力。
你是否受到影響?如何在 5 分鐘內檢查
簡短回答:如果你使用 Vercel 且沒有嚴格遵守 「敏感」切換開關 的使用規範,請將自己視為受影響者。以下是 5 分鐘的快速檢傷分類:
- 開啟 Vercel 的活動紀錄 並篩選從 2026 年 4 月 1 日至今的資料。尋找不熟悉的登入、權杖建立或部署記錄。
- 前往 Google Workspace 管理員控制台 → 安全性 → API 控制項,並搜尋已公佈的危害指標:OAuth 用戶端 ID
110671459871-30f1spbu0hptbs60cb4vsmv79i7bbvqj.apps.googleusercontent.com。如果發現已授權,請立即撤銷。 - 檢查團隊中是否有人曾使用 Google SSO 登入 Context.ai。如果有,請將他們的帳號視為高風險。
- 查看你的 Vercel 專案中的「環境變數」標籤頁。計算有多少變數未標記為「敏感」。這些都在影響範圍內。
如果你收到 Vercel 寄來主旨為「我們發現影響您帳號的資安事件」的電子郵件,你屬於確認受影響的群組。請跳至輪換章節並立即開始。
60 分鐘緊急應變手冊
此步驟依影響範圍排序。請勿跳過任何步驟,每一步都是下一步的前提。
步驟 1:凍結環境(前 10 分鐘)
在開始鑑識調查前先止血:
- 暫停
main/production分支的自動部署(Vercel 儀表板 → 專案 → 設定 → Git)。 - 如果你懷疑有更深入的入侵,請暫時停用 Vercel GitHub App,位置在
github.com/organizations/<your-org>/settings/installations。 - 匯出你的 Vercel 稽核紀錄為 CSV 檔案並儲存在本地。如果後續演變成需要通報 GDPR 的事件,你會需要它。
- 啟用 Observability Plus(即使是試用週),以便保留更長時間的紀錄。
這是「保存證據」的步驟。在快照紀錄之前進行輪換會破壞你的時間軸證據。
步驟 2:拉取環境變數並掃描其中的秘密
開啟終端機並執行:
vercel link
vercel env pull .env.vercel-audit接著掃描輸出結果。最快的方法是使用 GitGuardian 的 CLI:
ggshield secret scan path .env.vercel-audit如果你不想安裝任何東西,可以 grep 以下模式,它們能捕捉到環境檔案中 80% 的洩漏秘密:
grep -E "AKIA[0-9A-Z]{16}|sk_live_[0-9a-zA-Z]{24}|ghp_[0-9a-zA-Z]{36}|ghs_[0-9a-zA-Z]{36}|npm_[0-9a-zA-Z]{36}|eyJ[a-zA-Z0-9_-]+|-----BEGIN" .env.vercel-audit每個匹配項目都是潛在的輪換對象。每個未匹配但仍是憑證的秘密(如資料庫 URL、Redis 密碼、webhook 簽署金鑰)也是輪換對象,grep 只是捕捉明顯的目標。
步驟 3:依優先順序輪換秘密(而非字母順序)
這是大多數團隊搞砸的地方。他們隨機輪換 40 個秘密,導致 session key 失效使所有活躍登入中斷,支援票務瞬間爆炸。請分層級進行:
第 0 層 — 在接下來 30 分鐘內輪換:
- 所有 GitHub 個人存取權杖(細粒度和經典版)
- 所有現有的 Vercel 敏感環境變數權杖
- 部署保護權杖
第 1 層 — 今天內輪換:
- 付款處理器秘密金鑰(Stripe
sk_live_、Adyen、Braintree) AUTH_SECRET、NEXTAUTH_SECRET、JWT 簽署金鑰、session cookies- 具有寫入權限的資料庫連接字串(
DATABASE_URL、Mongo、Redis) - 雲端供應商金鑰(AWS IAM、GCP 服務帳號、Azure 用戶端秘密)
- Webhook 簽署秘密(需在發送端和接收端同時更新)
第 2 層 — 本週內輪換:
- 第三方 SaaS 金鑰(電子郵件、SMS、分析、CRM)
- OAuth 用戶端秘密
- SMTP 憑證、CDN 金鑰
第 3 層 — 方便時輪換:
- 唯讀分析權杖、Sentry DSNs、公開/匿名金鑰
關鍵操作順序:
- 對於資料庫:在撤銷舊使用者之前先建立新使用者,否則會在輪換過程中導致網站當機。
- 對於 session 金鑰:規劃登出事件,所有活躍 session 都會失效。
- 對於 webhooks:在同一個部署視窗內更新兩端。
- 每次更改環境變數後都要重新部署。Vercel 在建構時嵌入值,而非執行時。
步驟 4:將所有内容重新添加為「敏感」
當你放回新值時,請將每一個變數的 「敏感」 切換開關打開。敏感值使用獨立的加密路徑,根據 Vercel 的公告,這些值在此次事件中未遭到洩露。這個一鍵式的改變本可以拯救大多數受影響的客戶。
步驟 5:稽核你的 Repo 是否有不必要的變更
將主分支的 HEAD 與 4 月 1 日之前已知良好的 commit 進行比較。專注於:
package.json腳本,特別是postinstall、prepare、preinstall- 鎖定檔案(
package-lock.json、pnpm-lock.yaml)中是否有意外新增的依賴套件 .github/workflows/*.yml中是否有新工作流程或未固定版本的 actionsvercel.json中是否有建構指令變更或可疑的重寫規則next.config.js中是否有指向未知網域的新標頭或重定向
如果你有發布 npm 套件,請同時執行 npm view <pkg> time --json 並確認沒有發布非你作者身份的程式碼。
步驟 6:追蹤下游影響
攻擊者不會只停留在環境變數,他們會利用這些變數。查詢你的下游系統在 4 月 1 日至今的記錄:
- AWS CloudTrail: 意外的
CreateUser、AttachUserPolicy、S3GetObject爆發、來自新 IP 的登入。 - 資料庫稽核紀錄: 大型
SELECT *查詢、匯出操作、來自異常地區的連接。 - Stripe / Adyen: 新的 API 金鑰、可疑退款、來自奇怪地點的客戶建立記錄。
- 身分驗證供應商: 不可能移動的登入記錄、未經授權的密碼重置、新的 OAuth 應用程式。
任何命中都會將此事從輪換練習轉變為實際的事件,請升級處理並考慮通知義務(GDPR:72 小時內)。
「Vibecoders」忽略的事:隱藏的攻擊面
如果你是透過 AI 輔助編程入門,使用像 Claude Code、Cursor 或 Copilot 這樣的工具,你可能在閱讀任何資安文件之前就發布了第一個 Vercel 應用程式。這沒關係。但有四個隱藏陷阱對 vibecoders 的打擊比對資深開發者更大:
NEXT_PUBLIC_陷阱。 任何以NEXT_PUBLIC_為前綴的內容都會打包進客戶端 JavaScript。如果你為了「測試方便」把 API 金鑰放進去,它在資安事件發生前就已經公開了。Grep 你的建構輸出:grep -rE "sk_|AKIA|eyJ" .next/static/。- Linear / Slack 洩漏。 如果你的團隊將秘密貼到 Linear 問題或 Slack 討論串中「只是一下子」,這些秘密會留在第三方紀錄中。檢視你的 Linear 稽核紀錄並搜尋上述相同的 regex 模式。
- 私有 Repo 中
.env.local的誤解。 如果你的 Vercel GitHub App 遭入侵,私有 Repo 就不再私密。每個提交的.env.*檔案都在影響範圍內。 - 帶有生產環境秘密的預覽部署。 大多數 vibecoders 會在預覽環境中重複使用生產環境變數。這使你的攻擊面加倍。請將它們分開。
這是 AI 編碼工具跳過的枯燥基礎設施工作。解決方案不是停止使用 AI,而是將 AI 的速度與資安基準結合。如果你還在弄清楚你的應用程式到底託管在哪裡,我們的 Vercel vs Netlify 比較 和 Railway vs Render vs Fly.io 分析 是不錯的起點。
如何強化你的技術堆疊,讓下一次資安事件不會燒到你
平台資安事件是「何時發生」的問題,而非「是否發生」。以下是每個生產環境應用程式在週一前應具備的基準:
- 在 Vercel 中將每個新環境變數預設為「敏感」。讓這成為你團隊的肌肉記憶。
- 使用短期憑證。 將長效 AWS/GCP 金鑰替換為 GitHub OIDC 聯合身份驗證,你的雲端供應商直接信任 CI 身份,無需洩漏長效秘密。
- 安裝預提交秘密掃描(gitleaks、Trufflehog)。從源頭阻止秘密進入 Repo。
- 限制你的 GitHub App 僅適用於特定 Repo,而非整個組織。
- 每季度審查 OAuth 應用程式,涵蓋 Google Workspace、Microsoft 365、GitHub 和 Vercel。刪除任何你不認識的內容。
- 將秘密掃描作為 Claude Code hook 運行,即使 AI 忘記了,也能進行確定性的預提交強制執行。
- 固定你的 Next.js 版本 並監控建議。Vercel 是 Next.js 的主要維護者,因此這裡的事件會產生連鎖反應。
- 隔離你的後端秘密。 如果你使用 Supabase 或 Firebase,請謹慎使用行級安全性和服務角色金鑰,洩漏的服務金鑰等同於完整的資料庫淪陷。
需要協助鎖定安全嗎?Techsy 能幫上忙
誠實來說:大多數小型團隊沒有資安工程師,而在凌晨 2 點閱讀 60 步驟的事件應變手冊並不是任何人想要的週一過法。
在 Techsy,我們在過去兩年為 40 多個生產環境的 Next.js 和 Node.js 應用程式執行事件應變和平台強化。針對此次 Vercel 事件,我們提供:
- 72 小時緊急應變服務:我們執行第 0 層 / 第 1 層輪換,針對 200 多種秘密簽名掃描你的環境變數,並端到端稽核你的 Vercel + GitHub + 雲端紀錄。典型週轉時間:一個工作天。
- 平台強化稽核:敏感變數遷移、OIDC 憑證輪換、預提交秘密掃描、GitHub App 範圍限定,以及撰寫操作手冊,讓未來的你知道在下一次資安事件中該做什麼。
- 持續性 DevSecOps:季度 OAuth 審查、持續秘密掃描和事件演練,讓「這不會發生在我們身上」成為你可以真正背書的主張。
我們是工程師,不是勾選方框的資安廠商。如果你現在正感到恐慌,聯繫我們進行免費的 30 分鐘檢傷分類通話,我們會誠實地告訴你是否需要我們,或者你是否可以依靠上述手冊自行處理。
常見問題
Vercel 遭駭是確認的事實還是只是謠言?
已確認。Vercel 於 2026 年 4 月 19 日發布了官方資安公告,承認透過受入侵的第三方 AI 工具(Context.ai)和被劫持的員工 Google Workspace 帳號進行了未經授權的存取。未標記為「敏感」的環境變數被存取。另一則 BreachForums 貼文聲稱以 200 萬美元出售數據;這部分尚未證實。
我沒有收到 Vercel 的電子郵件。我安全嗎?
可能吧,但「可能」並不是一種資安姿態。Vercel 表示他們聯繫了有限 subset 的確認受影響客戶。如果你沒收到郵件,你的風險較低,但 Vercel 平台上所有非敏感環境變數都在影響範圍內。無論如何,請執行上述的 10 分鐘檢傷分類。
Vercel 中「敏感」和一般環境變數有什麼區別?
「敏感」環境變數使用獨立的加密讀取路徑,建立後無法在儀表板中查看。一般環境變數可被任何擁有專案存取權限的人讀取(包括在此次事件中的攻擊者)。修復方法是免費的,每個變數只需點擊一次。
我需要輪換所有秘密,還是只輪換 Vercel 上的那些?
輪換儲存在非敏感 Vercel 環境變數中的每個秘密。如果你在其他地方使用了相同的金鑰(一種常見的反模式),請在所有地方輪換它。別忘了預覽部署中的 .env.local、像 GitHub Actions 這樣的 CI 系統,以及貼在 Linear 或 Slack 中的任何參考內容。
如何快速掃描我的環境變數以尋找實際的秘密?
執行 vercel env pull .env.audit 然後執行 ggshield secret scan path .env.audit。如果你無法安裝 GitGuardian,請使用手冊步驟 2 中的 grep 單行指令,它能捕捉 AWS 金鑰、Stripe 金鑰、GitHub 權杖、npm 權杖、JWT 和 PEM 區塊。
在此事件後我應該離開 Vercel 嗎?
僅因這次事件而不必如此。Vercel 的回應、公開的危害指標(IoC)、時間軸和輪換指導方針相當透明。每個平台最終都會發生資安事件。重要的是你是否為此做好了設計:敏感變數預設、短期憑證、隔離的環境。如果你正在權衡替代方案,我們的 Vercel vs Netlify 和 Railway vs Render vs Fly.io 文章分析了各自的優缺點。
如果我受到影響,我有多長時間需要通知客戶?
GDPR 給予你從知悉可通報 breaches 起的 72 小時。加州(CCPA)有針對數據類別的特定觸發條件。SOC 2 / ISO 27001 合約通常要求比監管機構更早的通知。如果你有付費客戶且確認他們的數據遭竊,請假設你處於 72 小時倒數計時中,並在發送任何內容前諮詢法律顧問。
即使我不在 Vercel 上,Next.js 應用程式也會因此受到攻擊嗎?
此次事件特定於 Vercel 平台。託管在其他地方的 Next.js 本身不受此次 breaches 機制的影響。但是,如果你使用了同樣的 NEXT_PUBLIC_ 環境變數模式 而意外洩露秘密,這些問題會隨你的程式碼無論託管在哪裡都存在。無論如何,請稽核你的建構輸出。
哪種一鍵式修復本可以防止大部分損害?
從第一天起就將 Vercel 中每個包含憑證的環境變數標記為 「敏感」。這是儀表板中的一個核取方塊。在此次事件中,敏感變數未被存取,只有常規變數被存取。這就是修復方法,而且每個專案只需花費零美元和大約五分鐘。
如何確保我的團隊不再發布未標記的秘密?
三個層級:(1) 使用 gitleaks 進行預提交秘密掃描,(2) 透過 Vercel API 檢查如果新增環境變數時沒有 sensitive: true 標誌則失敗的 CI 檢查,以及 (3) Claude Code hook 在每次編輯時運行掃描器。深度防禦,其中任何一項都能捕捉 80%,三者結合能捕捉約 99%。
結論
Vercel 2026 年 4 月的資安事件很糟糕,但如果你在接下來的 60 分鐘內行動,它是可以 survivable 的。凍結部署、拉取環境變數、執行 grep、分層輪換、重新添加為敏感變數,並追蹤下游影響。這就是完整的手冊。
平台資安事件暴露了我們對預設值的依賴程度。大多數在此事件中受傷的團隊並沒有做錯什麼,他們只是因為沒人告訴他們這很重要而沒勾選「敏感」切換開關。這對 vibecoders 來說是真正的教訓:AI 生成的程式碼發布速度快,但資安預設值不會隨之生成。
如果你想讓另一雙眼睛檢查你的技術堆疊,或者你不想在凌晨 2 點獨自執行這份手冊,預約與 Techsy 團隊的免費檢傷分類通話。否則,祝你好運,動作快點,並將那些變數標記為敏感。