쿠팡 해킹 원인 분석: 퇴직자 JWT 키와 순차 ID 취약점이 만든 5개월 탐지 불가
쿠팡 3,370만 명 개인정보 유출의 기술적 원인 분석. 퇴직자 JWT 서명 키 미회수, 예측 가능한 순차 ID, 이상 탐지 부재가 5개월간 탐지 불가를 만든 복합 보안 실패.
쿠팡 해킹은 퇴직한 내부 직원이 회수되지 않은 JWT 서명 키로 5개월간 3,370만 명의 고객정보에 접근한 사건이다. 근본 원인은 퇴직자 권한 미회수, 순차적 사용자 ID, 이상 탐지 부재가 결합된 복합적 보안 실패다.
"고객님의 개인정보가 유출되었다."
3,370만 명의 쿠팡 사용자가 이 문장을 받았다. 한국 인구 약 65%(통계청 기준)에 달하는(통계청 인구 기준) 숫자다.
그런데 여기서 이상한 점이 있었다.
해킹은 6월 24일에 시작됐다. 그리고 5개월 동안 아무도 몰랐다.
쿠팡 침해 흐름
용의자는 43세 중국인 남성. 쿠팡의 전 직원이었다. 그것도 인증 시스템 담당이었다.
보안업계에서는 이렇게 분석한다.
"JWT 서명 키가 탈취된 것으로 추정된다" — 바이라인네트워크, 2025.12
JWT 서명 키가 뭘까?
쿠팡 앱에 로그인하면, 서버는 "이 사람 진짜 사용자 맞음"이라는 디지털 도장을 찍어준다. 이게 JWT(JSON Web Token)다.
그런데 이 도장을 찍는 도장 자체를 훔쳐갔다면?
누구든 "진짜 사용자"로 위장할 수 있다. 관리자 권한도 만들 수 있다. 5개월 동안 들키지 않고 데이터를 빼갈 수 있다.
개인정보보호위원회와 언론 보도에 따르면, 유출이 확인되거나 추정되는 정보는 다음과 같다.
| 항목 | 내용 |
|---|---|
| 유출 규모 | 3,370만 명 (한국 인구 약 65%, 통계청 기준) |
| 유출 기간 | 2025년 6월 24일 ~ 11월 (약 5개월) |
| 개인 식별 정보 | 이름, 휴대전화 번호, 이메일 주소, 생년월일 |
| 배송 관련 정보 | 배송지 주소, 수령인 정보 |
| 주문 이력 | 구매 내역, 주문 일시 |
| 계정 정보 | 암호화된 비밀번호 해시 |
한국에서 유출된 개인정보 규모로는 2014년 카드사 사태(1억 건) 이후 최대 수준이다.
국회 현안질의에서 지적된 또 다른 문제가 있다.
"쿠팡은 예측 불가능한 난수나 UUID 방식 대신 순차적으로 증가하는 단순 정수값을 PK로 사용해왔다" — 이준석 의원, 2025.12.02 국회 과방위 현안질의
쿠팡의 사용자 ID 구조가 이랬다는 것이다.
user_id = 1
user_id = 2
user_id = 3
...
user_id = 33,700,000
순차적인 정수 ID. 1번부터 시작해서 1씩 증가한다.
공격자 입장에서 이건 선물이다.
"1번 사용자 정보 줘" "2번 사용자 정보 줘" "3번 사용자 정보 줘" ...
3,370만 번 반복하면 끝이다. 추측할 필요가 없다.
만약 ID가 UUID 형식이었다면?
user_id = a7f3b2c1-9d4e-4f8a-b5c6-1e2d3f4a5b6c
추측이 불가능하다. 무작위 대입 공격이 의미 없어진다.
이것이 보안에서 말하는 IDOR(Insecure Direct Object Reference) 취약점이다. OWASP Top 10에서 "Broken Access Control(A01:2021)"에 해당한다.
| 시점 | 사건 |
|---|---|
| 2025년 6월 24일 | 최초 비인가 접근 시작 |
| 6월~11월 (5개월) | 순차 ID를 이용한 대량 데이터 조회 지속 |
| 2025년 11월 | 쿠팡 내부에서 이상 징후 감지 |
| 2025년 11월 | 개인정보보호위원회 및 KISA 신고 |
| 2025년 11월 | 3,370만 명에게 유출 통지 발송 |
| 2025년 12월 2일 | 국회 과방위 현안질의 (이준석 의원) |
| 2025년 12월 | 경찰 수사 착수, 용의자 특정 |
5개월간 탐지되지 않은 이유는 명확하다. 공격자가 정상적인 인증 토큰을 사용했기 때문이다. 방화벽이나 IDS는 유효한 JWT로 들어오는 트래픽을 차단하지 않는다.
가장 근본적인 문제가 있다.
용의자는 퇴직한 직원이었다. 그런데 시스템 접근 권한이 그대로 남아 있었다.
이건 기술 문제가 아니다. 프로세스 문제다.
Verizon의 2024 Data Breach Investigations Report(DBIR)에 따르면, 전체 데이터 유출 사건 중 약 20%가 내부자 위협에서 발생한다. 내부자 공격은 정상적인 접근 경로를 사용하기 때문에 외부 공격보다 탐지가 훨씬 어렵다.
이 사건을 MITRE ATT&CK 프레임워크로 분석하면, 공격자는 정교한 익스플로잇이 아닌 정상적인 접근 경로를 활용했다.
| 기법 | 적용 |
|---|---|
| T1078 (Valid Accounts) | 퇴직자의 유효한 JWT 서명 키로 인증 토큰 생성 |
| T1087 (Account Discovery) | 순차 정수 ID로 전체 사용자 목록 열거 |
| T1552 (Unsecured Credentials) | 퇴직 후에도 회수되지 않은 서명 키 |
| T1530 (Data from Cloud Storage) | API를 통한 대량 고객 데이터 수집 |
T1078 (유효한 계정 사용) 이 핵심이다.
공격자가 악성코드를 심거나, 취약점을 익스플로잇하지 않았다. 정상적인 권한으로 정상적인 방법으로 접근했다.
그래서 5개월 동안 탐지가 안 됐다.
이 사건은 한국의 개인정보 보호 규제 강화와 맞물렸다.
2023년 개정된 개인정보 보호법(PIPA)은 과징금 상한을 매출액 3%까지(개인정보 보호법 제39조의15 기준) 올렸다(개인정보 보호법 제39조의15). 쿠팡의 2024년 매출이 약 40조 원임을 감안하면, 최대 과징금은 수천억 원 규모가 될 수 있다.
개인정보보호위원회는 쿠팡에 대한 조사에 착수했으며, 다음 사항을 검토 중이다:
해외 유사 사례와 비교하면 한국의 제재 수준이 어느 정도인지 가늠할 수 있다.
| 사례 | 제재 규모 |
|---|---|
| EU GDPR 위반 최대 | 매출의 4% 또는(GDPR Art.83 기준) 2,000만 유로 |
| Meta (아일랜드 DPC, 2023) | 12억 유로 (약 1.7조 원) |
| 한국 PIPA 최대 | 매출의 3%(개인정보 보호법) |
| 쿠팡 예상 최대 | 약 1.2조 원(매출 40조 기준 산출) |
둘 다다.
| 요인 | 역할 |
|---|---|
| 내부자 | 인증 시스템을 알고 있던 전 직원 |
| 취약점 | 권한 회수 실패, 예측 가능한 ID, 이상 탐지 부재 |
하지만 근본 원인은 하나다.
"떠난 사람을 시스템이 기억하고 있었다"
퇴직 처리가 제대로 됐다면, 서명 키를 알아도 접근할 방법이 없었다.
| 원칙 | 구현 방법 |
|---|---|
| 예측 불가능한 ID | 순차 정수 대신 UUID v4 사용 |
| 서명 키 정기 교체 | JWT 키를 주기적으로 로테이션 |
| 이상 접근 탐지 | 비정상적 대량 조회 패턴 모니터링 |
| 최소 권한 원칙 | 업무에 필요한 최소한의 접근 권한만 부여 |
| Rate Limiting | API 호출 빈도 제한으로 대량 수집 차단 |
쿠팡 사태는 고도의 해킹 기술이 필요한 공격이 아니었다. 퇴직자의 권한을 회수하지 않았고, ID가 예측 가능했고, 대량 조회를 탐지하지 못했다. 보안 기본기의 실패가 3,370만 명의 정보를 유출시켰다.
5개월간 탐지가 불가능했던 근본 원인은 세 가지다. 첫째, JWT 서명 키가 퇴직자의 접근 권한과 함께 만료되지 않았다. 키 로테이션 정책이 없어 퇴직 후에도 유효한 토큰을 생성할 수 있었다. 둘째, 순차적 사용자 ID(/api/users/1, /api/users/2, ...)는 공격자가 전체 사용자를 열거하는 것을 쉽게 만들었다. 셋째, API 접근 로그에 대한 이상 행위 탐지가 없어 비정상적인 대량 조회 패턴을 감지하지 못했다.
이 사례는 인증(Authentication)과 인가(Authorization)의 차이를 보여준다. 유효한 JWT를 가진 요청은 인증을 통과하지만, 이 사용자가 특정 데이터에 접근할 권한이 있는지는 별도로 검증해야 한다.
쿠팡 사건에서 드러난 핵심 취약점은 JWT 서명 키의 수명주기 관리 실패였다. 퇴직자의 JWT가 퇴직 후에도 유효했다는 것은 키 폐기(Key Revocation) 절차가 없었음을 의미한다. JWT의 무상태(Stateless) 특성상 개별 토큰을 즉시 무효화하려면 추가 메커니즘이 필요하다.
업계 표준 대응 방안은 세 가지다. 첫째, 토큰 블랙리스트를 Redis에 유지하여 만료 전 폐기된 토큰을 추적한다. 둘째, 키 쌍을 주기적으로 교체(Key Rotation)하여 오래된 키로 서명된 토큰을 일괄 무효화한다. 셋째, 짧은 만료 시간(15분)과 리프레시 토큰 회전을 조합하여 피해 범위를 최소화한다.
순차적 ID(Sequential ID) 취약점도 주목할 만하다. /api/users/1, /api/users/2처럼 예측 가능한 ID 패턴은 공격자가 전체 사용자 데이터를 열거(Enumeration)할 수 있게 한다. UUID v4나 ULID 같은 비순차적 식별자로 교체하는 것이 BOLA(Broken Object Level Authorization) 방어의 기본이다.
쿠팡 사건은 한국 IT 업계에 API 보안의 중요성을 각인시켰다. 사건 이후 개인정보보호위원회는 대형 플랫폼 사업자에게 API 접근 토큰의 최대 유효기간을 90일로 제한하고, 퇴직자 계정의 자동 비활성화 시스템 구축을 권고했다. 또한 API 호출 패턴을 실시간 모니터링하는 이상 행동 탐지(UEBA) 솔루션 도입이 주요 플랫폼에서 의무화 논의가 시작됐다.
한국 주요 사이버보안 사건
관련 보안 주제
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.