한국 최대 모바일 채팅 앱에서 발견된 1-클릭 익스플로잇
(stulle123.github.io)- KakaoTalk Android 앱에서 딥링크, WebView, XSS가 맞물리며 사용자가 악성 링크를 한 번 누르는 것만으로 접근 토큰 유출과 계정 장악까지 이어질 수 있었음
- 핵심 진입점은 KakaoTalk
10.4.3의CommerceBuyActivityWebView였고, 딥링크 검증 부족과 JavaScript 활성화,Authorization헤더 노출이 함께 문제를 만들었음 - 공격 체인은
buy.kakao.com리다이렉트와m.shoppinghow.kakao.com의 DOM 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
CommerceBuyActivityWebView는 공격자에게 유리한 조건을 여러 개 갖고 있었음- 외부로 노출(exported)되어 있고
kakaotalk://buy같은 딥링크로 시작 가능함 settings.setJavaScriptEnabled(true)로 JavaScript가 활성화되어 있음- JavaScript에서
intent://스킴을 통해 외부에 노출되지 않은 앱 컴포넌트로도 데이터를 보낼 수 있음 intent://URI의Component나Selector가null로 정리되지 않아 URI 처리도 부족했음
- 외부로 노출(exported)되어 있고
- 이 WebView는 HTTP 요청의
Authorization헤더에 접근 토큰을 실어 보냈음 - WebView 디버깅이 켜져 있어
chrome://inspect로 동작을 확인할 수 있었고, 외부 주소로 이동시키면 GET 요청과 함께Authorization헤더가 노출됨 - 공격자가 이 WebView 안에서 JavaScript를 실행하면, 악성
kakaotalk://buy딥링크 클릭만으로 사용자의 접근 토큰을 훔칠 수 있었음
URL 검증 우회와 DOM XSS 연결
CommerceBuyActivity는 임의의 공격자 URL을 직접 로드하지 않고, 입력된 딥링크를https://buy.kakao.com으로 시작하는 URL로 조합했음- 예를 들어
kakaotalk://buy/foo는https://buy.kakao.com/foo로 로드됨 - 경로, 쿼리 파라미터, fragment는 공격자가 제어할 수 있었음
- 예를 들어
https://buy.kakao.com/auth/0/cleanFrontRedirect?returnUrl=엔드포인트는 임의의kakao.com도메인으로 리다이렉트할 수 있어,kakao.com하위 도메인에서 XSS를 찾는 공격 범위가 넓어졌음m.shoppinghow.kakao.com에서는 검색 쿼리가innerHTMLsink로 전달되는 엔드포인트가 발견됐고, 간단한 페이로드로 DOM XSS가 가능했음- 이전에 존재하던 저장형 XSS도 발견됐지만, 2024년 5월 기준으로는 수정된 것으로 보인다고 명시됨
- 이 조합으로 사용자가 악성 딥링크를 클릭하면
CommerceBuyActivityWebView 안에서 임의 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가 지시를 내리면 아무도 정면으로 묻지 않고 투덜대며 수행하는 일이 많고, 이런 회사 문화 마케팅을 그대로 믿는 태도가 얕은 우월감으로 이어지는 게 더 씁쓸함
- 한국인이지만 KakaoTalk도 LINE도 Facebook도 안 씀. 좀 별난 경우가 되긴 하지만, 많은 서비스가 SMS 대체 수단을 제공해서 없어도 살 수 있음
- 재미있는 점은 서구권 승차 공유 앱이 한국에서는 잘 안 통하고, 이 회사가 한국의 대표 승차 호출 앱도 만든다는 것임
최근 서울 여행에서 그 앱에 로그인하려고 모바일 채팅 앱 계정을 만들어야 했고, 사용자 경험도 좋지 않았으며 대부분 한국어라 꽤 고생했음
그다지 전문적인 운영이라는 인상은 못 받았음- 몇 년 전 한국에 살았을 때 앱과 서비스 생태계가 따로 형성돼 있는 점이 흥미로웠음
KakaoTalk과 Naver가 서구권의 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 앱을 안정적으로 동작시키기가 어렵기 때문임