작년 11월부터 올해 초까지 한국 테크 업계를 뒤흔든 쿠팡 개인정보 유출 사태. 3370만 건이라는 숫자도 충격이지만, 기술적으로 뜯어보면 더 씁쓸하다. 이건 정교한 해킹이 아니었다. 퇴사한 개발자 한 명이 들고 나간 서명키 하나가 5개월 동안 멀쩡히 작동했다는 이야기니까.
서명키가 마스터키가 된 구조
쿠팡의 인증 체계는 JWT(JSON Web Token) 기반이다. 사용자가 로그인하면 서버가 프라이빗 서명키로 토큰을 생성하고, 이후 모든 요청에서 이 토큰으로 신원을 확인한다. 업계에서 수십 년째 쓰는 표준적인 방식이고, 구조 자체에 문제가 있는 건 아니다. 문제는 이 서명키의 수명이었다.
보안업계 분석에 따르면 해당 키의 유효기간이 5~10년으로 설정돼 있었다. 사실상 영구키다. 퇴사 처리 시 폐기하거나 갱신하는 절차도 전혀 없었다. 2022년 입사해 보안 키 관리 시스템을 담당하다 2024년 말 퇴사한 중국 국적 개발자 A씨가 재직 중 확보한 프라이빗 서명키로 가짜 인증 토큰을 찍어내기 시작한 건 2025년 6월이다. 서버는 이걸 정상 요청으로 받아들였다. 쿠팡 CISO가 직접 "프라이빗 서명 키를 탈취해 가짜 토큰을 생성했다"고 인정한 부분이기도 하다.
여기서 첫 번째 질문을 던질 수밖에 없다. 왜 키를 로테이션하지 않았나? AWS KMS든 HashiCorp Vault든, 서명키 자동 로테이션은 2020년대 초반부터 업계 상식이다. 90일 주기가 과하다 싶으면 최소 연 1회라도 돌렸어야 한다. 5~10년짜리 키를 쓰고 있었다는 건 로테이션 정책 자체가 존재하지 않았다는 뜻에 가깝다.
API 뒤에 방어선이 없었다
서명키 유출이 문을 열었다면, 그 뒤의 방어선은 어땠을까. 짧게 말하면 — 없었다.
고객정보 조회 API에 속도 제한(rate limiting)이 안 걸려 있었다. 이상행위 탐지도 작동하지 않았다. 거기다 내부 사용자 PK가 1, 2, 3 같은 순차 증가 방식이어서 IDOR(Insecure Direct Object Reference) 공격에 그대로 노출돼 있었다. 공격자 입장에서는 for i in range(1, 34_000_000) 한 줄이면 전체 고객 DB를 긁을 수 있는 구조였던 셈이다.
내부용으로 설계된 API가 외부에서도 호출 가능했다는 점도 치명적이다. 네트워크 세그멘테이션이 제대로 되어 있었다면, 서명키가 유출됐어도 외부에서 내부 API에 도달하는 것 자체가 차단됐을 수 있다. 방화벽, VPN, 서비스 메시 — 어떤 레이어에서든 한 번은 걸렸어야 하는데, 전부 빠져 있었다.
147일의 침묵
6월 24일 시작된 비정상 조회가 11월 18일에야 탐지됐다. 147일. 그것도 보안팀이 자체적으로 잡아낸 게 아니다. 고객들이 "누군가 내 비밀번호를 알고 있다"는 내용의 피싱 메일을 받고 민원을 넣기 시작하면서 드러났다.
왜 이렇게 오래 걸렸을까? 탐지 시스템이 단순 횟수 기반 임계치에 머물러 있었기 때문이다. 정상 서명이 붙은 토큰이 보내는 요청은 시스템 입장에서 "합법적 트래픽"이다. 건수가 아무리 쌓여도 알람이 울리지 않는다. 행위 기반 이상 탐지(UEBA)가 있었다면 — 예를 들어 "퇴사자 계정에서 하루 수십만 건 조회"같은 패턴을 잡았겠지만, 그런 파이프라인 자체가 없었던 것으로 보인다.
국회 조사에서는 조직 구조까지 도마에 올랐다. 핵심 임원진이 다국적 외국인으로 구성된 쿠팡 특유의 이중 구조가, 한국 현장 보안 운영과 본사 기술 의사결정 사이에 갭을 만들었다는 지적이다. 보안 정책은 미국 본사 기준으로 설계되는데, 실제 데이터는 한국 서버에 있고 한국법의 적용을 받는 상황. 이 괴리가 퇴사자 시크릿 관리 같은 기본적인 프로세스에서 빈틈을 만들었다는 분석이 설득력 있다.
우리 조직은 괜찮은가
쿠팡 사태를 남의 일로 볼 수 있는 한국 테크 기업이 과연 얼마나 될까.
JWT 서명키 로테이션 정책이 명문화돼 있는 곳. 퇴사자 시크릿이 HR 시스템과 연동돼 자동 폐기되는 곳. 내부 API에 rate limiting과 UEBA가 둘 다 붙어 있는 곳. 이 셋을 전부 갖춘 조직은 솔직히 손에 꼽을 것이다.
4월 3일 보안뉴스가 낸 '2026 내부자 위협 대응 리포트'는 이 사태를 "외부가 아닌 내부에서 온 가장 비싼 경고"라고 표현했다. 맞는 말이다. 다만 이걸 "보안 투자를 늘려야 한다"는 뭉뚱그린 결론으로 넘기면 아무것도 바뀌지 않는다.
지금 당장 점검할 건 구체적이다:
시크릿 수명 주기: 서명키, API 키, 인증서의 유효기간과 퇴사 연동 자동화가 돼 있는가
네트워크 경계: 내부 API가 정말 내부에서만 호출 가능한가, 세그멘테이션이 실제로 동작하는가
탐지 파이프라인: 로그 기반 임계치를 넘어서 행위 기반 이상 탐지가 돌고 있는가
3370만 건의 대가로 얻은 교훈치고는 너무 기본적이라서 더 찝찝하다. 그런데 기본이 안 돼 있었으니까 3370만 건이 터진 거다.