TL;DR
- 카카오톡
10.4.3
버전에서 원격 공격자가 WebView에서 임의의 JavaScript를 실행해 HTTP 요청 헤더에 액세스 토큰을 유출할 수 있는 딥 링크 검증 문제가 있음.
- 이 토큰을 사용해 다른 사용자의 계정을 탈취하고 공격자가 제어하는 장치에 등록해 채팅 메시지를 읽을 수 있음.
- 이 버그는 CVE-2023-51219로 할당됨.
배경
- 카카오톡은 1억 이상의 다운로드를 기록한 한국의 가장 인기 있는 채팅 앱임.
- 카카오톡은 기본적으로 종단 간 암호화(E2EE)를 사용하지 않음.
- "Secure Chat"이라는 선택적 E2EE 기능이 있지만 그룹 메시징이나 음성 통화를 지원하지 않음.
Entry Point: CommerceBuyActivity
-
CommerceBuyActivity
WebView는 공격자가 주목할 만한 주요 진입점임.
- 딥 링크로 시작 가능 (
adb shell am start kakaotalk://buy
)
- JavaScript가 활성화됨 (
settings.setJavaScriptEnabled(true);
)
-
intent://
스킴을 지원해 다른 비공개 앱 컴포넌트에 데이터 전송 가능.
-
intent://
URI의 검증이 부족해 잠재적으로 모든 앱 컴포넌트에 접근 가능.
-
Authorization
HTTP 헤더에 액세스 토큰을 유출함.
URL 리디렉션을 통한 DOM XSS
딥 링크를 통한 카카오 메일 계정 탈취
- 악성 딥 링크를 통해 사용자의 액세스 토큰을 공격자 서버로 전송 가능.
- 액세스 토큰을 사용해 피해자의 카카오 메일 계정을 탈취하거나 새로운 메일 계정을 생성해 기존 이메일 주소를 덮어쓸 수 있음.
Burp를 이용한 카카오톡 비밀번호 재설정
- 피해자의 카카오 메일 계정에 접근해 비밀번호 재설정을 시도할 수 있음.
- 2단계 인증(2FA)을 우회하기 위해 Burp를 사용해 요청을 가로채고 수정함.
PoC
- 공격자가 악성 딥 링크를 준비해 피해자가 클릭하면 액세스 토큰을 유출함.
- 유출된 액세스 토큰을 사용해 피해자의 비밀번호를 재설정하고 공격자의 장치를 피해자의 카카오톡 계정에 등록함.
Takeaways
- 여전히 복잡하지 않은 공격 체인으로 사용자의 메시지를 탈취할 수 있는 인기 채팅 앱이 존재함.
- 앱 개발자가 몇 가지 간단한 실수를 하면 Android의 강력한 보안 모델과 메시지 암호화가 도움이 되지 않음.
- 아시아 채팅 앱은 보안 연구 커뮤니티에서 여전히 저평가되고 있음.
GN⁺의 의견
-
보안 취약점의 심각성: 카카오톡과 같은 대중적인 앱에서 발견된 보안 취약점은 사용자 데이터 보호의 중요성을 다시 한번 상기시켜 줌.
-
개발자의 책임: 앱 개발자는 보안 검증을 철저히 하고, 특히 민감한 데이터와 관련된 기능에서는 더욱 신경 써야 함.
-
사용자 교육: 사용자도 의심스러운 링크를 클릭하지 않도록 주의하고, 2단계 인증을 활성화하는 등 보안 의식을 높여야 함.
-
보안 연구의 필요성: 아시아 채팅 앱에 대한 보안 연구가 더 활발히 이루어져야 하며, 이를 통해 더 많은 취약점을 사전에 발견하고 수정할 수 있음.
-
대안 제시: 카카오톡 외에도 Signal, Telegram과 같은 보안 중심의 메시징 앱을 고려해 볼 수 있음.