보안 가이드
Vercel 보안 사고 (2026년 4월): 환경 변수가 노출됐을 때 개발자가 할 일
2026년 4월 Vercel 직원이 쓰던 서드파티 AI 도구를 계기로 Vercel 내부 시스템에 무단 접근이 일어났고, 일부 고객의 '민감(sensitive)'으로 표시되지 않은 환경 변수가 복호화됐습니다. Vercel의 보안 공지를 바탕으로 교체할 대상, 비밀값을 쓰기 전용으로 저장하는 방법, AI 도구와 OAuth 앱 제한 방법을 정리합니다.
대상: Vercel에 배포하는 개발자와 운영자, 운영용 비밀값(API 키, 데이터베이스 인증 정보, 서명 키)을 환경 변수에 두는 팀, Google Workspace 관리자, 그리고 같은 방식으로 동작하는 PaaS(앱 실행을 대신해 주는 플랫폼)를 쓰는 모든 사람.
이 글은 Vercel의 공식 보안 공지와 문서를 바탕으로 하며, 공격 기법이나 침해 지표(IoC) 값은 다루지 않습니다.
Vercel 사용자가 지금 할 일
Vercel의 연락을 확인하고, 연락이 없어도 계속 진행한다
Vercel은 영향받은 고객에게 직접 연락해 인증 정보의 즉시 교체를 권고했다고 밝혔습니다. 4월 22일 업데이트에서는 확대 조사로 침해된 계정이 소수 더 발견돼 그들에게도 통지했다고 덧붙였습니다. 먼저 Vercel의 연락을 받는 주소(팀 소유자, 결제 담당자)를 확인하세요.
다만 Vercel은 아래 단계를 연락 여부와 관계없이 따라야 할 모범 사례로 제시합니다. Vercel에서 연락이 없다는 것은 아무것도 하지 않을 이유가 되지 않습니다.
민감으로 표시되지 않은 환경 변수를 목록으로 만들고 비밀값부터 교체한다
Vercel은 민감으로 표시되지 않은 환경 변수(API 키, 토큰, 데이터베이스 인증 정보, 서명 키 등)를 노출됐을 가능성이 있는 것으로 보고 우선적으로 교체하라고 요청합니다.
대시보드의 환경 변수 표에는 변수마다 Config(저장 후 값을 표시할 수 있음) 또는 Secret(저장 후 값을 표시할 수 없음) 라벨이 붙어 있습니다. Config 라벨이 붙은 비밀값이 오늘의 작업 목록입니다. 프로젝트 변수뿐 아니라 팀 단위 공유 변수도 확인하세요.
새 키 추가와 재배포를 먼저 하고, 오래된 키를 무효화하는 순서로 교체한다
Vercel 문서는 중단 없이 교체하는 순서를 다음과 같이 안내합니다.
- 외부 서비스(데이터베이스나 API 제공자)에서 새 인증 정보를 발급하고, 오래된 것은 일단 남겨 둔다
- Vercel 환경 변수를 업데이트한다
- 재배포한다(팀 단위 변수라면 그 변수를 쓰는 모든 프로젝트)
- 동작을 확인한 뒤 오래된 인증 정보를 무효화한다
변수만 고치면 실행 중인 배포는 오래된 값을 계속 쓰며, 유출된 값을 쓸모없게 만드는 것은 4단계뿐입니다.
새 값은 Secret으로 저장한다
새로 만든 값은 Secret(쓰기 전용)으로 저장하세요. Vercel은 공지에서 민감 기능이 앞으로 비밀값이 읽히는 것을 막아 준다고 설명합니다.
2026년 9월 30일 기준 문서에 따르면 Secret의 값은 저장 후 숨겨지고 새 값을 넣는 방식으로 바꾸며, 예전에는 Production과 Preview에만 쓸 수 있던 Secret을 이제 Development에서도 쓸 수 있습니다. 무엇을 어디에 둘지는 이 글 뒤쪽의 비교를 참고하세요.
프로젝트를 삭제하기 전에 교체한다
Vercel은 프로젝트나 계정을 삭제하는 것만으로는 위험을 없앨 수 없다고 분명히 밝히고 있습니다. 유출된 비밀값은 그 값으로 열리는 데이터베이스나 API에서 여전히 유효하기 때문입니다. 오래된 프로젝트를 정리하거나 Vercel을 떠나는 경우에도, 먼저 제공자 쪽에서 키를 무효화한 뒤 삭제하세요.
활동 로그와 최근 배포를 확인한다
Vercel은 계정과 환경의 활동 로그를 (대시보드나 CLI에서) 검토해 의심스러운 활동이 없는지 보고, 최근 배포에 예상치 못한 것이나 의심스러워 보이는 것이 없는지 조사하라고 권고합니다. 문제가 되는 배포는 삭제하라고 안내합니다. 같은 로그로 누군가 환경 변수 값을 열람한 흔적이 없는지도 확인하세요.
Deployment Protection을 Standard 이상으로 설정하고 토큰을 교체한다
Vercel은 Deployment Protection을 최소 Standard로 설정하고, Deployment Protection 토큰을 쓰고 있다면 교체하라고 권고합니다. Vercel 문서는 Standard를 대부분의 프로젝트에 권장하는 옵션으로 설명하며, 미리보기 URL과 배포별 URL을 보호하고 현재 운영 URL은 공개 상태로 둡니다.
Vercel 계정에 다중 인증을 켠다
Vercel은 인증 앱이나 패스키를 이용한 다중 인증을 권고합니다. 이 방식이 SMS보다 나은 이유는 다중 인증 선택 가이드에서 다룹니다.
Google Workspace 관리자: 공지에 적힌 OAuth 앱을 검색한다
Vercel은 해당 AI 도구의 Google Workspace OAuth 앱 식별자를 공개하고, Google Workspace 관리자와 Google 계정 소유자에게 그 앱의 사용 여부를 즉시 확인하라고 권고합니다.
Vercel에 따르면 그 OAuth 앱은 더 광범위한 침해의 대상이었고 여러 조직에 걸쳐 수백 명의 사용자가 영향을 받았을 가능성이 있으므로, Vercel을 쓰지 않는 조직도 대상일 수 있습니다. 식별자는 아래 출처에 링크한 Vercel의 공지에서 확인하세요.
직원이 연결하는 AI 도구와 OAuth 앱을 제한한다
Vercel에 따르면 공격자는 서드파티 AI 도구에 대한 접근을 이용해 직원의 Google Workspace 계정을 탈취했고, 거기서 그 직원의 Vercel 계정으로 이동했습니다.
직원이 편리한 AI 도구를 "Google로 로그인"이나 "Drive 접근 허용"으로 회사 계정에 연결하는 일은 어느 조직에서나 매일 일어납니다. 아래는 Google Workspace 관리자가 오늘 바꿀 수 있는, 그 위험을 줄이는 설정입니다.
회사 계정에 연결된 서드파티 앱을 목록으로 만든다
Google 관리자 도움말 "Google Workspace 데이터에 액세스하는 앱 제어"(Control which apps access Google Workspace data)에 따르면, 관리 콘솔에서 어떤 앱이 조직 데이터에 접근했는지, 어떤 사용자가 승인했는지, 각 앱이 요청한 OAuth 범위가 무엇인지 볼 수 있습니다.
목록을 뽑아 누구도 설명할 수 없는 앱과 Drive나 Gmail 전체를 읽을 수 있는 범위를 가진 앱을 표시하세요.
쓰지 않는 앱은 차단하고, 남길 앱은 범위를 좁힌다
같은 페이지에 따르면 앱마다 신뢰함(Trusted), 제한됨(Limited), 특정 Google 데이터(Specific Google data), 차단됨(Blocked)으로 설정할 수 있습니다. 남기기로 한 앱은 필요한 데이터만 쓰도록 제한하고, 나머지는 차단하세요.
설정되지 않은 앱을 직원이 마음대로 연결하지 못하게 한다
관리자가 설정하지 않은 서드파티 앱을 사용자가 승인할 수 있는지를 조직 정책으로 정할 수 있습니다. 기본 로그인 정보만 요청하는 앱만 허용하면 새 AI 도구마다 관리자 검토를 거치게 됩니다.
Gmail과 Drive에서는 메일 보내기나 파일 삭제 같은 위험도 높은 범위를 개별로 제한할 수도 있습니다.
운영 환경 관리자 계정과 AI 도구를 연결하는 계정을 분리한다
이것은 이 사이트의 제안입니다. 이번 사고에서는 AI 도구가 연결된 Google 계정이 Vercel 계정으로 들어가는 경로가 됐습니다. 운영 환경이나 호스팅의 관리자 권한을 가진 사람은 그곳에 로그인하는 계정에 시험 삼아 쓰는 AI 도구를 연결하지 않는 것을 검토하세요. 꼭 연결해야 한다면 업무 데이터 접근을 좁힌 별도 계정을 쓰세요.
무슨 일이 있었나 (Vercel의 보안 공지 기준)
아래는 모두 Vercel의 보안 공지 "Vercel April 2026 security incident"에 적힌 내용입니다. Vercel은 공지를 여러 차례 업데이트했으며, 4월 24일 이후로는 중요한 업데이트가 있을 때만 갱신하는 방식으로 바꿨습니다.
2026년 4월 19일
Vercel이 일부 내부 시스템에 대한 무단 접근을 공개. 사고 대응 전문가를 투입하고 법 집행 기관에 알렸다고 밝히고, 다른 조직이 자기 환경을 확인할 수 있도록 OAuth 앱 식별자를 공개.4월 19일 (이후 업데이트)
공격의 시작점(침해된 서드파티 AI 도구)을 공개하고 권고 사항을 추가.4월 20일
침해된 인증 정보의 정의를 명확히 하고 권고 사항을 추가. 같은 날 자사 npm 패키지가 침해되지 않았음을 검증했다고 밝히고, 다중 인증 안내를 추가하고, 제품 개선을 배포.4월 22일
확대 조사 결과 공개: 이번 사고로 침해된 계정이 소수 더 있었고 이들에게 통지했으며, 별도로 이번 사고와 무관해 보이는 침해 징후가 있는 소수의 고객 계정에는 개별 시정 조치를 취함.4월 23일
조사 결과를 추가로 명확히 함.4월 24일
업데이트 없음. 이후로는 중요한 업데이트가 있으면 영향받은 고객에게 알리고 공지를 갱신하겠다고 밝힘.
- 시작점
- Vercel 직원이 쓰던 서드파티 AI 도구의 침해. 그 도구의 Google Workspace OAuth 앱은 여러 조직에 걸친 더 광범위한 침해의 대상이었음
- 경로
- 직원의 Google Workspace 계정 탈취 → 직원의 Vercel 계정 → Vercel 환경 → 시스템을 이동하며 환경 변수를 열거·복호화
- 빠져나간 것
- 일부 제한된 고객의 민감으로 표시되지 않은 환경 변수(평문으로 복호화되는 것)
- 추가 조사 결과
- 이번 사고로 침해된 추가 계정이 소수 있었고 통지 완료. 별도로, 이번 사고와 무관해 보이고 Vercel 시스템에서 비롯된 것으로 보이지 않는 침해 징후가 있는 소수의 계정
- 영향 없음
- Vercel이 배포한 npm 패키지(GitHub, Microsoft, npm, 보안 업체와 함께 확인)
- Vercel의 평가
- 작업 속도와 Vercel 제품 API에 대한 깊은 이해를 근거로, 공격자를 매우 정교하다고 평가. 사고 대응 업체, 업계 동료, 법 집행 기관과 협력 중
- 제품 변경
- 환경 변수 관리 개선(더 강한 기본값, 안전장치 강화, 제품 내 안내), 팀 전체의 환경 변수 관리·보안 개요 화면, 더 쓰기 쉬운 활동 로그
읽는 법: 수치는 공개되지 않았고, 도구 이름은 여기서 적지 않는다
Vercel은 영향받은 고객을 "일부 제한된(limited subset)", "소수(a small number)"라고만 표현하며 수치를 공개하지 않았습니다. 이 사이트는 조직이 공개하지 않은 숫자를 싣지 않습니다.
Vercel의 공지에는 AI 도구 제공 업체의 이름이 나오지만, 이 사이트의 방침에 따라 사고를 공개한 조직만 실명으로 적고 다른 당사자는 역할("서드파티 AI 도구")로 적습니다. 내 조직을 확인할 때는 이름이 아니라 Vercel 공지에 있는 OAuth 앱 식별자를 쓰세요.
어느 단계에서 피해를 막을 수 있었나
1. 서드파티 AI 도구
그 OAuth 앱이 광범위하게 침해됨
↓→
도움이 되는 설정
관리자가 연결할 앱과 범위를 제한
2. 직원의 Google 계정
탈취돼 Vercel에 들어가는 데 쓰임
↓→
도움이 되는 설정
운영 관리자 계정에 시험용 도구를 연결하지 않음
3. Vercel 환경
환경 변수가 열거됨
↓→
고객이 할 수 있는 것
이 단계는 고객이 막을 수 없음. 값의 유출 여부는 4단계의 분류에 달림
4a. 읽기 가능 (Config)
복호화돼 평문으로 빠져나감
4b. 쓰기 전용 (Secret)
Vercel이 침해됐다고 밝힌 것은 4a뿐
Config에 둬도 되는 것 (값을 표시할 수 있음)
- 공개돼도 문제없는 값: 공개 URL, 기능 플래그, 로그 레벨
- 어차피 브라우저로 보내지는 값: 예를 들어
NEXT_PUBLIC_으로 시작하는 것 - 다시 읽어야 하는 설정: 리전 이름, 버킷 이름 등 그것만으로는 아무것도 열 수 없는 것
Secret에 둬야 하는 것 (값을 표시할 수 없음)
- API 키와 액세스 토큰: 결제, 메일 발송, AI API
- 데이터베이스 연결 문자열과 비밀번호
- 서명·암호화 키: 세션·JWT 서명, 웹훅 검증용 비밀값
- 외부 서비스의 관리자 인증 정보: 클라우드 액세스 키 등
이 사이트의 시각: 나중에 표시할 수 있는 값은 침입자도 읽을 수 있다
환경 변수를 읽기 가능한 상태로 두는 이유는 거의 항상 나중에 값을 확인하기 위해서입니다. 이번 사고는 같은 분류가 플랫폼 내부에 들어온 사람에게도 읽힌다는 것을 보여 줬습니다. Vercel이 침해됐다고 밝힌 변수가 바로 그 분류입니다.
판단 기준은 하나면 됩니다. 이 화면에서 이 값을 다시 읽을 일이 있는가? 없다면 Secret으로 하세요. 찾아보고 싶은 비밀값은 실제로 보관하는 곳(비밀번호 관리자나 제공자의 콘솔)에 두어야 하며, 배포 플랫폼에 읽기 가능한 사본으로 둘 곳이 아닙니다.
Vercel 문서에는 Production의 Secret이 Preview·Development의 것과 달라야 한다고 강제하는 팀 정책 Separate Production Secret Values도 있습니다. 미리보기용 키가 유출돼도 운영 환경에서는 쓸 수 없게 하는 설정이 하나 더 생기는 셈입니다.
같은 논리는 다른 PaaS와 CI에도 적용됩니다. 비밀값을 읽기 가능한 형태로 보관하는 서비스는 모두, 내가 실제로 관리하는 곳과 별개의 두 번째 보관 장소가 됩니다. 비밀값을 어디에 두고 어떻게 나눌지의 기본은 .env 파일과 API 키는 무엇이 위험한가에 정리했습니다.
개발자 도구에서 시작된 연쇄 침해는 2026년 5월 TanStack, Nx Console, GitHub에서도 일어났습니다. 그쪽의 시작점은 코드 배포 경로(npm 패키지와 에디터 확장)였으며, 탈취된 키 하나로는 혼자 배포할 수 없게 하는 구조에 대한 교훈은 TanStack, Nx Console, GitHub 연쇄 이후 개발자가 확인할 것에 있습니다.
Vercel 사고의 시작점은 코드가 아니라 OAuth로 연결된 SaaS의 권한이었습니다. CI에서 실행되는 도구 자체가 시작점이 된 사례는 Trivy 공급망 침해를 참고하세요.
출처 (공개 기록)
이 글의 사실관계는 아래 공개 자료를 따릅니다. 공격 기법, IoC 값, 공격자를 특정하는 정보는 다루지 않았습니다.
- Vercel, "Vercel April 2026 security incident"(보안 공지, 2026년 4월 19일 공개, 4월 24일 업데이트) — vercel.com
- Vercel Docs, "Sensitive environment variables"(Config와 Secret 유형, 2026년 8월 28일 개정) — vercel.com
- Vercel Docs, "Rotating environment variables"(중단 없는 교체) — vercel.com
- Vercel Docs, "Deployment Protection"(Standard Protection) — vercel.com
- Google Workspace 관리자 도움말, "Control which apps access Google Workspace data" — knowledge.workspace.google.com
업데이트 기록
2026-09-30: 첫 공개. Vercel의 보안 공지(4월 24일 개정)와 2026년 9월 30일 기준 Vercel 공식 문서를 바탕으로 작성. Vercel이 공지를 업데이트하면 이 글도 업데이트하겠습니다.
다음에 읽을 글
- 비밀값을 둘 곳: .env 파일과 API 키는 무엇이 위험한가 / .env 파일이란
- 개발자 도구에서 시작된 다른 사고: TanStack, Nx Console, GitHub로 이어진 연쇄 / Trivy 침해 후 CI 사용자가 할 일
- 유효한 인증 정보로 일어난 침해: 2026년의 침해는 유효한 인증 정보로 들어왔다(영어)
- 계정 보호: 다중 인증 선택 가이드
- 저장소에 비밀값을 남기지 않기: gitleaks로 커밋 전 비밀값 검사
- 2026년의 다른 사고: 2026년 유출·사이버 공격 목록(영어)
FAQ
QVercel 사고로 무엇이 노출됐나요?
Vercel의 보안 공지에 따르면 일부 제한된 고객의 경우, Vercel에 저장된 환경 변수 중 '민감(sensitive)'으로 표시되지 않은 것(평문으로 복호화되는 것)이 침해됐습니다. Vercel은 그 값들(API 키, 토큰, 데이터베이스 인증 정보, 서명 키 등)을 노출됐을 가능성이 있는 것으로 보고 우선적으로 교체하라고 요청합니다.
Q내가 영향을 받았는지 어떻게 알 수 있나요?
Vercel은 영향받은 일부 고객에게 연락해 인증 정보의 즉시 교체를 권고했으며, 확대 조사에서 발견된 소수의 추가 계정에도 통지했다고 밝혔습니다. 다만 Vercel은 민감으로 표시되지 않은 환경 변수의 검토와 교체, 활동 로그와 최근 배포 확인을 모두가 따라야 할 모범 사례로 제시합니다. 읽기 가능한 분류에 비밀값을 보관하고 있었다면, 연락을 받지 않았더라도 교체하는 것이 안전합니다.
Q민감(Secret)으로 표시한 환경 변수는 안전한가요?
Vercel의 공지가 침해됐다고 밝힌 것은 민감으로 표시되지 않은 환경 변수입니다. Vercel은 민감 기능이 앞으로 비밀값이 읽히는 것을 막아 준다고 설명합니다. 2026년 9월 30일 기준 Vercel 문서는 환경 변수를 'Config'(저장 후 읽기 가능)와 'Secret'(저장 후 쓰기 전용)으로 나누며, 기존의 민감 변수는 Secret으로 취급됩니다.
Q프로젝트나 계정을 삭제하면 되나요?
아닙니다. Vercel은 침해된 비밀값으로 여전히 운영 시스템에 접근할 수 있을 수 있으므로, Vercel 프로젝트나 계정을 삭제하는 것만으로는 위험을 없앨 수 없다고 밝히고 있습니다. 무엇이든 삭제하기 전에 먼저 교체하라고 요청합니다.
Q침입은 어디서 시작됐나요?
Vercel에 따르면 Vercel 직원이 쓰던 서드파티 AI 도구의 침해에서 시작됐습니다. 그 도구의 Google Workspace OAuth 앱은 더 광범위한 침해의 대상이었으며, 여러 조직에 걸쳐 수백 명의 사용자가 영향을 받았을 가능성이 있습니다. Vercel은 Google Workspace 관리자와 Google 계정 소유자에게 공지에 공개된 OAuth 앱 식별자의 사용 여부를 즉시 확인하라고 권고합니다.
QVercel의 npm 패키지(Next.js 등)는 안전한가요?
Vercel은 GitHub, Microsoft, npm, 보안 업체와 협력해 자사가 배포한 npm 패키지가 침해되지 않았으며 변조의 증거가 없음을 확인했다고 밝혔습니다.