블로그 목록

Vercel이 털렸다, 가장 위험한 단어는 '제한된 일부'다

Threads 원문 보기 (7개 연결 스레드)

🔒 24시간 전 Vercel이 털렸다.
"제한된 일부 고객" 영향이라지만 그 숫자는 공개되지 않았다.
보안 인시던트 발표에서 가장 위험한 단어는 "제한된 일부"다.
Vercel이 어제 그 단어를 썼다.
영향 범위 비공개,
공격 벡터 비공개,
권고는 환경변수 회전 하나.
이런 발표가 나오면
"통보 받았는지"가 아니라
"노출됐을 가능성"으로 판단해야 한다.

공식 발표는 의도적으로 모호하다.
- 내부 시스템 무단 접근 식별
- 영향 범위와 공격 벡터 비공개
- 권고는 "activity log 검토와 환경변수 회전"
비공식 정보는 좀 더 구체적이다.
ShinyHunters 그룹으로 추정되고,
침해 지점은 Vercel 내부 Linear와 GitHub라는 보도가 있다.
단, 이건 미확인이다.

오늘 안에 점검해야 하는 사람:
1. Vercel에 프로덕션 배포 중인 모든 사용자
2. Next.js + Vercel 조합으로 운영 중인 서비스
3. DB 크리덴셜, Stripe, OpenAI, JWT secret을 환경변수로 저장한 모든 프로젝트
Vercel에서 이메일 통보를 직접 받았다면 HIGH 긴급도.
안 받았어도 MEDIUM이다.
"통보 안 받음 = 안전"은 약한 추론이다.

이번 사건의 핵심은 따로 있다.
Vercel 환경변수는 두 등급이다.
일반 env var는 프로젝트 접근권자가 dashboard에서 조회할 수 있다.
즉, control plane이 평문 값을 들고 있다는 뜻이다.
Sensitive 마킹된 변수는 빌드와 런타임에서만 복호화된다.
dashboard에서도 보이지 않는다.
문제는 sensitive가 옵트인이라는 거다.
신규 변수의 디폴트는 일반.
마킹을 안 하면 평문이 control plane에 떠 있다.

오늘 30분 내 액션:
1. Vercel dashboard → Activity Log에서 비정상 접근 패턴 점검
(계정 + 환경)
2. Env var 목록 전수 확인 + 비sensitive 시크릿 식별
3. DB URL, API 키, OAuth client secret, JWT signing key 등 발급처에서 새로 회전
4. Vercel에 새 값 입력 + "Sensitive" 토글 ON
5. 재배포 트리거
GitHub 통합을 쓰고 있다면 Vercel-GitHub PAT와 installation token도 함께 회전한다.

이번 인시던트의 진짜 교훈은 보안 디폴트의 무게다.
옵트인 보안은 다수가 옵트인하지 않는다.
단일 침해가 광범위 노출로 이어지는 구조다.
호스팅 의존이 단순해진 만큼,
디폴트가 결정한 결과의 무게는 점점 무거워진다.

참고 링크