4 points par GN⁺ 2024-06-27 | 1 commentaires | Partager sur WhatsApp
  • Dans l’application Android KakaoTalk, l’enchaînement de deep links, de WebView et de XSS pouvait mener à une fuite de jeton d’accès puis à la prise de contrôle d’un compte dès qu’un utilisateur cliquait une seule fois sur un lien malveillant
  • Le principal point d’entrée était la WebView CommerceBuyActivity de KakaoTalk 10.4.3 ; le problème venait de la combinaison d’une validation insuffisante des deep links, de JavaScript activé et de l’exposition de l’en-tête Authorization
  • La chaîne d’attaque utilisait une redirection de buy.kakao.com et une DOM XSS sur m.shoppinghow.kakao.com afin d’exécuter du JavaScript arbitraire dans la WebView
  • Le jeton divulgué pouvait servir à accéder à Kakao Mail, à réinitialiser le mot de passe et à enregistrer un client KakaoTalk pour PC/Mac ou KiwiTalk
  • La vulnérabilité a reçu l’identifiant CVE-2023-51219 et, après le signalement, Kakao Corp. a désactivé buy.kakao.com et supprimé la redirection concernée ainsi que la CommerceBuyActivity vulnérable

Portée et prérequis de la vulnérabilité

  • KakaoTalk est l’application de chat emblématique de Corée, téléchargée plus de 100 millions de fois sur Google Play, et possède le caractère d’une application tout-en-un intégrant paiement, VTC, shopping, e-mail, etc.
  • Le chiffrement de bout en bout (E2EE) n’est pas activé par défaut dans les salons de discussion classiques, ce qui signifie que Kakao Corp. peut techniquement accéder aux messages en transit
  • Il existe une fonction optionnelle d’E2EE, Secure Chat, mais elle ne prend pas en charge les messages de groupe ni les appels vocaux
  • L’objectif du PoC était d’enregistrer KakaoTalk for Windows/macOS ou le client open source KiwiTalk sur le compte de la victime afin de lire les messages de chat non chiffrés de bout en bout

Point d’entrée : la WebView CommerceBuyActivity

  • La WebView CommerceBuyActivity réunissait plusieurs conditions favorables à l’attaquant
    • Elle était exposée à l’extérieur (exported) et pouvait être lancée via des deep links comme kakaotalk://buy
    • JavaScript était activé avec settings.setJavaScriptEnabled(true)
    • Depuis JavaScript, il était possible d’envoyer des données à des composants de l’application non exposés à l’extérieur via le schéma intent://
    • Le traitement des URI était également insuffisant, car le Component ou le Selector des URI intent:// n’était pas nettoyé à null
  • Cette WebView envoyait un jeton d’accès dans l’en-tête Authorization des requêtes HTTP
  • Le débogage WebView était activé, ce qui permettait d’observer son comportement via chrome://inspect ; en la redirigeant vers une adresse externe, l’en-tête Authorization était exposé avec la requête GET
  • Si un attaquant parvenait à exécuter du JavaScript dans cette WebView, il pouvait voler le jeton d’accès de l’utilisateur au simple clic sur un deep link kakaotalk://buy malveillant

Contournement de la validation d’URL et combinaison avec une DOM XSS

  • CommerceBuyActivity ne chargeait pas directement une URL arbitraire de l’attaquant, mais construisait à partir du deep link fourni une URL commençant par https://buy.kakao.com
    • Par exemple, kakaotalk://buy/foo était chargé comme https://buy.kakao.com/foo
    • Le chemin, les paramètres de requête et le fragment pouvaient être contrôlés par l’attaquant
  • L’endpoint https://buy.kakao.com/auth/0/cleanFrontRedirect?returnUrl= pouvait rediriger vers n’importe quel domaine kakao.com, ce qui élargissait le périmètre d’attaque à la recherche de XSS dans les sous-domaines de kakao.com
  • Sur m.shoppinghow.kakao.com, un endpoint a été découvert où la requête de recherche était transmise à un sink innerHTML, permettant une DOM XSS avec une charge utile simple
  • Une XSS stockée qui existait auparavant a aussi été découverte, mais il est précisé qu’elle semblait corrigée en mai 2024
  • Avec cette combinaison, lorsqu’un utilisateur cliquait sur un deep link malveillant, du JavaScript arbitraire s’exécutait dans la WebView CommerceBuyActivity et le jeton d’accès de l’en-tête Authorization pouvait être envoyé vers l’extérieur

Accès à Kakao Mail et réinitialisation du compte avec le jeton

  • Le jeton d’accès KakaoTalk divulgué pouvait être utilisé pour accéder au compte Kakao Mail de la victime
  • Il était possible de vérifier si la victime utilisait Kakao Mail, puis d’obtenir un jeton séparé pour accéder à talk.mail.kakao.com
  • Même si la victime n’avait pas de compte Kakao Mail, il était possible d’en créer un à son nom ; en choisissant Set As Primary Email lors de la création de la nouvelle adresse e-mail, l’adresse e-mail précédemment enregistrée pouvait être remplacée sans vérification supplémentaire
  • Après l’accès à Kakao Mail, l’étape suivante était la réinitialisation du mot de passe KakaoTalk
    • Les informations supplémentaires nécessaires sur la victime — adresse e-mail, pseudonyme et numéro de téléphone — pouvaient être obtenues via le même appel à l’API des paramètres de compte
    • Le processus de réinitialisation du mot de passe sur accounts.kakao.com incluait une 2FA par SMS, mais en interceptant et modifiant les requêtes et réponses avec Burp, il était possible de basculer vers un flux de vérification par e-mail
    • Le code de vérification pouvait être consulté dans le Kakao Mail de la victime

Enregistrement du client PC et accès aux messages

  • Une connexion à KakaoTalk for Windows/macOS ou KiwiTalk avec les identifiants de la victime nécessitait un second facteur d’authentification
  • Cette authentification reposait sur un PIN à 4 chiffres : le PIN était soit affiché dans la version PC et saisi dans l’application mobile, soit envoyé à l’application mobile et saisi dans l’application PC
  • Le PIN était difficile à brute-forcer, et les endpoints associés appliquaient une limitation de débit avec blocage après 5 tentatives
  • Cependant, le jeton d’accès divulgué permettait de soumettre ou de récupérer le PIN auprès du backend KakaoTalk
  • Ce processus permettait de terminer le PoC : enregistrer un appareil contrôlé par l’attaquant sur le compte KakaoTalk de la victime et lire les messages de chat non chiffrés de bout en bout

Divulgation, correctifs et ressources de recherche

  • La vulnérabilité a reçu l’identifiant CVE-2023-51219
  • Le chercheur a publié des outils afin de permettre à d’autres chercheurs en sécurité d’analyser la vaste surface d’attaque de KakaoTalk
  • La vulnérabilité a été signalée en décembre 2023 via le Kakao Bug Bounty Program
  • L’auteur du signalement indique ne pas avoir reçu de récompense, celle-ci étant réservée aux personnes coréennes
  • Kakao Corp. a immédiatement désactivé https://buy.kakao.com, supprimé la redirection /auth/0/cleanFrontRedirect?returnUrl=, puis retiré la CommerceBuyActivity vulnérable dans une version ultérieure

1 commentaires

 
GN⁺ 2024-06-27
Avis de Hacker News
  • Quand on vit en Corée, il est difficile de se passer de Kakao, et comme c’est une app utilisée jusqu’à la génération des grands-mères, le fait qu’elle comporte beaucoup de failles de sécurité est préoccupant
    Surtout si la vulnérabilité concerne un domaine qui semble légitime : il est difficile pour une grand-mère de repérer un lien suspect, et je pense que la culture de travail hiérarchique en Corée joue aussi un rôle
    Un supérieur impose une date limite de fonctionnalité non négociable ; les vulnérabilités de sécurité ne se voient pas, alors que l’UI, elle, se voit, donc on rogne à la va-vite et on sort le produit
    Au final, ça donne une app pleine de failles, et je doute qu’ils corrigent vraiment le problème tant que l’action Kakao ne baisse pas
    • Je suis coréen, mais je n’utilise ni KakaoTalk, ni LINE, ni Facebook. Ça fait de moi un cas un peu atypique, mais beaucoup de services proposent des solutions de remplacement par SMS, donc on peut vivre sans
      Pour la sécurité, je pense que ce n’est pas tant dû à la culture de travail coréenne : les grandes entreprises IT regroupées sous le terme « Neka-rakubae » — Naver, Kakao, LINE, Coupang, Woowa Bros — ont en général une culture de travail et une rémunération bien meilleures que la moyenne
      C’est sans doute plutôt parce que c’est une app destinée au marché national, donc elle n’a pas été autant éprouvée que les apps populaires dans le monde entier. Cela dit, d’après mon expérience, la rémunération y était inférieure à celle des États-Unis ou de certaines startups coréennes
    • Les délais impossibles et la culture de travail hiérarchique n’existent pas qu’en Corée, on les trouve partout dans le monde
      La différence semble être qu’en Corée, le secteur public et les chaebols représentent une grande partie du marché IT, ce qui laisse peu de place à une culture startup capable de faire la différence
      Kakao a aussi été une startup cool à une époque, mais après son succès, elle a donné l’impression de s’efforcer d’imiter les chaebols
    • Le fait que les chefs ou les clients puissent voir l’UI mais pas les problèmes de sécurité n’est pas propre à la Corée
      La culture peut rendre le phénomène plus marqué en Corée, mais il existe clairement aussi en Occident ; c’est en fait presque un problème universel
    • Je me demande si cette affaire est susceptible d’être reprise par les médias coréens ou par les régulateurs. Il peut y avoir des voies de responsabilisation autres que le cours de l’action
    • La culture de travail hiérarchique sert un peu de prétexte passe-partout aux Américains pour expliquer ce qui leur déplaît en Asie de l’Est
      Il suffit de passer quelques années dans une entreprise de bureau américaine d’une certaine taille, surtout dans la tech, la finance, le conseil ou chez FAANG, pour voir que l’Occident est pareil
      Les ingénieurs de niveau intermédiaire acquiescent aux VP pour être dans le prochain cycle de promotion, et les entreprises savent très bien vendre le concept d’« organisation horizontale », mais en pratique cela relève surtout du slogan marketing
      Quand un PM ou un SVP donne une consigne, il arrive souvent que personne ne pose frontalement la question et que tout le monde l’exécute en râlant ; le plus triste est que croire littéralement ce marketing de culture d’entreprise mène à un sentiment de supériorité assez superficiel
  • Ce qui est intéressant, c’est que les apps occidentales de VTC prennent mal en Corée, et que cette entreprise développe aussi la principale app de réservation de courses du pays
    Lors d’un récent voyage à Séoul, j’ai dû créer un compte sur l’app de messagerie mobile pour me connecter à cette app ; l’expérience utilisateur n’était pas bonne, et comme c’était en grande partie en coréen, j’ai pas mal galéré
    Ça ne m’a pas donné l’impression d’un service très professionnel
    • Quand je vivais en Corée il y a quelques années, j’ai trouvé intéressant que l’écosystème des apps et services se soit développé séparément
      KakaoTalk et Naver y jouaient à peu près les rôles de WhatsApp/Meta et Google en Occident
      Je trouve remarquable qu’ils aient survécu malgré la concurrence accrue des multinationales. Dans beaucoup d’autres pays, les entreprises tech locales sont devenues quasiment insignifiantes au cours de la dernière décennie, et c’est dommage
    • Quand j’y suis allé il y a environ cinq ans, je n’avais pas de compte bancaire coréen, donc je ne pouvais utiliser aucune app de taxi
      Il était donc aussi difficile de héler un taxi dans la rue, et la plupart semblaient ne prendre que des clients appelés via l’app
      Une fois, j’ai finalement réussi à entrer en contact avec un chauffeur de taxi, mais il a refusé de me prendre parce que j’étais « étranger » ; je ne sais pas si c’était vraiment de la xénophobie, s’il ne voulait pas de paiement en espèces, si c’était à cause de la barrière de la langue ou un malentendu
      La course en taxi que j’ai finalement réussi à faire a ensuite pris un itinéraire traversant la montagne vers l’autre côté de la ville, et j’ai dû appeler la personne avec qui j’avais rendez-vous pour lui demander d’expliquer au chauffeur qu’il se trompait de route. C’est le genre de risque qu’on prend quand on va dans un pays inconnu sans assez de préparation
    • Ce qui m’a surpris en Corée, c’est qu’il y avait énormément d’alternatives locales à des produits tech que je pensais utilisés dans le monde entier, et que les versions globales/américaines avaient une pénétration de marché quasi inexistante
      Lors de ma visite début 2015, Google en était un exemple
    • Je ne vois pas en quoi le fait évident qu’une app coréenne soit « majoritairement » en coréen a un rapport avec l’expérience utilisateur ou un manque de professionnalisme
      Dans quelle langue s’attendait-on à ce qu’une app coréenne soit, en français ?
    • Comme d’autres l’ont déjà dit, Uber fonctionne en Corée, au moins à Séoul
      Mais d’après ce que je sais, ce n’est pas vraiment Uber : c’est plutôt un proxy KakaoTaxi utilisant l’interface Uber
  • Petite correction nécessaire. KakaoTalk n’est pas une app « tout-en-un » comme WeChat
    L’app de messagerie principale comporte des fonctionnalités additionnelles, comme l’envoi de cadeaux, qui ont rendu possible cette vulnérabilité, mais l’appel de taxi se fait dans Kakao T, une app de mobilité qui propose aussi des scooters en location, des vélos électriques et des réservations de train et d’avion, pas dans KakaoTalk
    Il existe une intégration avec la plateforme de paiement KakaoPay, mais le service lui-même se trouve dans une app séparée ; c’est davantage comparable à Google sur Android, avec un identifiant central donnant accès à plusieurs services
    C’est probablement pour cela que l’app comporte autant de points d’accès : à cause de l’intégration avec ses propres services
    • Ce n’est pas exact
      Comme WeChat, KakaoPay est suffisamment intégré à KakaoTalk pour que la plupart des utilisateurs utilisent KakaoPay uniquement dans KakaoTalk, et non via l’app KakaoPay
      Le fait qu’il existe une app KakaoPay séparée ne change pas grand-chose : on peut envoyer, recevoir et effectuer des paiements dans KakaoTalk sans installer l’app KakaoPay
  • Dire que seuls les Coréens peuvent recevoir une récompense, à ce stade, on se dit presque qu’ils méritent de se faire pirater
    • Même pour les Coréens, une récompense maximale d’environ 7 000 dollars est absurdement basse pour une app qui semble avoir plusieurs problèmes de sécurité
    • C’est une structure qui incite à vendre les bugs
  • Ça me rappelle quand le fondateur de Telegram se vantait du talent de son équipe en disant qu’un seul développeur s’occupait du client mobile
    Il s’est avéré que ce client était rempli de bugs qui montraient des messages au mauvais utilisateur
    Les apps de messagerie mobile ne devraient pas être développées façon « avancer vite et casser des choses », mais je pense que c’est le résultat naturel d’une app tout-en-un comme Kakao
    • Je me demande si cela veut dire que plusieurs comptes utilisateur étaient ajoutés dans l’app mobile et que les messages d’un compte étaient affichés du côté d’un autre compte
      Si ce n’est pas le cas, cela ressemble davantage à un bug serveur qu’à un bug client
    • Les apps de messagerie sont difficiles, et les apps concurrentes ont aussi eu beaucoup de bugs similaires, donc cela ne me semble pas suffire à prouver une mauvaise qualité
      Et Telegram a été, parmi les apps de messagerie que j’ai utilisées, l’une des plus stables, riches en fonctionnalités et faciles à utiliser
    • Pour défendre Telegram, des choses similaires sont aussi souvent arrivées dans de grands services comme Facebook, Google et Apple
    • Un logiciel conçu par comité peut aussi avoir des bugs terribles
    • Kakao, lui, n’avance clairement pas vite
  • Il est choquant qu’ils aient signalé la vulnérabilité via le Bug Bounty Program de Kakao en décembre 2023, mais n’aient rien reçu parce que seules les personnes coréennes peuvent toucher une récompense
    • Au moins, la restriction est publiée sur le site de bug bounty
      Il est indiqué qu’il faut être « Coréen résidant en Corée ou à l’étranger »
      https://bugbounty.kakao.com/home
      Cela aurait été pire s’ils avaient soumis le rapport en pensant pouvoir être payés, puis découvert ensuite que c’était limité aux citoyens coréens
      À noter aussi que les récompenses sont très faibles : à partir de 50 000 wons, soit environ 35 dollars, jusqu’à 10 millions de wons, soit environ 7 100 dollars
    • Ce genre de chose est assez courant en Corée
      En tant qu’étranger ayant monté une startup à Séoul ces neuf dernières années, j’ai vécu plusieurs situations similaires
  • Il faudrait prendre du recul et repenser les méthodes actuelles du génie logiciel
    Il faut se demander si elles servent le long terme, ou seulement les profits de court terme d’un petit nombre
  • Je me demande dans quelle mesure les personnels militaires américains stationnés en Corée ont été affectés par cette vulnérabilité
    Sait-on si elle a été exploitée en conditions réelles ?
  • Le service existe depuis plus de dix ans et n’a toujours pas de version web, mais à voir cette nouvelle, c’est peut-être finalement une bonne chose
    • J’aimerais quand même qu’il y ait une version web. Parce qu’il est difficile de faire tourner l’app Kakao de manière stable sous Linux avec wine