[보안뉴스 김영명 기자] 카카오톡의 10.4.3 버전에서 원클릭 익스플로잇 취약점이 발견됐다. 이 취약점은 딥링크 유효성 검사로 인해 원격 공격자가 사용자에게 웹뷰(WebView) 내에서 공격자가 제어하는 자바스크립트를 임의로 실행하도록 지시해 다른 사용자의 계정을 탈취, 채팅 메시지를 무단으로 읽을 수 있는 것으로 알려졌다.

▲보안 연구원이 카카오톡 원클릭 잇스플로잇 취약점을 소개하는 동영상[캡처=깃허브 stulle123 블로그]
이번 취약점은 CVE-2023-51219로 명명됐다. 현재 구글 플레이스토어에 등록된 버전은 10.8.3 버전으로 6월 24일에 업데이트된 것으로 표기돼 있다.
이 취약점은 공공 코드 리포지터리인 깃허브(GitHub)에서 stulle123라는 계정을 갖고 있는 외국의 한 보안연구원이 “카카오톡 안드로이드 애플리케이션의 다양한 취약점이 어떻게 사용자의 메시지 공개로 이어질 수 있는지 보여주고 있다”고 설명했다.
종단간 암호화 메시징 비활성화 디폴트가 문제
이번 취약점에 대해 해당 연구원은 “카카오톡에서는 종단간 암호화(End-to-End Encrypted, E2EE) 메시징이 기본적으로 활성화되어 있지 않았다. 카카오톡이 전송 중인 메시지에 접근할 수 있는 일반 채팅방은 많은 사용자들이 선호하는 방식이다. 카카오톡에는 ‘보안 채팅’이라는 옵트인(opt-in) E2EE 기능이 있지만, 그룹 메시징이나 음성 통화와 같은 기능은 지원하지 않는다”고 설명했다.
이번 취약점의 진입 통로는 웹뷰(WebView)에 있다고 이 연구원은 소개했다. ‘웹뷰(WebView)’란 안드로이드 플랫폼에 내장된 애플리케이션으로 2021년 3월에도 구글 안드로이드 스마트폰에서 카카오톡과 네이버 등 모바일 앱의 작동이 멈추는 오류가 발생했을 때 주요 원인으로 꼽히기도 했다.
이 웹뷰는 내보내기가 되며, 딥링크(Deeplink)로 시작할 수 있다. 딥링크란, 모바일 웹상에 있는 링크나 그림을 클릭할 경우 기기 내 관련 앱이나 사전에 정의된 특정 웹페이지가 실행되는 모바일 기술을 말한다.
그리고 자바스크립트가 활성화돼 있으며, 자바스크립트를 통해 내보내지 않은 다른 앱 구성 요소에 데이터를 전송하는 방식을 사용하고 있다. 예를 들어 URI(Uniform Resourcce Identifier, 통합 자원 식별자)는 MyProfileSettingsActivity에서 특정 웹사이트를 로드한다. 하지만 URI는 삭제되지 않아 잠재적으로 모든 앱 구성요소에 액세스할 수 있다.
또한 Authorization HTTP 헤더에서 액세스 토큰이 유출된다. 이는 CommerceBuyActivity 내에서 자체 자바스크립트를 실행하는 방법을 찾으면 사용자의 액세스 토큰을 훔치고 사용자가 악성 kakaotalk://buy 딥링크를 클릭할 때 임의의 앱 구성 요소를 시작할 수 있는 능력을 갖게 된다는 것을 의미한다. 이 연구원은 현재 일부 검증이 진행되고 있기 때문에 공격자가 제어하는 임의의 URL을 로드할 수 없다고 설명했다.
코드를 살펴보면 경로, 쿼리 매개변수와 URL 조각을 제어한다는 것을 알 수 있다. 카카오톡을 사용하는 모든 항목에는 ‘m36725d’라는 문자열이 접두어로 붙는다. 따라서 사용자가 딥링크를 클릭하면 buy[.]kakao[.]com/foo가 CommerceBuyActivity 웹뷰에 로드된다.
이 연구원은 “공격자는 임의의 자바스크립트를 실행해 사용자의 액세스 토큰을 탈취할 수 있다. 그리고 악의적인 딥링크를 제작해 토큰을 공격자가 제어하는 서버로 보낼 수 있다”고 설명했다.

▲CVE 홈페이지에 소개된 CVE-2023-51219 안내[자료=CVE 홈페이지]
개념증명 통한 공격 단계 살펴보니
윈도와 맥 OS용 카카오톡이나 오픈소스 클라이언트인 키위토크(KiwiTalk)를 피해자의 계정에 등록해 비 종단간 암호화된 채팅 메시지를 읽는 것으로 개념증명을 했다. 먼저 공격자가 악의적인 딥링크를 준비하기 위해 파일에 페이로드를 저장, HTTP 서버를 시작하고 다른 터미널 창에서 Netcat(TCP/UDP 프로토콜로 연결된 네트워크상에서 특정 대상과 데이터를 송수신하게 해주는 유틸리티) 수신기를 연다.
다음으로 공격자는 URL을 전송, 피해자가 클릭할 때까지 기다린다. 그리고 액세스 토큰이 Netcat 수신기에서 유출되면, 공격자는 액세스 토큰을 사용해 피해자의 비밀번호를 재설정한다. 마지막으로 공격자는 피해자의 카카오톡 계정을 자신의 기기로 등록할 수 있다.
이 연구원은 “사용자의 메시지를 훔치기 위해 매우 복잡한 익스플로잇 체인이 필요하지 않은 인기 있는 채팅 앱이 여전히 많이 있다”며 “앱 개발자가 사소한 실수를 저지른다면 안드로이드에서 제공하는 강력한 보안 모델과 메시징 암호화도 무용지물이 될 수밖에 없다”고 말했다. 이어 “여러 보안 커뮤니티에서 아시아의 채팅 앱들은 잘 드러나지 않아 이 같은 사실을 알기 힘들다”고 덧붙였다.
[김영명 기자(boan@boannews.com)]
<저작권자: 보안뉴스(www.boannews.com) 무단전재-재배포금지>