4P by neo 11일전 | favorite | 댓글과 토론

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⁺의 의견

  1. 보안 취약점의 심각성: 카카오톡과 같은 대중적인 앱에서 발견된 보안 취약점은 사용자 데이터 보호의 중요성을 다시 한번 상기시켜 줌.
  2. 개발자의 책임: 앱 개발자는 보안 검증을 철저히 하고, 특히 민감한 데이터와 관련된 기능에서는 더욱 신경 써야 함.
  3. 사용자 교육: 사용자도 의심스러운 링크를 클릭하지 않도록 주의하고, 2단계 인증을 활성화하는 등 보안 의식을 높여야 함.
  4. 보안 연구의 필요성: 아시아 채팅 앱에 대한 보안 연구가 더 활발히 이루어져야 하며, 이를 통해 더 많은 취약점을 사전에 발견하고 수정할 수 있음.
  5. 대안 제시: 카카오톡 외에도 Signal, Telegram과 같은 보안 중심의 메시징 앱을 고려해 볼 수 있음.