이 페이지는 번역본입니다. 공식 원문은 영어판입니다. 영어로 읽기
coordinated-disclosure · data-exposure · elasticsearch · aviation · apis · pii · default-credentials · vietnam
2억 2천만 건의 여행자 기록: 베트남 연관 승객 데이터베이스 노출 사례
Kinryū Labs는 9년간 베트남을 출입국한 모든 인원의 사전승객정보(API)를 보유한 데이터베이스를 발견했다. 승객 기록 210,318,069건과 승무원 기록 10,465,631건, 합계 약 220백만 건으로, 각 기록은 이름, 생년월일, 여권번호를 수하물 태그까지 포함한 전체 여정과 결합하고 있었다. 이 시스템은 변경되지 않은 기본 로그인 정보로 응답했다. 노출 범위는 Aeroflot 및 Belavia 승무원부터 깜라인의 벨라루스 관광객까지 걸쳐 있었다. 조정된 취약점 공개 절차를 거쳐 2026년 6월 접근이 차단되었다.
작성자 Davis Zheng·
TLP:CLEAR. Kinryū Labs는 노출된 데이터베이스에 대한 조사 과정에서 2026년 6월 3일 이 노출을 발견하고 같은 날 신고했으며, 수일 내에 접근이 차단되었다. 열거 작업은 읽기 전용으로 수행되었다. 집계 건수, 데이터 기간, 필드 스키마, 소수의 스크린샷만을 기록하였다. 이 보고서의 모든 스크린샷은 개인을 식별하는 필드인 이름, 여권번호, 생년월일을 가린 상태이다. 개별 승객 또는 승무원 기록은 공개 절차에서 통보한 당국 외에는 보관, 공개, 공유되지 않았다. 원본 호스트 주소, 포트, 자격증명은 비공개로 유지한다. 해당 시스템의 운영 주체는 확인되지 않았다.
요약
- 2억 1천만건의 승객 기록
- 1,040만건의 승무원 기록
- 9년간의 운항, 2017년부터 2026년까지
- 1,008개 항공사가 데이터에 포함
2026년 6월 3일, 인터넷에 개방된 데이터베이스를 광범위하게 조사하던 중 pax-info라는 이름의 Elasticsearch 클러스터를 발견하였다. Elasticsearch는 대량의 기록을 검색하기 위한 데이터베이스 엔진이다. 이 클러스터는 인터넷 전체에 완전히 개방되어 있지는 않았다. 직접 전송한 요청은 거부되었다. 그러나 클라우드 경유지를 통해서는 도달할 수 있었고, 도달하고 나자 Elasticsearch 기본 로그인, 즉 운영자가 한 번도 변경하지 않은 공장 출고 상태의 사용자명과 비밀번호를 수용하였다. 이는 실질적인 보호 수단이 아니다. 그 뒤에는 2017년 1월 7일부터 2026년 4월 30일까지 걸친 220,783,700건의 여행 기록이 있었다.
이러한 조사에서 나오는 것은 대개 무의미한 것들이다. 개발자가 남겨둔 테스트 데이터, 상점의 상품 카탈로그, 기록이 있던 자리에 랜섬 노트만 남은 삭제된 데이터베이스 같은 것들이다. 이 클러스터는 그렇지 않았다. 9년치 국경 통제 데이터 아카이브를 보유하고 있었고, 발견 당시 최신 기록은 약 5주 전의 것이었다. 즉 시스템에 여전히 데이터가 기록되고 있었다. 가동 중인 시스템이었다.
이 데이터는 사전승객정보(Advance Passenger Information)이다. 국제선 운항에 앞서 항공사는 목적지 국가에 탑승자 명단을 전송하여, 국경 당국이 탑승객 전원을 사전 심사할 수 있도록 한다. 필드는 민간 항공 규정을 정하는 유엔 기구인 ICAO가 표준화하였다. 간단히 말해 이는 국가가 일반 여행자에 대해 보유하는 가장 민감한 데이터에 속한다. 각 개인에 대해 여권번호와 결합된 실명과 생년월일, 그리고 언제 어디로 갔는지에 대한 정확한 기록이 담겨 있다.
- 9년치 아카이브이며, 여전히 가동 중이었다. 승객 기록 210,318,069건과 승무원 기록 10,465,631건, 최신 기록은 약 5주 전의 것이었다. 이는 덤프되어 방치된 낡은 사본이 아니라 운영 중인 시스템의 실사용 아카이브였다. 높은 신뢰도, 직접 측정.
- 모든 기록은 신원 정보와 이동 이력의 결합이다. 성명 전체, 생년월일, 성별, 국적이 여권번호, 만료일, 발급국과 결합되고, 여기에 편명, 날짜, 공항, 좌석, 수하물 태그가 이어진다. 이 필드들을 종합하면 사칭과 문서 위조의 원재료가 되며, 아울러 특정 인물이 특정 일자에 어디 있었는지에 대한 기록이 된다. 높은 신뢰도.
- 범위는 전 세계적이었고, 세밀했다. 항공사에는 러시아와 벨라루스의 국적 항공사인 Aeroflot과 Belavia가 포함되며, 승객은 네덜란드, 중국, 벨라루스, 한국, 일본 등에 걸쳐 있고, 상세 수준은 개별 수하물 태그 참조번호까지 내려간다. 그 범위는 베트남에서 여정이 시작되거나 종료된 사람뿐 아니라 환승 및 통과 승객까지 포괄하였다. 높은 신뢰도.
- 침입도 익스플로잇도 없었다. 클러스터는 한 번도 변경되지 않은 Elasticsearch 공장 기본 자격증명을 수용하였고, 자체 웹 인터페이스는 원클릭 JSON 내보내기를 제공하였다. 기본 로그인 정보는 공개적으로 문서화되어 있으며 어떤 스캐너든 가장 먼저 시도하는 항목이다. 소프트웨어 취약점은 개입되지 않았다. 높은 신뢰도.
- 데이터는 베트남과 연관되어 있으나 운영 주체는 확인되지 않았다. 하노이의 베트남 국영 통신 인프라에 호스팅되어 있었고, ICAO 피드 형태로 구조화되어 있었으며, 베트남 최대 항공사 두 곳이 데이터의 대부분을 차지하였다. 어느 조직이 운영했는지는 확인하지 못했으며, 우리가 통보한 베트남 당국은 회신하지 않았다. 소유 주체에 대해서는 중간 수준의 신뢰도이며, 호스팅과 스키마는 직접 관찰하였으나 운영 주체는 그렇지 않다.
pax-info 클러스터는 29개 인덱스와 107 GB에 걸친 약 220.79백만 개 문서를 보유하고 있었다. 승객 및 승무원 인덱스 두 개가 그중 220,783,700개 문서를 차지하며, 나머지는 소규모 참조 및 테스트 인덱스이다.각 기록에 담긴 내용
각 기록은 성명 전체, 생년월일, 성별, 국적을 여권 또는 여행증명서 번호, 만료일, 발급국과 결합하고, 여기에 여정을 덧붙인다. 편명, 날짜, 출발지, 경유지, 도착지 공항, 좌석, 수하물 참조번호가 그것이다. 이름, 생년월일, 여권번호가 함께 있으면 여행자를 사칭하거나 여행증명서를 위조할 수 있으며, 여정은 특정 여행자가 특정 일자에 어디 있었는지를 보여준다.
모든 신원 값을 제외하고 기록한 단일 레코드의 구조는 다음과 같다.
flightDate: 2026-04-30 flightNumber: VN0402 fromAirportCode: HAN (하노이) toAirportCode: ICN (서울-인천) guestNameOriginal: [REDACTED] birthday: [REDACTED] nationalityCode: [REDACTED] documentNumberOriginal: [REDACTED]
데이터베이스에 포함된 대상
베트남 승객 시스템이라고 하면 베트남 여행자가 담겨 있으리라 보는 것이 자연스럽다. 실제로는 그보다 훨씬 많은 것이 담겨 있다. 기록에 나타난 국적은 네덜란드, 중국, 벨라루스, 한국, 일본, 프랑스, 독일, 캐나다, 말레이시아 등 전 세계에 걸쳐 있으며, 항공사는 1,008개에 이른다. 9년에 걸쳐 거의 모든 항공사에서 베트남 공항을 거치는 노선을 이용한 사람이라면 누구나 이 안에 포함되어 있을 수 있다.
그중 두 항공사가 눈에 띈다. 승무원 기록에는 러시아 국적 항공사 Aeroflot과 벨라루스 국적 항공사 Belavia의 명부가 포함되어 있으며, 두 곳 모두 서방 제재 대상으로 운영되고 있다. 이들 승무원의 이름, 생년월일, 여권번호가 다른 모든 사람의 정보와 동일한 개방형 저장소에 놓여 있었다. 승객 측에도 이에 대응하는 민간 운항 정보가 담겨 있다. 오랫동안 러시아 및 구소련권 관광의 목적지였던 나트랑 인근 해변 도시 깜라인행으로 예약한 벨라루스 국적자들이 그것이다. 이를 어떻게 평가하든, 이는 가장 손쉽게 노출된 여행 기록에 속한다.
이 시스템은 베트남에서 여정이 시작되거나 종료된 사람의 범위도 넘어섰다. 각 기록은 최초 출발, 경유, 도착 공항 필드를 별도로 담고 있으며, 상당수는 홍콩, 싱가포르 창이, 상하이, 마카오, 쿠알라룸푸르 등 외국 공항만을 명시하고 있다. 환승 및 통과 승객도 다른 모든 이들과 함께 수집되었고, 베트남에서 시작되거나 종료될 필요조차 없었던 여정에 전체 신원 정보가 결합되어 있었다.
수하물 태그까지
상세 정보는 누가, 어디로에서 끝나지 않는다. 각 기록에는 해당 승객 앞으로 체크인된 수하물 태그 참조번호를 포함하여 여정의 운영상 흔적도 담겨 있다. 이는 여행 가방 손잡이에 감긴 스티커에 적힌 번호로, 가방이 어디로 가는지를 나타내고 그것을 본인과 연결하는 값이다. 이 정도 규모의 데이터 집합에서는 이례적인 수준의 세밀함이다. 어떤 사람이 비행했다는 사실뿐 아니라 어느 가방이 그의 것이었는지까지 담겨 있다.
클러스터에 도달할 수 있었던 경로
클러스터가 인터넷 전체에 완전히 개방되어 있던 것은 아니다. 직접 전송한 요청은 거부되었다. 도달을 가능하게 한 것은 클라우드 경유지였다. 그곳에서는 데이터베이스가 응답하였고, 운영자가 한 번도 변경하지 않은, 소프트웨어에 기본 탑재된 사용자명과 비밀번호인 Elasticsearch 기본 로그인 정보를 수용하였다. 기본 자격증명은 방어 수단이 아니다. 공개적으로 문서화되어 있으며 어떤 스캐너든 가장 먼저 시도하는 항목이다. 소프트웨어 취약점은 악용되지 않았고, 악용할 필요도 없었다. 일단 내부에 들어가면 클러스터 자체 웹 콘솔이 Download as JSON 버튼을 제공하였다. 데이터를 가져가는 데 스크립트조차 필요하지 않았다.
노출은 며칠 수준의 문제가 아니었다. 승객 인덱스는 2022년 9월 15일에 생성되었다. 공개 인터넷 스캔 서비스 FOFA는 2022년 10월에 이 호스트를 처음 기록하였고, 2023년 중반에는 이를 데이터베이스로 분류하고 있었다. 즉 이 저장소는 우리가 발견하기 3년도 더 전부터 기본 로그인 정보 상태로 도달 가능했다. 그 기간 전체에 걸쳐 승객 데이터를 실제로 조회할 수 있었는지, 그리고 또 누가 접근했는지는 알 수 없다.
guest-v3-index)는 210,318,069건, 승무원 인덱스(crew-index)는 10,465,631건을 보유하고 있었으며, 소규모 참조 테이블이 함께 있었다. 승객 인덱스는 2022년 9월, 승무원 인덱스는 2023년 5월이라는 생성일은 이 시스템이 얼마나 오래 운영되었는지를 보여준다.읽지 않고 집계한 방법
우리는 누구의 기록도 읽지 않고 클러스터를 집계하였다. Elasticsearch는 “이 조건에 일치하는 기록이 몇 건인가”, “이를 항공사별로 분류하라” 같은 질의에 count 및 aggregation 인터페이스를 통해 답하며, 이들은 총계와 범주별 집계를 반환할 뿐 개별 행을 넘겨주지 않는다. 우리는 문서 건수, 데이터의 기간, 스키마의 필드명 목록, 그리고 모든 식별 필드를 가린 소수의 스크린샷을 보관하였으며, 스크린샷은 해당 필드에 값이 채워져 있음을 확인하기 위해서만 촬영하였다. 개별 승객 또는 승무원 기록은 조회, 저장되지 않았고 우리가 통보한 당국 외 누구에게도 전달되지 않았다.
Elasticsearch의 인덱스는 대체로 하나의 테이블에 해당한다. 사람 정보를 담고 있던 두 인덱스의 규모는 다음과 같다.
- 109,232,811건은 남성으로 표기
- 101,085,255건은 여성으로 표기
- 1,008개 항공사가 데이터에 명시
| 인덱스 | 기록 수 | 크기 |
|---|---|---|
승객 (guest-v3-index) | 210,318,069 | 95.3 GB |
승무원 (crew-index) | 10,465,631 | 4.3 GB |
100만 건을 넘는 20개 항공사
노출된 데이터 집합은 베트남 자국 여행자를 훨씬 넘어서는 범위에 이른다. 1,008개 항공사가 명시되었고, 그중 20개가 각각 100만 건 이상을 보유하고 있었다.
| 항공사 | 기록 수 |
|---|---|
| VietJet Air | 45,820,123 |
| Vietnam Airlines | 43,184,871 |
| 한국 항공사 (Korean Air, Asiana, Jeju Air, Jin Air, Tway) | 약 24.7백만 |
| 싱가포르 항공사 (Singapore Airlines, Scoot) | 약 7.7백만 |
Qatar Airways, Emirates, All Nippon Airways, Cathay Pacific, China Southern도 각각 수백만 건을 보유하고 있다. 목록 상위가 베트남 항공사 두 곳이라는 점은 놀랍지 않다. 중요한 것은 그다음이 한국, 걸프 지역, 일본, 중국의 국적 항공사로 이어진다는 점이다. 이것은 애초에 베트남만의 데이터가 아니었다. 어떤 방식의 협정을 통해 외국 항공사의 승객 명단이 베트남에 호스팅된 단일 저장소로 흘러 들어가 9년간 보관되었는지는 기록만으로는 알 수 없다.
클러스터가 호스팅된 위치
귀속 판단은 이미 확보된 정보, 즉 호스팅 네트워크, 인덱스 구조, 항공사 구성, 데이터 최신성, 접근 통제 상태만을 근거로 수행하였다. 클러스터는 AS38731 하에서 베트남 국영 통신사 Viettel에 할당된 네트워크 공간에 있었다. ASN은 인터넷 주소 뒤에 있는 네트워크 운영자를 식별하는 값이며, 이 ASN은 하노이의 한 기술 단지로 등록되어 있다. 스키마는 ICAO 사전승객정보 피드이며, 항공사 구성은 베트남 항공사 두 곳이 주도한다. VietJet Air가 45,820,123건, Vietnam Airlines가 43,184,871건이다. 이러한 호스팅과 항공사 구성은 베트남을 통과하는 모든 국제 이동을 수집하는 시스템과 일치한다.
당시 우리의 판단은 다음과 같다.
이미 확보된 데이터로 검증 가능한 모든 축에서, 증거는 이것이 제3자가 다른 곳에 호스팅한 사본이 아니라 노출된 상태로 방치된 실제 가동 중인 베트남 승객정보 시스템이라는 것과 부합한다.
탈취한 데이터를 재판매하는 측은 대개 피해 국가 내부의 추적 가능한 국내 네트워크에 그 데이터를 호스팅하지 않으며, 그러한 사본은 표면화될 시점에는 이미 오래된 것이다. 국내 호스팅, 목적에 맞게 구축된 스키마, 5주 수준의 최신성을 종합하면 재판매된 덤프가 아니라 가동 중인 데이터로 읽힌다.
어느 조직이 이 클러스터를 운영했는지는 확인하지 못했으며, 연관성을 과장하지 않도록 유의하고 있다. 다른 당국들과 함께 베트남 국가 사이버 침해사고 대응 기관(VNCERT)에도 통보하였으나 회신은 없었다. 이 시스템을 베트남과 연결하는 것은 호스팅과 스키마이다. 운영 주체의 신원은 외부에서 확정할 수 있는 사안이 아니며, 열어둔 채로 남겨둔다.
공개 경위
- 2026년 6월 3일개방된 데이터베이스에 대한 조사 과정에서 노출된 클러스터를 발견하였고, 같은 날 영향을 받은 당사자 및 책임 주체에 대한 통보를 시작하였다. 각국 CERT, 개인정보 보호 당국, 항공 관련 기구, 그리고 해당 데이터에 승객이 포함된 항공사들이 그 대상이었다.
- 수일 내호스트가 오프라인 상태가 되어 더 이상 도달할 수 없게 되었다. 해당 노출은 차단되었다.
발견한 당일에 신고하였고, 접근이 차단될 때까지 공개하지 않았다. 열거 작업은 읽기 전용이었으며, 통보한 당국 외에는 어떤 개인의 기록도 보관하거나 공유하지 않았다.
여전히 말할 수 없는 것
특정한 구멍은 막혔으나, 더 큰 질문들은 우리가 답할 수 있는 것이 아니다.
- 얼마나 오래 개방되어 있었는가. 승객 인덱스는 2022년 9월로 거슬러 올라가며, 공개 스캐너는 2022년 10월부터 이 호스트를 기록하였다. 그 기간 전체에 걸쳐 데이터를 조회할 수 있었는지, 그리고 다른 누군가가 접근하거나 복제했는지는 확정할 수 없다.
- 누가 책임 주체였는가. 운영 주체는 여전히 특정되지 않았고, 우리가 통보한 베트남 당국은 회신하지 않았다.
- 여행자들에게 통지될 것인가. 항공사와 각국 개인정보 보호 당국이 기록이 노출된 개별 여행자에게 통지할지 여부는 답이 나오지 않았다.
- 데이터가 어떻게 한곳에 모였는가. 그토록 많은 외국 항공사의 명단이 왜 베트남에 호스팅된 하나의 저장소로 통합되어 9년간 보관되었는지는 기록으로 설명되지 않는다.
인터넷에 데이터베이스를 운영한다면
여기서 발생한 실수는 흔하며 막는 비용도 저렴하다. Elasticsearch나 유사한 저장소를 운영하는 팀을 위한 권고는 다음과 같다.
- 기본 로그인 정보를 변경하고, 데이터 포트를 공개 인터넷에서 차단하라. 소프트웨어에 기본 탑재된 자격증명은 공개된 정보이며, 그대로 두는 것은 비밀번호가 없는 것과 같다. 실제 인증을 활성화하고 데이터베이스를 네트워크 경계 뒤에 두어야 한다.
- 도달 가능한 것은 결국 발견된다고 가정하라. 인터넷 전역 스캐닝은 지속적이고 자동화되어 있다. 이 호스트는 우리가 발견하기 수년 전에 이미 공개 스캐너에 등재되어 있었다.
- 가장 민감한 데이터가 어디에 있고 누가 도달할 수 있는지 파악하라. 이 사건의 피해는 수억 명의 신원 및 이동 데이터를 담은 단일 저장소가 변경되지 않은 기본 로그인 정보로 경유지를 통해 도달 가능했다는 데서 비롯된다. 그러한 저장소부터 목록화해야 한다.