- Cerca Dating App은 전화번호 기반 로그인과 노출된 API가 맞물려, OTP 응답에 인증 코드가 포함되고 개인정보 조회까지 이어질 수 있는 위험한 상태였음
api.cercadating.com은 앱 버전 헤더를 붙이면/docs의 openapi.json으로 엔드포인트가 드러났고, 일부 요청은 강제 매칭 같은 비즈니스 로직까지 조작할 수 있었음user/{user_id}는 유효한 사용자 ID만으로 이름, 위치, 생년월일, 학교, 전화번호, 이메일, 프로필 상태 등 PII를 반환해 OTP 취약점과 결합될 경우 계정 탈취로 이어질 수 있었음- 계정 접근 후에는 제출된 사용자에 한해 여권 또는 신분증 정보, 셀피 URL, 사적인 메시지까지 접근 가능했으며, 확인 스크립트로 사용자 6,117명, ID 정보 입력자 207명, Yale 학생 표시 사용자 19명을 찾았음
- 취약점은 2025년 2월 23일 Cerca에 제보되고 2월 24일 통화까지 진행됐지만, 4월 21일 공개 시점까지 후속 답변과 사용자 통지는 없었고 패치 여부만 독립적으로 확인됨
제보 이후 끊긴 대응
- Cerca Dating App은 사적인 메시지, 여권 정보, 성적 선호, 기타 개인정보가 노출될 수 있는 데이트 앱 보안 취약점을 갖고 있었음
- 취약점 발견 후 2025년 2월 23일 Cerca 팀에 이메일로 제보했고, 다음 날 영상 통화에서 취약점, 완화 방안, 후속 조치를 논의함
- Cerca 팀은 문제의 심각성을 인정하고 책임 있는 공개에 감사하며, 취약점 해결과 영향을 받은 사용자 통지를 약속함
- 이후 3월 5일과 3월 13일에 수정 및 사용자 통지 계획 업데이트를 요청했지만, 2025년 4월 21일 공개 시점까지 답변이 없었음
- 공개 전 취약점이 패치됐다는 점은 독립적으로 확인됐고, 이를 바탕으로 공개가 이뤄짐
OTP 로그인에서 시작된 계정 접근
- 앱은 전화번호로 코드를 보내는 OTP 기반 로그인만 사용함
- 네트워크 요청을 확인하기 위해 iPhone 앱에서 Charles Proxy를 사용해 앱 요청을 가로챔
- OTP를 트리거하는 응답 안에 일회용 비밀번호가 직접 포함돼 있었음
- 이 구조에서는 사용자의 전화번호만 알면 해당 계정에 접근할 수 있었음
- 계정 보유자의 전화번호를 알아내는 별도 경로가 필요해 API 엔드포인트 탐색으로 이어짐
OpenAPI 문서로 드러난 엔드포인트
api.cercadating.com에 대해 디렉터리 퍼저를 사용해 경로를 열거함- 앱 관련 헤더 없이는 사이트의 어떤 부분에도 접근할 수 없었음
- Gobuster에 해당 헤더를 붙여 요청하자
/docs엔드포인트를 찾았고, 여기서openapi.json이 제공됨 - Burp Suite의 match-and-replace 기능으로 앱 버전 헤더와 Charles Proxy에서 추출한 bearer token을 항상 붙이도록 설정함
- 일부 보호되지 않은 엔드포인트는 비즈니스 로직에 영향을 줬고, 두 사람을 강제로 매칭시키는 요청도 가능했음
사용자 프로필과 개인정보 노출
user/{user_id}엔드포인트는 유효한 사용자 ID를 받으면 다양한 개인정보를 반환함- 응답에는 다음 정보가 포함됨
- 이름, 성별, 관심 성별, 도시, 위도·경도
- 학교 이메일과 인증 상태, 업계, 직업, 생년월일, 키
- 학교 ID와 학교 이름, 프로필 완성 여부
- 국적 ID 인증 여부, 모바일·이메일 인증 여부
- 프리미엄 상태, 계정 활성·일시중지·온보딩 상태
- 전화번호, 이메일, 사용자 ID, 검색 잔여 횟수
- 프로필 이미지, 매칭 선호, 사용자 프롬프트, 상호 연락처 정보, 생성·수정 시각, 나이 등
- Python 스크립트로 유효한 사용자 ID를 찾아 사용자 데이터를 대량 열거할 수 있었음
- 반환된 전화번호는 OTP 취약점과 결합돼 전체 계정 접근에 사용될 수 있었음
- OTP 로그인 없이도 사용자 개인정보가 노출되는 상태였음
신분증과 사적인 메시지까지 이어진 접근
national_id_verified필드는 여권 또는 신분증 정보가 시스템에 저장된다는 점을 보여줌- 신분증 관련 응답에는 다음 정보가 포함됨
verification_type:PASSPORTdocument_numberfront_side_urlback_side_urlselfie_url- 상태, ID, 사용자 ID
- 이 정보는 로그인한 사용자에게만 제공되지만, OTP 취약점 때문에 임의 사용자로 로그인할 수 있는 상태였음
- 제출된 사용자에 대해서는 누구의 ID 정보든 볼 수 있는 구조였지만, 실제로 그렇게 하지는 않았다고 밝힘
- 잠재적 데이트 상대와의 개인 메시지도 볼 수 있었고, 제출된 경우 여권 정보까지 접근 가능했음
확인된 노출 규모
- 빠른 스크립트로 정보를 얻을 수 있는 사용자 수, Yale 학생으로 등록된 사용자 수, ID 정보를 입력한 사용자 수를 집계함
- 스크립트는 유효한 사용자 ID를 세다가 1,000개 연속으로 유효한 ID를 찾지 못하면 중지하는 방식이었음
- 이 방식은 더 많은 사용자가 있을 가능성을 배제하지 않음
- Cerca는 첫 주 사용자 수를 1만 명이라고 밝혔음
- 확인된 수치는 다음과 같음
- 사용자 6,117명
- ID 정보를 입력한 사용자 207명
- Yale 학생이라고 표시한 사용자 19명
개인정보 보호 약속과 실제 위험
- Cerca의 개인정보 처리방침은 “암호화와 기타 업계 표준 조치로 데이터를 보호한다”고 말함
- 실제 취약점 상태와 비교하면 이 문구는 오해의 소지가 있음
- 노출 대상에는 성적 선호, 사적인 메시지, 다양한 개인정보가 포함될 수 있었음
- 악의적 사용자가 해당 정보에 접근하면 신원 도용, 스토킹, 협박 같은 결과로 이어질 수 있음
- 데이트 앱은 민감한 데이터를 다루기 때문에, 앱 출시 속도보다 사용자 데이터 보안이 우선돼야 함