4 puntos por GN⁺ 2024-06-27 | 1 comentarios | Compartir por WhatsApp
  • En la app Android de KakaoTalk, la combinación de deep links, WebView y XSS podía hacer que con un solo clic en un enlace malicioso se llegara hasta la filtración del token de acceso y la toma de control de la cuenta
  • El punto de entrada clave era el WebView de CommerceBuyActivity en KakaoTalk 10.4.3, donde se combinaron validación insuficiente de deep links, JavaScript habilitado y exposición del encabezado Authorization
  • La cadena de ataque aprovechaba una redirección de buy.kakao.com y un DOM XSS en m.shoppinghow.kakao.com para ejecutar JavaScript arbitrario dentro del WebView
  • El token filtrado podía usarse para acceder a Kakao Mail, restablecer la contraseña y registrar clientes de KakaoTalk para PC/Mac o el cliente KiwiTalk
  • La vulnerabilidad fue asignada como CVE-2023-51219 y, tras el reporte, Kakao Corp. dio de baja buy.kakao.com y eliminó tanto las redirecciones relacionadas como el CommerceBuyActivity vulnerable

Alcance y supuestos de la vulnerabilidad

  • KakaoTalk es la principal app de chat de Corea, con más de 100 millones de descargas en Google Play Store, y funciona como una superapp que incluye pagos, transporte, compras, correo y más
  • Los chats normales no tienen cifrado de extremo a extremo (E2EE) activado por defecto, por lo que Kakao Corp. puede acceder a los mensajes en tránsito
  • Existe una función opcional de E2EE llamada Secure Chat, pero no admite mensajería grupal ni llamadas de voz
  • El objetivo del PoC era registrar KakaoTalk para Windows/macOS o el cliente open source KiwiTalk en la cuenta de la víctima para leer mensajes de chat sin cifrado de extremo a extremo

Punto de entrada: WebView de CommerceBuyActivity

  • El WebView de CommerceBuyActivity tenía varias condiciones favorables para el atacante
    • Estaba expuesto externamente (exported) y podía iniciarse mediante deep links como kakaotalk://buy
    • Tenía JavaScript habilitado con settings.setJavaScriptEnabled(true)
    • Desde JavaScript se podían enviar datos incluso a componentes de la app no expuestos externamente mediante el esquema intent://
    • También había una validación deficiente del URI porque Component y Selector de intent:// no se saneaban a null
  • Este WebView enviaba el token de acceso en el encabezado Authorization de las solicitudes HTTP
  • La depuración del WebView estaba activada, por lo que su comportamiento podía inspeccionarse con chrome://inspect, y al redirigirlo a una dirección externa el encabezado Authorization quedaba expuesto junto con la solicitud GET
  • Si el atacante lograba ejecutar JavaScript dentro de este WebView, podía robar el token de acceso del usuario con solo hacer clic en un deep link malicioso de kakaotalk://buy

Bypass de validación de URL y encadenamiento con DOM XSS

  • CommerceBuyActivity no cargaba directamente una URL arbitraria del atacante, sino que construía una URL que comenzaba con https://buy.kakao.com a partir del deep link recibido
    • Por ejemplo, kakaotalk://buy/foo cargaba https://buy.kakao.com/foo
    • La ruta, los parámetros de consulta y el fragmento podían ser controlados por el atacante
  • El endpoint https://buy.kakao.com/auth/0/cleanFrontRedirect?returnUrl= podía redirigir a cualquier dominio kakao.com, lo que ampliaba el alcance de búsqueda de XSS a subdominios de kakao.com
  • En m.shoppinghow.kakao.com se encontró un endpoint donde la consulta de búsqueda llegaba a un sink de innerHTML, lo que permitía un DOM XSS con una carga simple
  • También se descubrió un XSS almacenado que había existido antes, aunque se aclara que para mayo de 2024 parecía ya corregido
  • Con esta combinación, cuando la víctima hacía clic en un deep link malicioso, se ejecutaba JavaScript arbitrario dentro del WebView de CommerceBuyActivity y el token de acceso del encabezado Authorization podía enviarse al exterior

Acceso a Kakao Mail y restablecimiento de cuenta con el token

  • El token de acceso filtrado de KakaoTalk podía utilizarse para acceder a la cuenta de Kakao Mail de la víctima
  • Tras comprobar si la víctima usaba Kakao Mail, era posible obtener un token separado y acceder a talk.mail.kakao.com
  • Incluso si la víctima no tenía una cuenta de Kakao Mail, se podía crear una nueva a su nombre, y al elegir Set As Primary Email al crear la nueva dirección, la dirección registrada previamente podía sobrescribirse sin verificación adicional
  • Después de acceder a Kakao Mail, el siguiente paso era el restablecimiento de la contraseña de KakaoTalk
    • Los datos adicionales necesarios de la víctima, como correo, apodo y número telefónico, podían obtenerse desde la misma llamada a la API de configuración de cuenta
    • Aunque el proceso de restablecimiento de contraseña en accounts.kakao.com tenía 2FA por SMS, interceptando y modificando solicitudes y respuestas con Burp se podía cambiar al flujo de verificación por correo electrónico
    • El código de verificación podía consultarse en el Kakao Mail de la víctima

Registro de cliente de PC y acceso a mensajes

  • Al iniciar sesión con las credenciales de la víctima en KakaoTalk para Windows/macOS o en KiwiTalk, se requería un segundo factor de autenticación
  • Esta verificación usaba un PIN de 4 dígitos: el PIN se mostraba en la versión de PC para introducirlo en la app móvil, o bien se enviaba a la app móvil para introducirlo en la app de PC
  • El PIN no era fácil de forzar por fuerza bruta, y el endpoint correspondiente tenía limitación de tasa tras 5 intentos
  • Sin embargo, con el token de acceso filtrado era posible enviar o consultar el PIN en el backend de KakaoTalk
  • Mediante este proceso, el atacante podía registrar un dispositivo bajo su control en la cuenta de KakaoTalk de la víctima y completar el PoC para leer mensajes de chat no cifrados de extremo a extremo

Divulgación, corrección y material de investigación

  • La vulnerabilidad fue asignada como CVE-2023-51219
  • El investigador publicó herramientas para que otros investigadores de seguridad pudieran analizar la amplia superficie de ataque de KakaoTalk
  • La vulnerabilidad fue reportada en diciembre de 2023 a través del Kakao Bug Bounty Program
  • El autor del reporte señaló que no recibió recompensa porque esta estaba limitada a ciudadanos coreanos
  • Kakao Corp. retiró de inmediato https://buy.kakao.com, eliminó la redirección /auth/0/cleanFrontRedirect?returnUrl= y en versiones posteriores también eliminó el CommerceBuyActivity vulnerable

1 comentarios

 
GN⁺ 2024-06-27
Opiniones en Hacker News
  • Si vives en Corea, es difícil arreglártelas sin usar Kakao, y como es una app que usa incluso la generación de las abuelas, que tenga tantas fallas de seguridad es preocupante.
    En especial, si la vulnerabilidad hace que el dominio parezca legítimo, a una abuela le sería difícil detectar un enlace sospechoso, y creo que la cultura laboral jerárquica de Corea también influye.
    Un jefe impone una fecha límite innegociable para una funcionalidad; las vulnerabilidades de seguridad no se ven, pero la UI sí, así que recortan lo que puedan y lo lanzan.
    Al final queda una app llena de agujeros de seguridad, y no creo que la arreglen bien hasta que caiga el precio de las acciones de Kakao.
    • Soy coreano, pero no uso KakaoTalk, LINE ni Facebook. Es un caso algo raro, pero muchos servicios ofrecen alternativas por SMS, así que se puede vivir sin eso.
      En cuanto a la seguridad, no creo que sea tanto por la cultura laboral coreana, sino porque las principales empresas de TI agrupadas como Nekarakuba —Naver, Kakao, LINE, Coupang, Woowa Bros— suelen tener una cultura laboral y una compensación muy por encima del promedio.
      Probablemente se acerque más a que, por ser una app para el mercado local, no ha sido examinada lo suficiente como las apps populares a escala mundial. Eso sí, en mi experiencia, la compensación era más baja que en Estados Unidos o que en algunas startups coreanas.
    • Los plazos imposibles y la cultura laboral jerárquica no existen solo en Corea; están en todo el mundo.
      La diferencia parece estar en que, en Corea, el sector gubernamental y los chaebol representan una gran parte del mercado de TI, por lo que no hay mucho espacio para que la cultura startup marque una diferencia.
      Kakao también fue alguna vez una startup cool, pero después de tener éxito da la impresión de que se ha esforzado por imitar a los chaebol.
    • El fenómeno de que los jefes o clientes puedan ver la UI, pero no los problemas de seguridad, no es exclusivo de Corea.
      Puede que por la cultura sea peor en Corea, pero sin duda ocurre también en Occidente y, de hecho, es casi un problema universal.
    • Me pregunto si este problema podría llamar la atención de las noticias coreanas o de los reguladores. Además del precio de la acción, podría haber otras vías para exigir responsabilidades.
    • La cultura laboral jerárquica se usa como una excusa comodín a la que recurren los estadounidenses cuando explican algo que no les gusta de Asia Oriental.
      Basta con pasar unos años en una empresa de oficina estadounidense de cierto tamaño, especialmente en tecnología, finanzas, consultoría o FAANG, para darse cuenta de que en Occidente es lo mismo.
      Ingenieros de nivel medio le siguen la corriente a un VP para entrar al siguiente ciclo de ascensos, y las empresas solo son buenas vendiendo el marketing de “organización horizontal”; en la práctica se parece más a un eslogan publicitario.
      Cuando un PM o un SVP da una orden, muchas veces nadie la cuestiona de frente; se quejan y la ejecutan. Lo más triste es que creer al pie de la letra ese marketing de cultura corporativa termina llevando a una sensación superficial de superioridad.
  • Lo interesante es que las apps occidentales de viajes compartidos no funcionan muy bien en Corea, y esta empresa también hace la principal app de llamado de viajes de Corea.
    En un viaje reciente a Seúl tuve que crearme una cuenta en la app móvil de chat para iniciar sesión en esa app, la experiencia de usuario no fue buena y, como casi todo estaba en coreano, me costó bastante.
    No me dio la impresión de una operación muy profesional.
    • Cuando viví en Corea hace algunos años, me pareció interesante que se hubiera formado un ecosistema propio de apps y servicios.
      KakaoTalk y Naver cumplían casi los roles que tienen WhatsApp/Meta y Google en Occidente.
      Me parece admirable que hayan sobrevivido pese al aumento de la competencia con multinacionales. En muchos otros países, las empresas tecnológicas locales se volvieron casi irrelevantes durante la última década, y eso es una lástima.
    • Cuando fui hace unos 5 años, no podía usar ninguna app de taxis porque no tenía una cuenta bancaria coreana.
      Por eso también era difícil parar un taxi en la calle, y parecía que la mayoría solo aceptaba pasajeros llamados por app.
      Una vez por fin logré contactar a un taxista, pero dijo que no me llevaría por ser “extranjero”; no sé si fue xenofobia real, si no quería pagos en efectivo, si era porque no hablaba coreano o si fue un malentendido.
      Más tarde, en un viaje en taxi que sí salió, la ruta terminó cruzando una montaña hacia el otro lado de la ciudad, así que tuve que llamar a la persona con la que había salido para que le explicara al conductor que el camino estaba mal. Lo veo como uno de los riesgos de ir a un país desconocido sin suficiente preparación.
    • Algo que me sorprendió en Corea fue que había muchísimas alternativas locales a productos tecnológicos que yo creía usados en todo el mundo, y que las versiones globales/estadounidenses casi no habían penetrado el mercado.
      Cuando visité a comienzos de 2015, Google era un ejemplo de eso.
    • No entiendo qué relación tiene el hecho obvio de que una app coreana estuviera “mayoritariamente” en coreano con una mala experiencia de usuario o falta de profesionalismo.
      ¿En qué idioma esperabas que estuviera una app coreana, en francés?
    • Como ya dijeron otros, Uber funciona en Corea, al menos en Seúl.
      Pero entiendo que, más que un Uber real, es una especie de proxy de KakaoTaxi que usa la interfaz de Uber.
  • Hace falta una pequeña corrección. KakaoTalk no es una app “todo en uno” como WeChat.
    La app principal de chat tiene funciones adicionales, como regalos, que hicieron posible esta vulnerabilidad, pero el llamado de taxis no se hace en KakaoTalk, sino en la app de movilidad Kakao T, que también ofrece scooters de renta, bicicletas eléctricas y reservas de trenes y vuelos.
    Tiene integración con la plataforma de pagos KakaoPay, pero el servicio en sí está en una app separada; se parece más a Google en Android, con un ID central para acceder a varios servicios.
    Por eso creo que la razón de que la app tenga tantos puntos de acceso es la integración con sus propios servicios.
    • Eso no es correcto.
      Al igual que WeChat, KakaoPay está lo bastante integrado en KakaoTalk como para que la mayoría de los usuarios use KakaoPay solo dentro de KakaoTalk, no en la app de KakaoPay.
      Que exista una app separada de KakaoPay no cambia mucho: sin la app de KakaoPay también puedes enviar dinero, recibirlo y pagar desde KakaoTalk.
  • Que la recompensa solo esté disponible para coreanos... a estas alturas me hace pensar que se merecen que los hackers les den duro.
    • Incluso para los coreanos, que la recompensa máxima sea de unos 7.000 dólares es absurdamente bajo para una app que parece tener varios problemas de seguridad.
    • Es una estructura que incentiva a vender los bugs.
  • Me recuerda a cuando el fundador de Telegram presumía el talento de su equipo diciendo que un solo desarrollador se encargaba del cliente móvil.
    Resultó que ese cliente estaba lleno de bugs que mostraban mensajes al usuario equivocado.
    Las apps móviles de chat no deberían desarrollarse con el enfoque de “muévete rápido y rompe cosas”, y creo que este es el resultado natural de una app todo en uno como Kakao.
    • Me pregunto si se refiere a que en la app móvil había varias cuentas de usuario agregadas y que los mensajes de una cuenta se mostraban en la otra.
      Si no es eso, parece más un bug del servidor que un bug del cliente.
    • Las apps de chat son difíciles, y las apps competidoras también han tenido muchos bugs similares, así que no me parece que esto por sí solo sea prueba de mala calidad.
      Además, Telegram ha sido una de las apps de chat más estables, completas y fáciles de usar que he probado.
    • En defensa de Telegram, cosas similares han ocurrido muchas veces incluso en grandes servicios como Facebook, Google y Apple.
    • El software hecho por diseño por comité también puede tener bugs espantosos.
    • Kakao definitivamente no se mueve rápido.
  • Es impactante que haya reportado la vulnerabilidad en diciembre de 2023 a través del Bug Bounty Program de Kakao, pero que no recibiera nada porque solo los coreanos pueden recibir recompensas.
    • Al menos la restricción está publicada en el sitio de bug bounty.
      Dice que debes ser “coreano residente en el país o en el extranjero”.
      https://bugbounty.kakao.com/home
      Habría sido peor si hubieras enviado el reporte esperando que te pagaran y luego te enteraras de que estaba limitado a ciudadanos coreanos.
      Además, las recompensas son muy bajas: desde un mínimo de 50.000 wones, unos 35 dólares, hasta un máximo de 10 millones de wones, unos 7.100 dólares.
    • En Corea este tipo de cosas es bastante común.
      Como extranjero, durante los últimos 9 años construyendo una startup en Seúl, me pasó algo parecido varias veces.
  • Tenemos que dar un paso atrás y repensar los métodos actuales de ingeniería de software.
    Hay que preguntarse si están pensados para el largo plazo o para beneficios de corto plazo que quedan en manos de unos pocos.
  • Me pregunto cuánto habrá afectado esta vulnerabilidad al personal militar estadounidense estacionado en Corea.
    ¿Se sabe si fue explotada en entornos reales?
  • Lleva más de 10 años en servicio y todavía no tiene versión web, pero viendo esta noticia quizá eso sea algo bueno.
    • Aun así, me gustaría que hubiera una versión web. Es difícil hacer que la app de Kakao funcione de forma estable en Linux con wine.