Vercel 2026년 4월 보안 사고 대응 가이드
최종 업데이트: 2026년 4월 20일 오후 12:07 AEST/브리즈번 - (v2 — Vercel CEO 4월 20일 업데이트 반영)
중요: 이 문서는 법적 또는 공식적인 조언이 아닙니다. 침해를 당했다고 생각되면 사고 대응 파트너에게 연락하시기 바랍니다. 이 정보는 OpenSourceMalware 팀이 선의로 제공하는 것입니다. 사고 대응 회사에 대한 소개가 필요하시면 저희가 함께 일해본 몇 곳을 추천해 드릴 수 있습니다.
무슨 일이 일어났나?
Vercel은 2026년 4월 19일, 공격자가 내부 시스템에 무단 접근했다고 공개했습니다. 공식 발표는 다음과 같습니다:

4월 20일, Vercel CEO Guillermo Rauch는 초기 침입 경로를 확인하는 상세 업데이트를 발표했습니다: Vercel 직원이 Context.ai라는 AI 플랫폼을 사용했고, 이 플랫폼 자체가 침해되었습니다. 공격자는 그곳에서 직원의 Google Workspace 계정으로 이동하여 Vercel 환경으로 확대되었습니다. 환경 변수는 저장 시 암호화되어 있지만, 공격자는 "민감"으로 표시되지 않은 변수를 열거할 수 있었습니다. Vercel은 공격자를 고도로 정교하고 AI가 크게 가속화된 것으로 특징지었습니다. Google Mandiant가 대응에 참여하고 있습니다. Vercel은 Next.js, Turbopack 및 오픈 소스 프로젝트는 안전하다고 밝혔습니다.
다음은 해당 보안 권고에서 중요한 침해 지표 섹션입니다:

세부 사항이 거의 없습니다. 그 하나뿐인 Google IOC를 어디서 확인해야 하는지조차 알려주지 않습니다. Vercel 고객으로서 저는 이 수준의 세부 정보에 상당히 실망했습니다. 무엇을 찾아야 하는지 이해할 수 있도록 도와주세요! 침해를 당했는지 여부를 알기 위해 어디로 가야 하는지 알려주세요!
Vercel의 세부 정보 부족으로 인해 이 문서를 만들었습니다
Vercel에서 워크로드를 실행 중이라면, 반증이 있을 때까지 다음을 가정하십시오:
- 노출 기간 내에 Vercel 프로젝트에서 "민감"으로 표시되지 않은 환경 변수는 읽을 수 있었을 수 있습니다.
- 대시보드 또는
vercel env CLI를 통해 Vercel에 푸시된 자격 증명 중 교체되지 않은 것은 지속적인 위험입니다.
- Vercel ↔ GitHub 및 Vercel ↔ Linear 통합 경로 내의 토큰에 접근할 수 있었을 수 있습니다.
- "영향을 받았습니다 / 받지 않았습니다"라는 깔끔한 신호를 빨리 받지 못할 것입니다. 먼저 교체한 후 조사하십시오.
알려진 사실 vs. 주장된 사실: 브리핑에서 이를 분리하십시오
이 구분은 경영진 커뮤니케이션과 과잉 대응(또는 과소 대응)을 피하기 위해 중요합니다.
Vercel이 확인한 사항 (게시판 + 4월 20일 CEO 업데이트)
- 특정 Vercel 내부 시스템에 대한 무단 접근.
- 초기 침입 경로: Context.ai — Vercel 직원이 사용한 AI 플랫폼이 침해되었습니다. 공격자는 이 발판을 이용하여 직원의 Vercel Google Workspace 계정을 손상시킨 후 Vercel 환경으로 확대되었습니다.
- 고객 환경 변수는 저장 시 암호화됩니다. "비민감"으로 지정된 변수는 공격자가 내부에 진입한 후에도 열거할 수 있었습니다.
- 고객 영향은 "상당히 제한적"이라고 특징지어졌습니다. Vercel은 우려되는 고객에게 직접 연락했습니다.
- Next.js, Turbopack 및 Vercel의 오픈 소스 프로젝트는 분석되었으며 안전한 것으로 믿어집니다 (즉, Vercel의 4월 20일 성명 기준으로 해당 프로젝트의 릴리스 경로에 악성 아티팩트가 없음).
- 공격자는 고도로 정교하고 AI가 크게 가속화된 것으로 특징지어졌습니다.
- 대응 파트너: Google Mandiant가 적극적으로 참여하고 있습니다. 외부 IR 회사, 업계 동료 및 법 집행 기관도 관련되어 있습니다.
- Vercel은 전체 범위를 이해하기 위해 Context.ai에 연락했습니다.
- Vercel은 UI 개선 사항을 출시했습니다: 환경 변수 개요 페이지, 향상된 민감 환경 변수 관리.
제3자 및 공격자가 보고/주장한 사항 (Vercel이 확인하지 않음)
- Linear 및 GitHub 통합이 불균형적으로 영향을 받음 (커뮤니티 보고, 특히 X의 Theo Browne).
- BreachForums에 판매 목록으로 게시된 데이터: 내부 DB, 직원 계정, GitHub 토큰, npm 토큰, 소스 코드 조각, 활동 타임스탬프 — 약 $2M에 제안.
- 행위자는 자신을 ShinyHunters라고 밝힘; 역사적으로 그 별명과 관련된 다른 행위자들은 관여를 부인함.
- Vercel이 고객과 직접 확인한 것 이상의 특정 고객 데이터 클래스 유출.
확인되지 않은 보고는 자체 분류를 위해 그럴듯하고 실행 가능한 것으로 취급하되, Vercel이 확인하거나 독립적인 증거를 확보할 때까지 고객 또는 규제 기관 커뮤니케이션에서 사실로 인용하지 마십시오. "열거 가능한 환경 변수"(Rauch 확인)와 "BreachForums에서 판매 중인 npm + GitHub 토큰"(공격자 주장) 사이의 격차가 공급망 위험에 가장 중요한 격차입니다. 교체 목적으로는 최악을 가정하고, 커뮤니케이션을 위해서는 확인된 버전을 고수하십시오.
범위 지정: 이 플레이북을 실행해야 하는 사람
최고 시급 — Vercel로부터 직접 연락을 받았거나, 다음 중 하나라도 해당되는 경우:
- Vercel ↔ GitHub 통합이 있고 리포지토리 쓰기 범위가 있는 경우.
- Vercel ↔ Linear 통합이 있거나 있었던 경우.
- 암호화되지 않은 비밀(민감으로 표시되지 않음)을 Vercel 환경 변수로 저장하는 경우.
- Vercel 인프라를 통해 또는 통해 실행되는 CI/CD에서 npm 패키지를 게시하는 경우.
표준 시급 — 마케팅 사이트라도 활성 Vercel 프로젝트가 있는 모든 팀. 마케팅 사이트에는 종종 더 민감한 시스템으로 피벗할 수 있는 CMS API 키, 분석 토큰 및 양식 처리 웹훅이 포함됩니다.
그래도 수행 — 사고 이전에 프로젝트가 삭제된 경우에도 마찬가지입니다. 중요한 것은 비밀이 읽을 수 있는 형태로 Vercel에 존재했는지 여부이지, 프로젝트가 여전히 있는지 여부가 아닙니다.
병렬 질문: 귀사 조직이 Context.ai에 직접 노출되었습니까?
4월 20일 업데이트는 Context.ai를 침해된 업스트림 공급업체로 지목합니다. 귀사 조직의 누군가가 Vercel 사고와 별개로 Context.ai를 독립적으로 사용하는 경우 — 회의 인텔리전스, 지식 관리, CRM 강화 또는 기타 워크플로우 — Vercel 사고와는 별개의 직접적인 노출 기간이 있을 수 있습니다.
다음 확인을 병렬로 수행하십시오:
- SSO / IdP(Okta, Entra, Google Workspace)에서 Context.ai 또는 Context 관련 OAuth 앱에 인증한 사용자가 있는지 쿼리합니다.
- Google Workspace 관리 콘솔 → 보안 → OAuth 앱 액세스 로그에서
context.ai 또는 관련 앱 ID를 검색합니다.
- 기업 비용 / SaaS 지출 관리 도구에서 Context.ai 구독을 확인합니다.
- 부여된 OAuth 범위를 검토합니다 — Gmail 읽기, 캘린더, 드라이브 및 Workspace 디렉터리 범위는 영향이 큽니다.
환경에서 Context.ai 사용을 발견한 경우 OAuth 권한을 취소하고, Context.ai 워크플로우를 통과한 모든 자격 증명을 교체하며, Vercel이 직원 계정에서 본 것과 동일한 침해 지표에 대해 영향을 받은 사용자의 Google Workspace 계정을 모니터링합니다. 자체 사고 세부 정보를 위해 Context.ai에 직접 연락하십시오. Vercel은 다른 영향을 받은 조직을 돕기 위해 Context와 조정 중이라고 공개적으로 밝혔습니다.
0단계: 피해 확산 중지 (처음 60분)
두 가지 목표: 새로운 피해 방지, 증거 보존.
-
배포 중단. 프로덕션 브랜치에서 자동 배포를 일시 중지합니다. 공격자가 수정한 빌드가 배포되는 것을 방지하고 감사 로그가 변동하는 것을 중지하려는 것입니다.
-
Vercel의 GitHub App 비활성화. Vercel GitHub App이 설치되어 있는 경우입니다. GitHub에 새 코드를 푸시할 때 Vercel에 자동 배포를 하는 경우에 해당합니다. 설치된 GitHub 앱은 https://github.com/organizations/<GitHub-Organization>/settings/installations에서 찾을 수 있습니다.

-
GitHub App이 가진 액세스 권한 식별. 위의 구성 버튼을 클릭하고 Vercel 앱이 액세스 권한이 있는 리포지토리를 감사합니다. 이는 지금 집중해야 할 대상을 알려줍니다. GitHub → 조직 → 설정 → GitHub Apps → Vercel로 이동합니다. 다음을 검토하십시오:
- 리포지토리 액세스 (모든 리포 vs. 선택된 리포)
- 부여된 권한
- 설치 날짜 및 설치한 사람

- Vercel 감사 로그 스냅샷을 팀에 대해 생성합니다. 즉시 내보내거나 화면 캡처합니다. 보존 기간이 제한되어 있고 UI가 모든 것을 노출하지는 않습니다. 로그를 오염시킬 변경을 시작하기 전에 수행하십시오. https://vercel.com/activity-log에서 찾을 수 있습니다.
- "Observability Plus" 활성화. 이는 Vercel의 추가 유료 기능이며, 활성화하고 비용을 지불하라고 제안해야 한다는 점이 안타깝지만, 사고 대응 중에는 최선의 방법이라고 생각합니다. 물론 기분 좋은 일은 아니지만, 기본값보다 훨씬 긴 감사 로그를 저장하기 때문에 활성화했습니다. 기본값은 매우 짧습니다.
- 노출 범위 인벤토리 작성. 제어하는 모든 Vercel 팀/계정에 대해 다음을 나열합니다:
- 프로젝트 및 연결된 Git 리포
- 연결된 통합 (GitHub App, Linear, Slack, 마켓플레이스 통합)
- 팀 구성원 및 해당 역할
- 팀에서 발급한 개인 액세스 토큰 / API 토큰
- 배포 훅
- GitHub 조직 감사 로그 검토. 노출 기간(보수적으로 2026년 4월 1일~15일부터 현재까지)을 찾습니다. 다음을 필터링합니다:
repo.add_member, repo.add_topic
org.invite_member, org.add_member
integration_installation, integration_installation.repositories_added
protected_branch.destroy, protected_branch.update
git.ref.force_push 또는 푸시 이벤트의 강제 푸시 플래그
아직 발표를 하거나 비밀을 교체하지 마십시오. 먼저 스냅샷이 필요합니다.
1단계: 침해 지표(IOC) 확인
Vercel 발표의 세부 정보는 상당히 부족합니다:

최선의 추측으로는 Google Workspace 관리 콘솔로 이동하여 이 googleusercontent.com 앱을 찾으라는 의미입니다. 콘솔에서 찾는 방법은 다음과 같습니다:
-
Workspace 관리 콘솔에서 보안 > 액세스 및 데이터 제어 > API 제어로 이동하여 액세스된 앱 및 보류 중인 앱을 찾습니다.

-
그런 다음 다른 목록에서 IOC로 보이는 oauth 앱을 찾습니다: 110671459871-30f1spbu0hptbs60cb4vsmv79i7bbvqj.apps.googleusercontent.com

-
찾으면 즉시 제거하고 사고 대응 파트너에게 문의하십시오. 이는 제 역량을 벗어납니다.
2단계: 자격 증명 교체
교체는 단일 최고 가치 조치입니다. 우선 순위에 따라 수행하여 중단되더라도 가장 위험한 부분이 처리되도록 하십시오.
교체해야 할 항목은 GitHub 및 Vercel 환경에 노출된 내용에 따라 다릅니다. GitHub PAT 등부터 시작하여 이 가이드를 사용하여 외부로 작업하십시오.
우선 순위 계층
계층 0 — 오늘, 다른 모든 것보다 먼저 교체:
계층 1 — 오늘, 앱에 노출된 내용에 따라 교체:
- 결제 처리기 비밀 키 (Stripe, Adyen, Braintree 등)
- 인증 서명 비밀 (NextAuth
AUTH_SECRET / NEXTAUTH_SECRET, JWT 서명 키, 세션 쿠키 키, CSRF 토큰)
- 쓰기 액세스 권한이 있는 데이터베이스 연결 문자열 (
DATABASE_URL, 직접 Postgres/MySQL URL, Mongo URI, 인증이 있는 Redis)
- 클라우드 제공업체 루트 또는 광범위한 범위 키 (AWS IAM 액세스 키, GCP 서비스 계정 JSON, Azure 클라이언트 비밀)
- 웹훅 서명 비밀 (Stripe, GitHub, Slack — 교체하고 발신자 구성 업데이트)
계층 2 — 이번 주에 교체:
- 타사 SaaS API 키 (분석, 이메일 제공업체, SMS, CRM)
- 소유한 앱의 OAuth 클라이언트 비밀
- SMTP 자격 증명
- 애플리케이션 계층 암호화를 위한 암호화 키 (드롭인 교체가 아닌 키 버전 범프로 교체)
- CDN 제거 키, 이미지 서비스 키
- 기능 플래그 제공업체 키
계층 3 — 편할 때 교체, 그래도 교체:
- 읽기 전용 분석 토큰
- Sentry / 로깅 DSN (참고: DSN 교체는 약간의 이벤트 손실을 감수할 수 있다면 중요하지 않음)
- 공개 키 및 익명 키 (여전히 교체 — 프로젝트 존재를 드러내고 때로는 열거를 가능하게 할 수 있음)
작업 순서 주의사항
- 세션 서명 키는 교체 시 모든 활성 세션을 무효화합니다. 강제 로그아웃 이벤트를 계획하고 커뮤니케이션하십시오.
- 웹훅 비밀은 양쪽에서 교체해야 합니다. 먼저 발신자(Stripe, GitHub)를 업데이트하여 새 비밀 아래에서 보내도록 한 다음, 수신자가 이를 확인하도록 업데이트합니다. 또는 임시로 둘 다 지원합니다.
- 데이터베이스 자격 증명 — 먼저 새 사용자를 생성한 다음 배포하고 이전 사용자를 해지합니다. 드롭인 교체를 하면 중단이 발생합니다.
- AWS 키 — IAM 사용자의 액세스 키를 교체하는 경우 두 번째 키를 생성하고 배포를 롤링한 다음 첫 번째 키를 삭제합니다.
비활성화하고 기대하지 마십시오.
- 환경 변수 변경 후 재배포. Vercel 환경 변수는 많은 프레임워크 구성에서 빌드 시에 포함됩니다. 환경 변수 변경 없이 새 배포만으로는 완전히 적용되지 않습니다.
- CI 비밀도 확인하십시오. 비밀이 GitHub Actions, CircleCI 등에 미러링된 경우 미러도 교체하십시오.
흔히 놓치는 것들을 잊지 마십시오
- 개인 리포지토리에 커밋된
.env.local (여전히 문제 — 소스 코드가 유출되었을 수 있음)
- 프로덕션뿐만 아니라 Vercel 미리보기/개발 환경의 비밀
- Vercel "팀 수준" 공유 환경 변수로 저장된 비밀
- 배포 훅 (교체하십시오; 완전한 배포 트리거입니다)
- 계정에서 발급한 Vercel 개인 액세스 토큰
- Vercel GitHub App 설치를 승인한 GitHub 개인 액세스 토큰 (앱 자체와 별개)
3단계: 리포지토리 수준 사냥
Vercel에 연결된 리포지토리의 경우:
main/master HEAD를 사고 기간 이전에 양호한 것으로 알려진 태그/커밋과 비교합니다.
- 다음에 대한 변경 사항을 찾습니다:
package.json → scripts (특히 postinstall, prepare, preinstall)
package-lock.json / pnpm-lock.yaml / yarn.lock — 예상치 못한 종속성 추가 또는 버전 범프
.github/workflows/*.yml — 새로운 워크플로우, 새로운 run: 단계, 고정되지 않은 SHA를 사용하는 새로운 uses:
vercel.json — 빌드 명령 변경, 트래픽을 유출할 수 있는 새로운 재작성/리디렉션
이러한 리포지토리에서 npm 패키지를 게시하는 경우
이것이 Vercel 초기 침해가 공급망 사건이 될 수 있는 지점입니다. Vercel을 사용하여 게시하지 않더라도 공격자가 GitHub 토큰을 획득하고 게시 워크플로우가 해당 토큰을 사용하는 경우:
npm 게시 기록 확인: npm view <pkg> time --json에서 예상치 못한 버전을 찾습니다.
- 각 최근 버전의 tarball을 해당 버전이 제공된 git 태그와 비교합니다. 공격자는 레지스트리에 있는 것과 일치하지 않는 태그에서 게시합니다.
- 워크플로우에서
NPM_TOKEN 사용을 감사합니다. 토큰을 교체하고 누가 액세스 권한이 있었는지 검토합니다.
- 패키지에 새 유지 관리자가 추가되었는지 확인:
npm owner ls <pkg>.
- 중요한 것을 유지 관리하는 경우 tarball에서 사후 설치 스크립트 실행을 확인합니다. 압축을 풀고 검사합니다.
승인되지 않은 게시 증거를 찾으면 npm 보안([email protected])에 보고하고 OSV.dev에 제출하는 것을 고려하십시오. 잘못된 버전을 사용 중단(deprecate) 처리하고 게시 취소(unpublish)하지 마십시오. 게시 취소는 시간 제한이 있으며 다운스트림 소비자를 손상시킵니다.
Vercel 소유 패키지에 대한 참고 사항: Vercel의 4월 20일 업데이트는 Next.js, Turbopack 및 해당 오픈 소스 프로젝트가 분석되었으며 안전한 것으로 믿어진다고 명시합니다. 이는 Vercel이 자체 릴리스 경로에 대해 주장하는 것입니다. 위와 같이 귀하의 패키지를 계속 감사해야 합니다. Next.js 또는 Turbopack을 사용하는 경우 현재 정보에 따라 예방 조치로 사고 전 버전에 고정할 필요는 없지만, Vercel 게시판에서 해당 태세의 변경 사항을 모니터링하십시오.
4단계: Linear 통합 검토
팀에서 Vercel ↔ Linear 통합을 사용하는 경우:
- 노출 기간 동안 Linear 감사 로그(Workspace 설정 → 보안 → 감사 로그)를 검토합니다.
- 다음을 찾습니다:
- 새 API 키 발급
- 새 통합 추가
- 서비스 계정이 게시한 댓글
- 웹훅 대상 변경
- 멤버 초대
- 문제 데이터 보기/내보내기 (통합은 문제에 대한 읽기 액세스 권한이 있으며, 여기에는 고객 이름, 버그 세부 정보 및 때로는 티켓에 붙여넣은 자격 증명이 포함됨)
- 특정 우려 사항: Linear 문제에는 개발자 디버깅에서 붙여넣은 비밀이 자주 포함됩니다. Linear Workspace에서 일반적인 누출 패턴(
AKIA, sk_live_, ghp_, ghs_, npm_, eyJ, ----BEGIN)을 grep하십시오. 발견된 모든 것은 교체해야 합니다.
5단계: 다운스트림 시스템 로그 검토
자격 증명 교체는 대부분의 경우 공격자의 지속성을 무효화하지만, 이미 액세스 권한을 사용했을 수 있습니다. 교체된 비밀의 소비자에서 노출 기간 동안 사용 흔적이 있는지 확인하십시오.
확인해야 할 기간
2026년 4월 1일부터 현재까지를 보수적인 하한선으로 사용하십시오. 사고는 4월 19일에 공개되었지만 초기 액세스는 공개 이전입니다. Vercel이 더 구체적인 날짜를 게시하면 그에 따라 범위를 좁히겠습니다.
쿼리할 내용
- AWS CloudTrail — 손상된 IAM 키에서 비정상적인 API 호출, 특히 S3 버킷에 대한
GetObject 버스트, CreateUser, AttachUserPolicy, 새로운 ASN/국가에서의 콘솔 로그인.
- 데이터베이스 감사 로그 — 민감한 테이블에 대한 비정상적인
SELECT *, 대량 내보내기, 예상치 못한 소스 IP에서의 연결.
- Stripe / 결제 로그 — 비정상적인 고객 생성, 송금 생성, API 키 생성.
- 인증 제공업체 로그 (Auth0, Clerk, Cognito, Firebase) — 불가능한 이동 로그인, 관리자 사용자에 대한 비밀번호 재설정 트리거, 새 애플리케이션 등록.
- 이메일 제공업체 (SendGrid, Postmark 등) — 예상치 못한 아웃바운드 캠페인, 새 API 키, 발신자 ID 변경.
- GitHub — 클론, 포크 생성, 리포지토리 액세스 권한이 있는 사용자 계정의 새 SSH 키.
유용한 IOC 사냥 기본 요소
Vercel 또는 IR 파트너가 게시한 공격자 제어 호스트 이름 또는 IP를 다음에 붙여넣으십시오:
- 프런트엔드에 대한 HTTP 액세스 로그 (공격자는 행동하기 전에 액세스를 확인하기 위해 사전 프로브를 수행하는 경우가 있음)
- DNS 로그 — 서버에서 비정상적인 도메인의 아웃바운드 확인.
- 아웃바운드 프록시 / VPC 흐름 로그.
발행 시점 기준으로 Vercel에서 게시한 IOC는 없습니다. 업데이트를 위해 Vercel 게시판과 잘 알려진 IR 회사의 작성 자료를 모니터링하십시오.
6단계: 잔여 침해 탐지
플랫폼 계층 침해 후 공격자의 지속성은 일반적으로 다음 형태를 취합니다. 각각에 대해 적극적으로 사냥하십시오:1. 새로운 팀원 또는 협력자가 Vercel 팀, GitHub 조직, Linear 워크스페이스 또는 클라우드 계정에 추가된 경우. 노출 기간 내에 발생한 것.
2. 새로운 OAuth 인증이 연결된 SSO 제공자(Google Workspace, Okta, Entra ID)에서 개발자 계정에 대해 부여된 경우.
3. 변경된 CI/CD 구성 — 이제 홈(home) 콜백을 하는 워크플로우, 새로운 자체 호스팅 러너, 무해한 이름의 새로운 시크릿.
4. 예상치 못한 배포가 Vercel에서 발생한 경우 — 알려진 작성자의 알려진 커밋으로 매핑할 수 없는 배포에 대해 배포 기록을 확인.
5. 서버리스 함수 로그의 리버스 셸 징후 — 기록되거나 실행된 base64 블롭(blob), Edge/서버리스 함수에서의 비정상적인 아웃바운드 연결.
6. DNS 변동 — 새 하위 도메인, CNAME 변경, vercel.json 또는 프레임워크 구성을 통해 추가된 리디렉션.
7. 인증 변경사항 — MFA 비활성화, 복구 코드 재생성, 사용자 조치 없이 비밀번호 변경.
커뮤니케이션
내부
사고 지휘관을 지정하십시오. 로테이션이 진행되는 동안 최소 일일 스탠드업. '회전시킨 항목, 대기 중인 항목, 발견한 항목'에 대한 단일 진실 공급원 문서. Linear가 사고 범위에 포함된 경우 Linear 내에 보관하지 말고 별도의 채널을 사용하십시오.
고객 대상
법률 자문에 문의하십시오. 통지 기준은 다양하지만:
- GDPR: EU 거주자에게 영향을 미치는 통지 의무가 있는 침해의 경우 72시간.
- 호주 (NDB 체계, OAIC): 심각한 피해가 발생할 가능성이 있는 경우 실질적으로 가능한 한 빨리 통지.
- 미국: 주마다 다름; 일부 주는 30~60일의 기간을 두고, 다른 주는 특정 데이터 유형에 대해 즉시 통지 필요.
- 캘리포니아 (CCPA): 캘리포니아 거주자의 개인정보가 범위에 포함된 경우 특정 의무.
- SOC 2 / ISO 27001 고객: 계약상 통지 조항은 종종 규제 최소 요건보다 더 빠른 통지를 요구합니다. MSA를 확인하십시오.
시스템에서 데이터 유출의 증거가 없다면 아직 통지 의무가 없을 수 있습니다. 하지만 '우리는 Vercel을 사용하고 Vercel에 사고가 있었다'는 것만으로는 민감한 데이터가 실질적으로 위험에 처하지 않는 한 일반적으로 통지 의무를 촉발하기에 충분하지 않습니다. 그 근거를 문서화하십시오.
사전 준비된 성명서
필요하기 전에 다음을 초안으로 작성하십시오:
- 내부 전체회의
- 고객 대상 권고
- 규제 기관 통지 템플릿
- 상태 페이지 업데이트 (공개된 경우)
공개 귀속 위생
공개적으로 공격자의 주장을 사실로 재진술하지 마십시오. 기본 출처로 Vercel 게시판에 링크하십시오. Vercel이 자신들의 사고를 특성화하도록 두십시오 — 귀하는 자신의 노출을 특성화하는 역할에 집중하십시오.
중기 강화 (사고 후)
이 사고는 영향을 받지 않은 것으로 밝혀지더라도 해결할 가치가 있는 구조적 문제를 드러냅니다.
- 모든 시크릿을 Vercel의 민감한 환경 변수 기능으로 마이그레이션하십시오. 이를 팀 기본값으로 설정하십시오. 개발자에게 생성 시 플래그를 지정하도록 교육하십시오.
- 가능한 경우 단기 자격 증명을 채택하십시오. Vercel 환경 변수에 미러링된 장기 액세스 키 대신 AWS/GCP/Azure에 GitHub OIDC 페더레이션을 사용하십시오. 내장된 환경 변수 대신 런타임에 액세스하는 클라우드 네이티브 시크릿 관리자(AWS Secrets Manager, GCP Secret Manager)를 사용하십시오.
- 타사 OAuth 앱 인벤토리를 Google Workspace, Microsoft 365, GitHub 조직 및 Vercel 팀에 연결되어 있는 것들을 대상으로 수행하십시오. Vercel IAV는 Context.ai였습니다 — 직원의 Google Workspace에 OAuth를 통해 통합된 AI 플랫폼입니다. 동일한 등급의 위험이 SaaS 및 AI 도구 통합을 관대하게 승인한 모든 조직에 존재하며, 지난 18개월간의 AI 도구 골드러시에서 '승인되는 것'에 대한 기준이 상당히 낮아졌습니다. 구체적인 조치:
- Google Workspace OAuth 앱 보고서를 가져오십시오 (관리 콘솔 → 보안 → API 제어 → 앱 액세스 제어). 민감한 범위(
gmail.readonly, calendar, drive, admin.directory)가 있는 모든 앱을 검토하십시오.
- Microsoft 365에 대해서도 동일하게 수행하십시오 (Entra ID → 엔터프라이즈 애플리케이션).
- 분기별 검토를 제도화하십시오. 민감한 범위를 가진 새로운 OAuth 부여에 대해 보안 승인을 요구하십시오.
- OAuth 앱 설치를 사용자 주도 승인보다는 허용 목록으로 제한하는 것을 고려하십시오.
- GitHub 앱 범위에 대한 최소 권한 원칙. Vercel이 조직 전체 저장소 액세스가 필요하지 않은 경우, 실제로 배포하는 저장소로 제한하십시오.
- 배포 후크 교체를 일상적으로 수행하십시오. 분기별.
- 사전 커밋 및 CI에 시크릿 스캔을 구축하십시오. Trufflehog, gitleaks 또는 이에 상응하는 것. 커밋된 후 교체되었을 수 있는 항목에 대해 저장소 기록을 소급하여 스캔하십시오 — 한 번 커밋된 것은 어딘가의 클론에 여전히 존재한다고 가정하십시오.
- 시크릿뿐만 아니라 Vercel 계정 구성을 감사하십시오. 토큰 교체는 유출을 처리하지만 구조적 노출은 그대로 남깁니다: 클라이언트 측에 노출되는
NEXT_PUBLIC_ 값, 만료나 범위가 없는 토큰, 미리보기에서 배포 보호 해제, 방치된 별칭, 서명되지 않은 웹훅. 이러한 것들은 소스 트리가 아닌 Vercel API 구성에 존재하므로 시크릿 스캐너가 놓칩니다. 하나의 오픈소스 옵션: vercelsior.
- Vercel 통합 설치 공간을 문서화하여 SOC 2 / ISO 증거의 일부로 포함하십시오. 고객이 요청할 것입니다.
- 이 플레이북을 탁상 훈련으로 실행하여 3분기에 다른 플랫폼 제공업체에서 가상의 유사한 형태의 사고에 대비하십시오. 이 사고는 Vercel에 특별한 것이 아닙니다; 근육 기억은 일반화됩니다.
참조
변경 로그
- 2026-04-20 (v2) — Vercel CEO Guillermo Rauch의 4월 20일 성명에 따라 업데이트. 여러 항목을 "보고됨"에서 "확인됨"으로 승격: 피해를 입은 업스트림 공급업체로 Context.ai 지목, 피벗으로서 Vercel 직원의 Google Workspace 계정, 플랫폼 내 측면 이동으로서 민감하지 않은 환경 변수 열거. 직접적인 Context.ai 노출에 대한 병렬 범위 지정 추가. Next.js, Turbopack 및 OSS 프로젝트가 안전하다는 Vercel의 성명 추가. Mandiant 관여 추가. OAuth 앱 인벤토리 권장 사항 강화.
- 2026-04-20 (v1) — 초기 버전. 2026-04-19의 Vercel 게시판 및 동시대의 공개 보도를 기반으로 함. Vercel이 추가 세부 정보, IOC 또는 더 좁은 노출 기간을 게시하면 업데이트하십시오.