How I Could’ve Accessed 17 Trillion Microsoft Records
마이크로소프트 데이터 17조 건에 접근할 수 있었던 취약점
16세 보안 연구자가 Microsoft 내부 분석 서비스 Titan의 JWT 서명 검증 누락을 발견했습니다. 조작한 토큰으로 관리자 권한을 얻어 17개 분석 데이터베이스에 연결되는 경로를 확인했지만, 17조 건은 메타데이터로 추산한 저장 행 수이며 실제 데이터를 대량 조회하지는 않았습니다.
- 주제
AI 요약
보안 연구자 Faav는 Microsoft 내부 분석 서비스 Titan의 API에서 로그인 토큰의 서명을 확인하지 않는 취약점을 발견했습니다. 토큰 내용에 적힌 테넌트와 애플리케이션 정보는 검사했지만 서명은 검증하지 않았습니다. 공격자는 이 빈틈을 이용해 관리자라고 주장하는 토큰을 만들고, 인증 정보 없이 SQL 쿼리를 실행할 수 있었습니다. Faav는 고객 데이터나 개인정보를 대량으로 조회하지 않고, 취약점과 접근 가능한 범위를 확인한 뒤 Microsoft에 신고했습니다.
API와 JWT 검증 과정
자동화 도구 Antares는 2026년 8월 25일 Titan의 API를 찾아냈습니다. 웹 화면은 Microsoft 직원용 VPN 뒤에 있었지만, 별도 API 주소와 공개 Swagger 문서가 외부에서 확인됐습니다. 네 개 경로 가운데 /v2/Query는 SQL을 받으면서도 Swagger 문서에 Azure AD bearer 인증이 필요하다고 적혀 있지 않았습니다. Faav는 과거 웹페이지를 Wayback Machine에서 찾아 Superset 설정을 복구했고, 그 안에서 테이블 경로 이름 56개를 확인했습니다.
처음 쿼리를 보내자 API는 인증 오류를 반환했습니다. Antares는 토큰의 테넌트, audience, 애플리케이션 ID를 차례로 바꾸며 오류가 달라지는 지점을 확인했습니다. 토큰의 서명은 그대로인데 내용만 바꿔도 검사를 통과하는 현상이 나타났습니다. Faav는 서명 부분이 비어 있는 alg: none JWT를 만들어 서명 검증 누락을 확인했습니다.
다만 유효한 이메일 형태의 UPN을 넣어도 Titan의 사용자 조회 단계에서 막혔습니다. 열흘 뒤 Faav는 백엔드가 upn 값을 이메일 주소가 아니라 로컬 사용자 이름으로 처리할 가능성을 떠올렸습니다. 값을 admin으로 바꾸자 쿼리가 실행됐습니다. 이 값은 Titan의 로컬 사용자 ID 1에 연결됐고, 해당 계정에는 관리자 역할이 있었습니다.
확인한 데이터와 영향 범위
Faav는 먼저 테스트 데이터베이스를 조회했고, 이어 SHOW DATABASES로 서비스 메타데이터 데이터베이스를 확인했습니다. 메타데이터에는 약 2만 5천 개의 계정·이메일 기록, 직원 이메일 17,990개, 직원 조직 정보 15,001개가 있었습니다. 데이터베이스 설정 355개, 가상 데이터셋 SQL 정의 20,979개, 대시보드 24,569개, 차트 425,891개, 데이터셋 정의 27,347개도 확인했습니다. 계정 기록의 비밀번호 필드는 실제 Microsoft 자격 증명이 아니라 Superset 로컬 사용자 모델의 자리표시자 해시였습니다.
별도 Bing 분석 데이터베이스에서는 한 행씩 두 차례 샘플을 요청했습니다. 이 샘플로 검색 분석 기록에 식별자와 대략적인 위치 정보가 포함된 것을 확인했습니다. 위치는 역 IP를 바탕으로 한 국가 또는 주 단위였다고 밝혔습니다. 여러 데이터셋에 MUID가 나타났지만, Faav는 기록을 서로 연결하거나 개인을 식별하지 않았다고 설명했습니다.
전체 규모는 실데이터를 세어 얻은 값이 아닙니다. 과거 설정의 경로 56개 가운데 30개가 여전히 활성 상태였고, 이 경로는 24개 설정을 거쳐 17개 분석 데이터베이스와 연결됐습니다. 데이터베이스에는 고유 테이블 이름 9,863개가 있었습니다. Faav는 17개 ClickHouse 데이터베이스의 메타데이터 행 수를 합산하고, 복제본을 중복 계산하지 않도록 샤드별로 하나씩 세었습니다. system.tables.total_rows와 활성 system.parts 두 경로로 확인한 추정치는 17,333,335,124,315행입니다. 이 수치에는 과거 데이터와 중복·파생 데이터가 들어갔을 가능성이 있습니다.
신고와 연구자의 설명
Faav는 2026년 9월 5일 Microsoft Security Response Center(MSRC)에 신고했습니다. Microsoft는 9월 9일 API를 차단했고, 보고 내용이 즉각적인 조사와 조치로 이어졌다고 밝혔습니다. 보상은 5,000달러였습니다. 글에는 Microsoft가 공개 전 영향 설명과 일부 수치를 수정하는 데 편집 권한을 행사했다는 점도 공개됐습니다.
Faav는 이 사례에서 자동화와 사람의 판단이 함께 작동했다고 설명합니다. Antares는 하위 도메인 탐색, JWT 오류 분석, 공격 표면 정리에 기여했지만, upn이 실제로 UPN처럼 쓰이지 않는다는 점은 알아내지 못했습니다. 마지막에 admin을 시험한 것은 백엔드 구현을 추측한 사람의 판단이었습니다. 개발자에게는 JWT의 내용 검사만으로 인증을 끝내지 말고 서명을 먼저 검증하라고 당부합니다.
Reddit 반응
- @u/usernamedottxt — 16살 때로 돌아가 시간을 무제한으로 쓸 수 있다면 얼마나 좋을까요. 이건 Microsoft 기준으로 봐도 태만한 보안입니다.
- @u/ohYuhtBoutMagine — 맞아요. 어릴 때는 컴퓨터에 너무 오래 집중해서 이것저것 찾아보고 채팅방에서 12~15시간씩 보내곤 했습니다. 컴퓨터 책상 바로 옆에서 자고, 다음 날 일어나 다시 컴퓨터를 했어요. 한동안 홈스쿨링을 해서 컴퓨터를 쓸 시간이 사실상 무제한이었습니다.
- @u/usernamedottxt — 그때는 모든 게 훨씬 쉬웠어요. 시스템이 너무 허술해서 몇 군데를 실수로 해킹한 적도 있습니다. 다만 범위는 동네 도서관 키오스크였어요. 연구자가 한 일을 폄하하려는 건 아닙니다. 저는 시도할 생각조차 못 했을 방법을 끝까지 파고들었습니다. 이렇게 의욕적인 사람도 인터넷에서 Microsoft 핵심 서비스를 이렇게 쉽게 뚫으면 안 됩니다.
- @u/Tangential_Diversion — 정말 공감합니다. 젊을 때 해킹을 더 잘했던 것 같아요. 끈질긴 집념과 ‘불가능할 것’이라는 생각을 모르는 태도가 놀라운 공격 경로로 이어질 때가 있습니다.
- @u/usernamedottxt — 맞아요. 문서도 없는 Microsoft 비밀 서비스에서 JWT 규칙을 어겨보겠다는 생각은 못 했을 거예요. 개발자는 어리석을 수 있고 프로토타입은 운영 환경에 남는다고 생각해 단순한 방법을 시도한 점이 대단합니다.
- @u/WeirdSysAdmin — Microsoft에 정말 지쳤습니다.
- @u/TeeDee144 — Microsoft 직원인데 사이버 보안 블로그에서 익숙한 ‘VPN required’ 화면을 보니 웃기네요. VPN 로그인을 잊었을 때 보던 화면이라 익숙했지만, 공개 사이트에서 보니 이상했습니다. 나쁜 한 주를 보내고 주말을 즐기려던 참이라 더 짜증 나네요.
- @u/usernamedottxt — IP 허용 목록도 아니었네요. ‘admin’이라는 마법의 값을 넣기만 하면 됐습니다.
- @u/charleswj — Reddit에서 그 화면을 보니 정말 이상하네요. 저도 그 화면 싫어요. 한동안 GSA를 썼는데 지금은 빼앗겼습니다.
- @u/A-Filthy-Scrub — 이 사례에 5천 달러를 준 건 정말 심각합니다. 보상 자체는 고맙지만, 위협 행위자가 Microsoft에서 로그 17조 건을 얻었다고 주장할 때 생길 평판 피해만 해도 5천 달러보다 클 수 있습니다. 그래도 잘하셨고 글도 칭찬받을 만합니다. 계속 좋은 일을 해주세요.
- @u/logsqrtexp — 예전에는 24시간, 36시간씩 깨어 있곤 했습니다. 밥을 먹거나 화장실에 가는 일을 함수 호출처럼 생각할 정도였어요. 어린 나이에 대단합니다. 그런데 더 놀라운 건 IDS가 이 많은 탐색을 감지하지 못했다는 점입니다. 필드를 바꿔가며 끈질기게 시도할 수는 있어도, IDS와 네트워크 로그에서 이상 징후가 보여야 하지 않나요? 반복된 실패를 보고도 아무 알림이 없었다니요. 제가 놓친 게 있나요?
- @u/CuriousCamels — 저도 그 부분이 걸렸습니다. 사이버 보안 분야 종사자는 아니지만, 글을 읽다가 어떻게 몇 주 동안 알림을 울리지 않고 계속 시도할 수 있었는지 궁금했습니다. 네트워크 로그에는 오탐이 많다는 건 알지만, 이 정도는 눈에 띄어야 할 것 같습니다. 더 잘 아는 분이 이유를 설명해주실 수 있나요? 이것도 큰 문제 아닌가요?
- @u/_Cyber_Mage — 저희 조직은 하루에 수십만 건의 시도를 봅니다. 네트워크 경계에서 인터넷 트래픽 상당 부분을 차단합니다. Microsoft가 얼마나 많은 시도를 받는지는 상상만 할 수 있겠네요.
- @u/iom2222 — 대단합니다.
- @u/Frank-lemus — 전설이네요! 16살에 벌써 큰 취약점을 찾다니요. 저는 아직 TryHackMe 실습도 혼자 끝내지 못합니다.
- @u/Different_Lab830 — 17조 건이면 지구에 살아 있는 사람 한 명당 약 2,100건입니다. 수치가 지구 인구를 넘어서면 ‘기록’은 그냥 느낌에 가까워지네요.
원문: Faav 블로그 / 번역·요약: Trawling