
Vercel зламали (квітень 2026): 60-хвилинний план дій для кожного розробника
19 квітня 2026 року Vercel підтвердив, що зловмисники отримали доступ до стороннього інструменту штучного інтелекту (Context.ai), захопили обліковий запис Google Workspace співробітника Vercel і прочитали змінні середовища, які не були позначені як «чутливі» (sensitive), у обмеженій підмножині проєктів клієнтів. Якщо ви розгортали будь-що на Vercel за останні 30 днів, вам слід вважати, що одна з ваших змінних середовища вже може бути в чужих руках, і діяти потрібно швидко.
Ось незручна правда: більшість vibecoder (розробників, які покладаються на AI) просто копіюють значення .env із шаблонів, навіть не торкаючись перемикача «sensitive». Саме такі змінні й прочитав зловмисник. Цей покроковий план допоможе вам діяти протягом наступних 60 хвилин: що перевірити, що змінити (ротувати) і як посилити захист свого стеку, щоб наступний витік на платформі не зламав ваш додаток.
Коротко: Що зробити за наступні 60 хвилин
Якщо ви прочитаєте лише це, виконайте ці шість дій прямо зараз:
- Призупиніть автоматичне розгортання на гілках production.
- Виконайте
vercel env pullі перевірте вивід на наявність шаблонів секретів (sk_live_,AKIA,ghp_,eyJ). - Ротуйте всі API-ключі, збережені як нечутливі змінні середовища, починаючи з платіжних систем, баз даних, аутентифікації та ключів хмарних провайдерів.
- Додайте оновлені секрети знову, увімкнувши перемикач «Sensitive» у Vercel, після чого виконайте повторне розгортання.
- Відкрийте журнал активності Vercel за період 1–20 квітня і позначте будь-які події розгортання, входу або використання токенів, які ви не впізнаєте.
- Перевірте журнал аудиту організації GitHub за той самий період на наявність нових PAT (Personal Access Tokens), ключів розгортання або змін у воркфлоу.
Нижче наведено повний розбір із необхідними командами, шаблонами та порядком ротації.
Що саме сталося під час витоку даних Vercel у квітні 2026 року?
19 квітня 2026 року Vercel повідомив, що зловмисник отримав доступ до Context.ai — стороннього інструменту продуктивності на основі ШІ, яким користувався один із співробітників Vercel. Звідти зловмисник захопив обліковий запис Google Workspace цього співробітника у Vercel, перейшов у внутрішнє середовище Vercel і отримав доступ до змінних середовища, які не були позначені як «чутливі».
Змінні, позначені як «чутливі», використовують окремий зашифрований шлях читання, і Vercel заявляє, що немає доказів їхнього витоку. Усе інше — звичайні змінні середовища, що зберігають API-ключі, URL-адреси баз даних, секрети JWT, — було доступно для читання. На одному з кіберзлочинних форумів з’явилося повідомлення про продаж даних Vercel за 2 мільйони доларів, хоча Vercel не підтвердив факт викрадення даних. У будь-якому разі, найбезпечнішим рішенням є вважати дані скомпрометованими заради ротації, навіть якщо Vercel не надіслав вам прямого листа.
Компанія оцінила рівень зловмисника як «висококваліфікований, судячи зі швидкості операцій та детального розуміння систем Vercel». Іншими словами: це не початківець, ставтеся до часу серйозно.
Чи постраждали ви? Як перевірити за 5 хвилин
Коротка відповідь: якщо ви використовуєте Vercel і не були педантичні щодо перемикача «Sensitive», вважайте себе постраждалою стороною. Ось алгоритм швидкої перевірки за 5 хвилин:
- Відкрийте журнал активності Vercel і відфільтруйте дані з 1 квітня 2026 року до сьогодні. Шукайте незнайомі входи в систему, створення токенів або розгортання.
- Перейдіть у Google Workspace Admin → Security → API Controls і знайдіть опублікований індикатор компрометації: OAuth Client ID
110671459871-30f1spbu0hptbs60cb4vsmv79i7bbvqj.apps.googleusercontent.com. Якщо він авторизований, негайно відкликати його. - Перевірте, чи хтось із вашої команди коли-небудь входив у Context.ai через Google SSO. Якщо так, вважайте їхні облікові записи зонами підвищеного ризику.
- Перегляньте вкладку Environment Variables у вашому проєкті Vercel. Порахуйте, скільки з них НЕ позначено як «Sensitive». Кожна з них потрапляє в зону ризику.
Якщо ви отримали лист від Vercel, що починається зі слів «Ми виявили інцидент безпеки, який вплинув на ваш обліковий запис», ви перебуваєте в категорії підтверджено постраждалих. Переходьте до розділу ротації і починайте ЗАРАЗ.
60-хвилинний план екстреного реагування
Цей план впорядковано за ступенем потенційної шкоди (blast radius). Не пропускайте кроки, кожен з них відкриває шлях до наступного.
Крок 1: Заморозьте середовище (перші 10 хвилин)
Зупиніть кровотечу, перш ніж починати розслідування:
- Призупиніть автоматичне розгортання на гілках
main/production(Vercel Dashboard → Project → Settings → 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Потім проскануйте вивід. Найшвидший спосіб — CLI від GitGuardian:
ggshield secret scan path .env.vercel-auditЯкщо ви не хочете нічого встановлювати, скористайтеся grep для пошуку таких шаблонів — вони виявляють 80% витіклих секретів у файлах env:
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, ключі підпису вебхуків), ТАКОЖ є кандидатом на ротацію; grep просто ловить очевидні речі.
Крок 3: Ротуйте секрети за пріоритетом (не за алфавітом)
Саме тут більшість команд помиляються. Вони ротують 40 секретів у випадковому порядку, ключ сеансу стає недійсним для всіх активних входів, і кількість тікетів підтримки різко зростає. Робіть це рівнями:
Рівень 0 — Ротувати протягом наступних 30 хвилин:
- Усі токени особистого доступу GitHub (деталізовані та класичні)
- Усі існуючі токени чутливих змінних середовища Vercel
- Токени захисту розгортання (Deployment Protection)
Рівень 1 — Ротувати сьогодні:
- Секретні ключі платіжних процесорів (Stripe
sk_live_, Adyen, Braintree) AUTH_SECRET,NEXTAUTH_SECRET, ключі підпису JWT, файли cookie сеансів- Рядки підключення до бази даних з правами запису (
DATABASE_URL, Mongo, Redis) - Ключі хмарних провайдерів (AWS IAM, сервісні акаунти GCP, секрети клієнтів Azure)
- Секрети підпису вебхуків (оновіть і на боці відправника, і на боці одержувача)
Рівень 2 — Ротувати цього тижня:
- Ключі сторонніх SaaS-сервісів (електронна пошта, SMS, аналітика, CRM)
- Секрети OAuth-клієнтів
- Облікові дані SMTP, ключі CDN
Рівень 3 — Ротувати, коли буде зручно:
- Токени аналітики тільки для читання, Sentry DSN, публічні/анонімні ключі
Критичний порядок дій:
- Для баз даних: створіть нового користувача перед відкликанням старого, інакше ви «покладете» сайт посеред процесу ротації.
- Для ключів сеансів: заплануйте примусовий вихід із системи, оскільки всі активні сеанси завершаться.
- Для вебхуків: оновіть обидві сторони в тому ж вікні розгортання.
- Виконуйте повторне розгортання після кожної зміни змінної середовища. Vercel вбудовує значення під час збірки (build time), а не під час виконання (runtime).
Крок 4: Додайте все назад як «Чутливе» (Sensitive)
Коли ви повертатимете нові значення, увімкніть перемикач «Sensitive» для кожного з них. Чутливі значення використовують окремий зашифрований шлях і, згідно з бюлетенем Vercel, не були скомпрометовані під час цього інциденту. Це зміна в один клік, яка могла б врятувати більшість постраждалих клієнтів.
Крок 5: Аудит репозиторію на наявність небажаних змін
Порівняйте HEAD у вашій основній гілці з відомим стабільним комітом до 1 квітня. Зверніть увагу на:
- Скрипти у
package.json, особливоpostinstall,prepare,preinstall - Файли блокування залежностей (
package-lock.json,pnpm-lock.yaml) на наявність неочікуваних нових залежностей .github/workflows/*.ymlна наявність нових воркфлоу або дій без закріпленої версії (unpinned actions)vercel.jsonна зміни команд збірки або підозрілі перезаписиnext.config.jsна нові заголовки або перенаправлення, що вказують на невідомі домени
Якщо ви публікуєте пакети npm, також виконайте npm view <pkg> time --json і переконайтеся, що нічого не було опубліковано без вашого відома.
Крок 6: Пошук загроз у downstream-системах
Зловмисники не зупиняються на змінних середовища, вони використовують їх. Перевірте свої downstream-системи за період з 1 квітня до сьогодні:
- AWS CloudTrail: неочікувані виклики
CreateUser,AttachUserPolicy, сплески запитів S3GetObject, входи з нових IP-адрес. - Журнали аудиту бази даних: великі запити
SELECT *, експорти даних, підключення з незвичних регіонів. - Stripe / Adyen: нові API-ключі, підозрілі повернення коштів, створення клієнтів із дивних локацій.
- Провайдер аутентифікації: входи з неможливими маршрутами подорожей (impossible-travel), несанкціоновані скидання паролів, нові OAuth-додатки.
Будь-який збіг перетворює цю процедуру ротації на справжній інцидент безпеки. Ескалуйте проблему та розгляньте обов’язки щодо повідомлення (GDPR: 72 години).
Що пропускають «Vibecoders»: прихована поверхня атаки
Якщо ви прийшли в розробку через AI-інструменти, такі як Claude Code, Cursor або Copilot, ви, ймовірно, запустили свій перший додаток на Vercel раніше, ніж прочитали хоч одну документацію з безпеки. Це нормально. Але є чотири приховані пастки, які вдаряють по vibecoders сильніше, ніж по досвідчених розробників:
- Пастка
NEXT_PUBLIC_. Усе, що має префіксNEXT_PUBLIC_, включається в клієнтський JavaScript. Якщо ви додали туди API-ключ «просто для тесту», він уже був публічним до витоку. Перевірте зібрані файли:grep -rE "sk_|AKIA|eyJ" .next/static/. - Витік через Linear / Slack. Якщо ваша команда вставляла секрети в задачі Linear або потоки Slack «лише на секунду», ці секрети залишилися в логах третіх сторін. Перевірте журнал аудиту Linear і шукайте ті самі regex-шаблони.
- Припущення про безпеку
.env.localу приватному репо. Приватні репозиторії не є приватними, якщо ваш Vercel GitHub App було скомпрометовано. Кожен зафіксований файл.env.*потрапляє в зону ризику. - Preview-розгортання з продакшн-секретами. Більшість vibecoders повторно використовують змінні середовища production для preview-середовищ. Це подвоює вашу поверхню атаки. Розділіть їх.
Це нудна інфраструктурна робота, яку AI-інструменти часто ігнорують. Рішення не в тому, щоб відмовитися від AI, а в тому, щоб поєднати швидкість AI з базовим рівнем безпеки. Якщо ви все ще визначаєтеся, де саме живе ваш додаток, наші порівняння Vercel проти Netlify та огляд Railway проти Render проти Fly.io будуть гарною відправною точкою.
Як посилити свій стек, щоб наступний витік вас не знищив
Витіки на платформах — це питання «коли», а не «чи». Ось базовий рівень, який має бути налаштований у кожного продакшн-додатку до понеділка:
- За замовчуванням позначайте кожну нову змінну середовища як «Sensitive» у Vercel. Зробіть це м'язовою пам'яттю своєї команди.
- Використовуйте короткочасні облікові дані. Замініть довгострокові ключі AWS/GCP на федерацію GitHub OIDC; ваш хмарний провайдер довірятиме ідентичності CI безпосередньо, без необхідності зберігати довгостроковий секрет.
- Встановіть сканування секретів перед комітом (gitleaks, Trufflehog). Це запобігає потраплянню секретів у репозиторій із самого початку.
- Обмежте доступ вашого GitHub App конкретними репозиторіями, а не всією організацією.
- Щоквартальний огляд OAuth-додатків у Google Workspace, Microsoft 365, GitHub та Vercel. Видаляйте все, чого не впізнаєте.
- Запускайте сканування секретів як хук Claude Code, забезпечуючи детерміноване виконання перед комітом, навіть якщо AI забуває про це.
- Закріпіть версію Next.js і слідкуйте за advisory. Vercel є основним куратором Next.js, тому інциденти тут мають каскадний ефект.
- Сегментуйте секрети бекенду. Якщо ви використовуєте Supabase або Firebase, обережно ставтеся до безпеки на рівні рядків (RLS) і ключів service-role; витік службового ключа означає повну компрометацію БД.
Потрібна допомога із захистом? Ось як Techsy може допомогти
Ось чесна пропозиція: у більшості малих команд немає інженера з безпеки, і читання 60-крокового плану реагування на інциденти о 2-й ночі — не те, як хтось хоче проводити свій понеділок.
У Techsy ми проводили реагування на інциденти та посилення захисту платформ для понад 40 продакшн-додатків на Next.js та Node.js за останні два роки. Специфічно для інциденту з Vercel ми пропонуємо:
- Екстрене реагування за 72 години. Ми виконуємо ротацію Рівня 0 / Рівня 1, скануємо ваші змінні середовища за 200+ сигнатурами секретів та проводимо повний аудит логів Vercel + GitHub + хмарних сервісів. Зазвичай це займає один робочий день.
- Аудит посилення платформи. Міграція чутливих змінних, ротація облікових даних OIDC, сканування секретів перед комітом, обмеження прав GitHub App та написання інструкції (runbook), щоб ваше майбутнє «я» знало, що робити під час наступного витоку.
- Постійний DevSecOps. Щоквартальні огляди OAuth, безперервне сканування секретів та тренування з реагування на інциденти, щоб фраза «це не станеться з нами» стала твердженням, яке ви можете реально підтвердити.
Ми інженери, а не постачальник безпеки «для галочки». Якщо ви панікуєте зараз, зв’яжіться з нами для безкоштовної 30-хвилинної консультації, ми чесно скажемо, чи потрібна вам наша допомога, чи ви можете впоратися самостійно, використовуючи наведений вище план.
Часті запитання
Чи є злом Vercel підтвердженим фактом чи це просто чутки?
Підтверджено. 19 квітня 2026 року Vercel опублікував офіційний бюлетень безпеки, визнавши несанкціонований доступ через скомпрометований сторонній AI-інструмент (Context.ai) та захоплений обліковий запис Google Workspace співробітника. Було отримано доступ до змінних середовища, не позначених як «чутливі». Окремий пост на BreachForums стверджує про продаж даних за 2 мільйони доларів; ця частина не підтверджена.
Я не отримав листа від Vercel. Чи я в безпеці?
Ймовірно, але «ймовірно» — це не стратегія безпеки. Vercel заявив, що зв’язався з обмеженою підмножиною клієнтів, які зазнали підтвердженого впливу. Якщо лист не прийшов, ваш ризик нижчий, але всі нечутливі змінні середовища на платформі Vercel потрапляли в зону ураження. Все одно виконайте 10-хвилинну перевірку, описану вище.
У чому різниця між «чутливими» та звичайними змінними середовища у Vercel?
«Чутливі» змінні середовища використовують окремий зашифрований шлях читання і не можуть бути переглянуті в панелі керування після створення. Звичайні змінні середовища доступні для читання будь-кому, хто має доступ до проєкту (включаючи, у цьому інциденті, зловмисника). Виправлення безкоштовне і займає один клік для кожної змінної.
Чи потрібно мені ротувати ВСІ мої секрети, чи тільки ті, що на Vercel?
Ротуйте кожен секрет, збережений у нечутливій змінній середовища Vercel. Якщо ви використовували той самий ключ десь ще (поширена антипаттерн), ротуйте його всюди. Не забудьте про .env.local у preview-розгортаннях, CI-системах, таких як GitHub Actions, та будь-які скопійовані посилання в Linear або Slack.
Як швидко просканувати змінні середовища на наявність реальних секретів?
Виконайте vercel env pull .env.audit, а потім ggshield secret scan path .env.audit. Якщо ви не можете встановити GitGuardian, використайте однорядковий grep із Кроку 2 плану; він виявляє ключі AWS, Stripe, токени GitHub, токени npm, JWT та блоки PEM.
Чи варто мені переходити з Vercel після цього інциденту?
Не лише через цей інцидент. Реакція Vercel, публікація IoC (індикаторів компрометації), хронологія та рекомендації щодо ротації були досить прозорими. На будь-якій платформі рано чи пізно станеться витік. Важливо те, чи підготувалися ви до цього: стандарти чутливих змінних, короткочасні облікові дані, сегментовані середовища. Якщо ви все одно розглядаєте альтернативи, наші статті Vercel проти Netlify та Railway проти Render проти Fly.io розбирають компроміси.
Скільки часу у мене є на повідомлення клієнтів, якщо я постраждав?
GDPR надає вам 72 години з моменту усвідомлення інциденту, що підлягає повідомленню. У Каліфорнії (CCPA) є тригери, специфічні для типів даних. Контракти SOC 2 / ISO 27001 часто вимагають більш раннього повідомлення, ніж регулятори. Якщо у вас є платні клієнти і ви підтвердили витік їхніх даних, вважайте, що у вас є 72 години, і проконсультуйтеся з юристами перед надсиланням будь-яких повідомлень.
Чи можна атакувати додатки Next.js через це, навіть якщо я не на Vercel?
Інцидент специфічний для платформи Vercel. Сам Next.js, розміщений деінде, не受影响 механізмом цього витоку. Але якщо ви використовували ті самі шаблони змінних середовища NEXT_PUBLIC_, які випадково розкривають секрети, ці проблеми супроводжують ваш код незалежно від хостингу. У будь-якому разі перевірте результат збірки.
Яке виправлення в один клік могло б запобігти більшості збитків?
Позначення кожної змінної середовища, що містить облікові дані, як «Чутлива» (Sensitive) у Vercel з першого дня. Це прапорець у панелі керування. Під час цього інциденту чутливі змінні НЕ були доступні, лише звичайні. Це і є рішення, і воно коштує нуль доларів і приблизно п’ять хвилин на проєкт.
Як гарантувати, що моя команда більше ніколи не відправить немаркований секрет?
Три рівні захисту: (1) сканування секретів перед комітом за допомогою gitleaks, (2) перевірка в CI, яка завершується помилкою, якщо змінна середовища додається без прапорця sensitive: true через API Vercel, і (3) хук Claude Code, який запускає сканер при кожному редагуванні. Глибокий захист: будь-який із трьох методів ловить 80%, усі три разом — ~99%.
Підсумок
Витік даних Vercel у квітні 2026 року є серйозним, але його можна пережити, якщо діяти протягом наступних 60 хвилин. Заморозьте розгортання, отримайте змінні середовища, запустіть grep, ротуйте за рівнями, додайте назад як чутливі та перевірте downstream-системи. Це весь план дій.
Витіки на платформах показують, наскільки сильно ми покладаємося на налаштування за замовчуванням. Більшість команд, які постраждали тут, не зробили нічого неправильного, вони просто залишили перемикач «Sensitive» вимкненим, тому що ніхто не пояснив їм його важливість. Це справжній урок для vibecoders: код, згенерований AI, випускається швидко, але налаштування безпеки за замовчуванням не додаються автоматично.
Якщо вам потрібен свіжий погляд на ваш стек або ви не хочете виконувати цей план самотужки о 2-й ночі, заплануйте безкоштовну консультацію з командою Techsy. В іншому випадку, удачі, дійте швидко і позначайте ті змінні як чутливі.