4P by GN⁺ | ★ favorite | 댓글 1개
  • KakaoTalk Android 앱에서 딥링크, WebView, XSS가 맞물리며 사용자가 악성 링크를 한 번 누르는 것만으로 접근 토큰 유출과 계정 장악까지 이어질 수 있었음
  • 핵심 진입점은 KakaoTalk 10.4.3CommerceBuyActivity WebView였고, 딥링크 검증 부족과 JavaScript 활성화, Authorization 헤더 노출이 함께 문제를 만들었음
  • 공격 체인은 buy.kakao.com 리다이렉트와 m.shoppinghow.kakao.comDOM XSS를 이용해 WebView 안에서 임의 JavaScript를 실행하는 방식임
  • 유출된 토큰은 Kakao Mail 접근, 비밀번호 재설정, PC/Mac용 KakaoTalk 또는 KiwiTalk 클라이언트 등록에 활용될 수 있었음
  • 취약점은 CVE-2023-51219로 지정됐고, 신고 이후 Kakao Corp.는 buy.kakao.com을 내리고 관련 리다이렉트와 취약한 CommerceBuyActivity를 제거함

취약점의 범위와 전제

  • KakaoTalk은 Google Playstore에서 1억 회 이상 다운로드된 한국의 대표 채팅 앱이며, 결제, 차량 호출, 쇼핑, 이메일 등을 포함한 올인원 앱 성격을 가짐
  • 일반 채팅방은 종단간 암호화(E2EE)가 기본으로 켜져 있지 않아, Kakao Corp.가 전송 중 메시지에 접근할 수 있는 구조임
  • 선택형 E2EE 기능인 Secure Chat은 있지만 그룹 메시징이나 음성 통화는 지원하지 않음
  • PoC의 목표는 피해자 계정에 KakaoTalk for Windows/macOS 또는 오픈소스 클라이언트 KiwiTalk을 등록해 비종단간 암호화 채팅 메시지를 읽는 것이었음

진입점: CommerceBuyActivity WebView

  • CommerceBuyActivity WebView는 공격자에게 유리한 조건을 여러 개 갖고 있었음
    • 외부로 노출(exported)되어 있고 kakaotalk://buy 같은 딥링크로 시작 가능함
    • settings.setJavaScriptEnabled(true)로 JavaScript가 활성화되어 있음
    • JavaScript에서 intent:// 스킴을 통해 외부에 노출되지 않은 앱 컴포넌트로도 데이터를 보낼 수 있음
    • intent:// URI의 ComponentSelectornull로 정리되지 않아 URI 처리도 부족했음
  • 이 WebView는 HTTP 요청의 Authorization 헤더에 접근 토큰을 실어 보냈음
  • WebView 디버깅이 켜져 있어 chrome://inspect로 동작을 확인할 수 있었고, 외부 주소로 이동시키면 GET 요청과 함께 Authorization 헤더가 노출됨
  • 공격자가 이 WebView 안에서 JavaScript를 실행하면, 악성 kakaotalk://buy 딥링크 클릭만으로 사용자의 접근 토큰을 훔칠 수 있었음

URL 검증 우회와 DOM XSS 연결

  • CommerceBuyActivity는 임의의 공격자 URL을 직접 로드하지 않고, 입력된 딥링크를 https://buy.kakao.com으로 시작하는 URL로 조합했음
    • 예를 들어 kakaotalk://buy/foohttps://buy.kakao.com/foo로 로드됨
    • 경로, 쿼리 파라미터, fragment는 공격자가 제어할 수 있었음
  • https://buy.kakao.com/auth/0/cleanFrontRedirect?returnUrl= 엔드포인트는 임의의 kakao.com 도메인으로 리다이렉트할 수 있어, kakao.com 하위 도메인에서 XSS를 찾는 공격 범위가 넓어졌음
  • m.shoppinghow.kakao.com에서는 검색 쿼리가 innerHTML sink로 전달되는 엔드포인트가 발견됐고, 간단한 페이로드로 DOM XSS가 가능했음
  • 이전에 존재하던 저장형 XSS도 발견됐지만, 2024년 5월 기준으로는 수정된 것으로 보인다고 명시됨
  • 이 조합으로 사용자가 악성 딥링크를 클릭하면 CommerceBuyActivity WebView 안에서 임의 JavaScript가 실행되고, Authorization 헤더의 접근 토큰이 외부로 전송될 수 있었음

토큰으로 Kakao Mail과 계정 재설정에 접근

  • 유출된 KakaoTalk 접근 토큰은 피해자의 Kakao Mail 계정 접근에 활용될 수 있었음
  • 피해자가 Kakao Mail을 사용 중인지 확인한 뒤 별도 토큰을 받아 talk.mail.kakao.com에 접근하는 흐름이 가능했음
  • 피해자에게 Kakao Mail 계정이 없어도 피해자 명의로 새 계정을 만들 수 있었고, 새 이메일 주소 생성 시 Set As Primary Email을 선택하면 기존 등록 이메일 주소가 추가 확인 없이 덮어써질 수 있었음
  • Kakao Mail 접근 이후에는 KakaoTalk 비밀번호 재설정이 다음 단계였음
    • 추가로 필요한 피해자의 이메일 주소, 닉네임, 전화번호는 같은 계정 설정 API 호출에서 얻을 수 있었음
    • accounts.kakao.com의 비밀번호 재설정 과정에는 SMS 2FA가 있었지만, Burp로 요청과 응답을 가로채고 수정해 이메일 인증 흐름으로 바꿀 수 있었음
    • 인증 코드는 피해자의 Kakao Mail에서 확인 가능했음

PC 클라이언트 등록과 메시지 접근

  • 피해자의 자격 증명으로 KakaoTalk for Windows/macOS 또는 KiwiTalk에 로그인하면 두 번째 인증 요소가 필요했음
  • 이 인증은 4자리 PIN 방식이며, PIN이 PC 버전에 표시되어 모바일 앱에 입력되거나 반대로 모바일 앱에 전송되어 PC 앱에 입력되는 구조였음
  • PIN은 무차별 대입하기 어려웠고, 관련 엔드포인트에는 5회 시도 후 차단되는 속도 제한이 있었음
  • 하지만 유출된 접근 토큰으로 KakaoTalk 백엔드에 PIN을 제출하거나 조회할 수 있었음
  • 이 과정을 통해 공격자 제어 기기를 피해자 KakaoTalk 계정에 등록하고, 비종단간 암호화된 채팅 메시지를 읽는 PoC가 완성됨

공개, 수정, 연구 자료

  • 취약점은 CVE-2023-51219로 지정됨
  • 연구자는 다른 보안 연구자가 KakaoTalk의 넓은 공격 표면을 분석할 수 있도록 도구를 공개함
  • 취약점은 2023년 12월 Kakao Bug Bounty Program을 통해 신고됨
  • 신고자는 보상 대상이 한국인으로 제한되어 있어 보상은 받지 못했다고 밝힘
  • Kakao Corp.는 즉시 https://buy.kakao.com을 내리고 /auth/0/cleanFrontRedirect?returnUrl= 리다이렉트를 제거했으며, 이후 버전에서 취약한 CommerceBuyActivity도 제거함

댓글과 토론

Hacker News 의견들
  • 한국에 살면 Kakao를 안 쓰고 지내기 어렵고, 할머니 세대까지도 쓰는 앱이라 보안 구멍이 많다는 건 우려할 만함
    특히 도메인이 정상처럼 보이는 취약점이면 할머니가 수상한 링크를 알아차리기 어렵고, 한국의 위계적인 업무 문화도 한몫한다고 봄
    상사가 기능 마감일을 협상 불가능하게 던지고, 보안 취약점은 눈에 안 보이지만 UI는 보이니 대충 잘라내서 출시하게 됨
    결국 보안 구멍 많은 앱이 되고, Kakao 주가가 떨어지기 전까지는 제대로 고치지 않을 것 같음
    • 한국인이지만 KakaoTalk도 LINE도 Facebook도 안 씀. 좀 별난 경우가 되긴 하지만, 많은 서비스가 SMS 대체 수단을 제공해서 없어도 살 수 있음
      보안 쪽은 한국의 업무 문화 때문이라기보다, 네카라쿠배로 묶이는 Naver, Kakao, LINE, Coupang, Woowa Bros 같은 주요 IT 기업들이 평균보다 훨씬 나은 업무 문화와 보상을 가진 편이기 때문이라고 봄
      아마 국내용 앱이라 전 세계적으로 인기 있는 앱들만큼 충분히 검증받지 못한 쪽에 가까움. 다만 내 경험상 보상은 미국이나 일부 한국 스타트업보다 낮았음
    • 불가능한 마감과 위계적인 업무 문화는 한국에만 있는 게 아니라 전 세계에 있음
      차이는 한국에서 정부 부문과 재벌이 IT 시장의 큰 비중을 차지해서, 스타트업 문화가 차이를 만들 공간이 별로 없다는 데 있어 보임
      Kakao도 한때는 멋진 스타트업이었지만, 성공한 뒤로는 재벌을 따라 하려 애써 온 느낌임
    • 상사나 고객이 UI는 볼 수 있지만 보안 문제는 못 보는 현상은 한국만의 일이 아님
      문화 때문에 한국에서 더 심할 수는 있어도, 서구권에서도 분명히 일어나며 사실상 보편적인 문제에 가깝다
    • 이 문제가 한국 뉴스나 규제기관에 잡힐 만한지 궁금함. 주가 말고도 책임을 묻는 경로가 있을 수 있음
    • 위계적인 업무 문화는 미국인들이 동아시아에서 마음에 안 드는 걸 설명할 때 꺼내는 만능 핑계처럼 쓰임
      미국의 어느 정도 규모 있는 사무직 회사, 특히 기술·금융·컨설팅이나 FAANG에서 몇 년만 있어 봐도 서구권도 똑같다는 걸 알 수 있음
      중간급 엔지니어들이 다음 승진 주기에 들어가려고 VP에게 맞장구치고, 회사들은 “수평적 조직” 마케팅을 잘할 뿐 실제로는 홍보 문구에 가까움
      PM이나 SVP가 지시를 내리면 아무도 정면으로 묻지 않고 투덜대며 수행하는 일이 많고, 이런 회사 문화 마케팅을 그대로 믿는 태도가 얕은 우월감으로 이어지는 게 더 씁쓸함
  • 재미있는 점은 서구권 승차 공유 앱이 한국에서는 잘 안 통하고, 이 회사가 한국의 대표 승차 호출 앱도 만든다는 것임
    최근 서울 여행에서 그 앱에 로그인하려고 모바일 채팅 앱 계정을 만들어야 했고, 사용자 경험도 좋지 않았으며 대부분 한국어라 꽤 고생했음
    그다지 전문적인 운영이라는 인상은 못 받았음
    • 몇 년 전 한국에 살았을 때 앱과 서비스 생태계가 따로 형성돼 있는 점이 흥미로웠음
      KakaoTalkNaver가 서구권의 WhatsApp/Meta와 Google 같은 역할을 거의 맡고 있었음
      다국적 기업과의 경쟁이 커졌는데도 살아남은 건 훌륭하다고 봄. 다른 많은 나라에서는 지난 10년 동안 현지 기술 기업들이 거의 의미 없어졌고, 그건 아쉬운 일임
    • 5년쯤 전 갔을 때는 한국 은행 계좌가 없어서 택시 앱을 전혀 쓸 수 없었음
      그래서 길에서 택시를 잡는 것도 어려웠고, 대부분 앱 호출 손님만 태우는 것처럼 보였음
      한 번은 겨우 택시 기사와 접촉했는데 “외국인”이라 안 태우겠다고 했고, 실제 혐오였는지 현금 결제가 싫었던 건지 한국어가 안 통해서였는지 오해였는지는 모르겠음
      나중에 성공한 택시 탑승도 도시 반대편으로 산을 넘어가는 경로가 되어, 데이트했던 사람에게 전화해 기사에게 길이 틀렸다고 설명해 달라고 해야 했음. 준비 부족으로 낯선 나라에 가면 생기는 위험이라고 봄
    • 한국에서 놀랐던 점은 전 세계적으로 쓰인다고 생각했던 기술 제품에 현지 대안이 매우 많고, 글로벌/미국판은 시장 침투가 거의 없었다는 것임
      2015년 초에 방문했을 때 Google이 그런 사례였음
    • 한국 앱이 “대부분” 한국어였다는 상식적인 사실이 사용자 경험이나 전문성 부족과 무슨 관련이 있는지 모르겠음
      한국 앱이 무슨 언어로 되어 있길 기대한 건지, 프랑스어였나?
    • 다른 사람들이 이미 말했듯이 Uber는 한국, 적어도 서울에서는 동작함
      다만 진짜 Uber라기보다는 Uber 인터페이스를 쓰는 KakaoTaxi 프록시에 가깝다고 알고 있음
  • 작은 정정이 필요함. KakaoTalk은 WeChat 같은 “올인원” 앱은 아님
    메인 채팅 앱에 선물하기처럼 이번 취약점을 가능하게 한 부가 기능은 있지만, 택시 호출은 KakaoTalk이 아니라 렌털 스쿠터, 전기자전거, 기차·항공 예약도 제공하는 모빌리티 앱 Kakao T에서 함
    결제 플랫폼 KakaoPay와 연동은 있지만 서비스 자체는 별도 앱에 있고, 중앙 ID로 여러 서비스에 접근하는 Android의 Google에 더 가까움
    그래서 앱에 접근 지점이 많은 이유도 자체 서비스 연동 때문일 거라고 봄
    • 이건 정확하지 않음
      WeChat처럼 KakaoPay는 KakaoTalk에 충분히 통합돼 있어서, 대다수 사용자는 KakaoPay 앱이 아니라 KakaoTalk 안에서만 KakaoPay를 씀
      별도 KakaoPay 앱이 있다는 사실은 큰 영향이 없고, KakaoPay 앱 없이도 KakaoTalk에서 송금, 수취, 결제를 할 수 있음
  • 보상 대상이 한국인만 가능하다니, 이쯤 되면 해커들에게 당해도 싸다는 생각이 듦
    • 한국인에게도 최대 보상금이 약 7,000달러라니, 여러 보안 문제가 있어 보이는 앱치고는 터무니없이 낮음
    • 버그를 팔도록 부추기는 구조임
  • Telegram 창업자가 모바일 클라이언트를 개발자 한 명이 맡았다며 팀의 재능을 자랑하던 일이 떠오름
    알고 보니 그 클라이언트는 잘못된 사용자에게 메시지를 보여주는 버그가 가득했음
    모바일 채팅 앱은 “빠르게 움직이고 망가뜨리기” 식으로 개발하면 안 되는데, Kakao 같은 올인원 앱의 자연스러운 결과가 이런 모습이라고 봄
    • 모바일 앱에 여러 사용자 계정이 추가돼 있고, 한 계정의 메시지를 다른 계정 쪽에 보여줬다는 뜻인지 궁금함
      그게 아니라면 클라이언트 버그라기보다 서버 버그에 더 가까워 보임
    • 채팅 앱은 어렵고, 경쟁 앱들도 비슷한 버그가 많았기 때문에 이것만으로 품질이 나쁘다는 증거로 보이진 않음
      그리고 Telegram은 지금까지 써 본 채팅 앱 중 가장 안정적이고, 기능이 풍부하며, 쓰기 쉬운 편이었음
    • Telegram을 변호하자면 비슷한 일은 Facebook, Google, Apple 같은 대형 서비스에서도 많이 일어났음
    • 위원회식 설계로 만든 소프트웨어도 끔찍한 버그를 가질 수 있음
    • Kakao는 확실히 빠르게 움직이진 않음
  • Kakao의 Bug Bounty Program으로 2023년 12월 취약점을 신고했지만, 보상은 한국인만 받을 수 있어서 아무것도 못 받았다는 건 충격적임
    • 적어도 버그 바운티 사이트에 제한이 공개되어 있긴 함
      “국내외 거주 한국인”이어야 한다고 되어 있음
      https://bugbounty.kakao.com/home
      돈을 받을 수 있다고 기대하고 제출했다가 나중에 한국 시민권자로 제한된다는 걸 알았다면 더 나빴을 것임
      덧붙이면 보상금도 매우 낮아서, 최소 5만 원, 약 35달러부터 최대 1,000만 원, 약 7,100달러 수준임
    • 한국에서는 이런 일이 꽤 일반적임
      외국인으로서 지난 9년 동안 서울에서 스타트업을 만들며 비슷한 일을 여러 번 겪었음
  • 요즘의 소프트웨어 공학 방식을 한 발 물러서서 다시 생각해 봐야 함
    장기전을 위한 것인지, 소수에게 돌아가는 단기 이익을 위한 것인지 따져야 함
  • 한국에 주둔한 미군 관계자들이 이 취약점에 얼마나 영향을 받았을지 궁금함
    실제 환경에서 악용됐는지 알려진 게 있나?
  • 서비스한 지 10년도 넘었는데 아직도 웹 버전이 없지만, 이번 뉴스를 보면 오히려 다행일 수도 있음
    • 그래도 웹 버전이 있었으면 좋겠음. Linux에서 wine으로 Kakao 앱을 안정적으로 동작시키기가 어렵기 때문임