4 pontos por GN⁺ 2024-06-27 | 1 comentários | Compartilhar no WhatsApp
  • No app KakaoTalk para Android, a combinação de deep link, WebView e XSS permitia que, com apenas um clique do usuário em um link malicioso, ocorressem vazamento do token de acesso e até tomada da conta
  • O principal ponto de entrada era a WebView CommerceBuyActivity do KakaoTalk 10.4.3, onde a validação insuficiente de deep links, a ativação de JavaScript e a exposição do cabeçalho Authorization criavam o problema em conjunto
  • A cadeia de ataque usava o redirecionamento de buy.kakao.com e um DOM XSS em m.shoppinghow.kakao.com para executar JavaScript arbitrário dentro da WebView
  • O token vazado podia ser usado para acessar o Kakao Mail, redefinir a senha e registrar clientes KakaoTalk para PC/Mac ou o cliente KiwiTalk
  • A falha recebeu o identificador CVE-2023-51219 e, após a divulgação, a Kakao Corp. tirou buy.kakao.com do ar e removeu os redirecionamentos relacionados e a CommerceBuyActivity vulnerável

Escopo e premissas da vulnerabilidade

  • O KakaoTalk é o principal app de chat da Coreia, com mais de 100 milhões de downloads na Google Play Store, e funciona como um superapp que inclui pagamentos, transporte, compras, e-mail e mais
  • As conversas comuns não têm criptografia de ponta a ponta (E2EE) ativada por padrão, então a Kakao Corp. tem uma estrutura em que pode acessar mensagens em trânsito
  • Existe o recurso opcional de E2EE chamado Secure Chat, mas ele não oferece suporte a mensagens em grupo nem chamadas de voz
  • O objetivo do PoC era registrar o KakaoTalk para Windows/macOS ou o cliente open source KiwiTalk na conta da vítima para ler mensagens de chat sem criptografia de ponta a ponta

Ponto de entrada: a WebView CommerceBuyActivity

  • A WebView CommerceBuyActivity tinha várias condições favoráveis para o atacante
    • Era exposta externamente (exported) e podia ser iniciada por deep links como kakaotalk://buy
    • O JavaScript estava ativado com settings.setJavaScriptEnabled(true)
    • Pelo esquema intent://, o JavaScript podia enviar dados até para componentes do app não expostos externamente
    • Também havia falhas no tratamento de URI, já que Component e Selector de URIs intent:// não eram limpos para null
  • Essa WebView enviava o token de acesso no cabeçalho Authorization das requisições HTTP
  • A depuração da WebView estava ativada, permitindo inspecionar o funcionamento via chrome://inspect, e ao redirecioná-la para um endereço externo o cabeçalho Authorization era exposto junto com a requisição GET
  • Se o atacante conseguisse executar JavaScript dentro dessa WebView, bastava um clique em um deep link kakaotalk://buy malicioso para roubar o token de acesso do usuário

Bypass da validação de URL e encadeamento com DOM XSS

  • A CommerceBuyActivity não carregava diretamente uma URL arbitrária do atacante; em vez disso, combinava o deep link recebido com uma URL iniciada por https://buy.kakao.com
    • Por exemplo, kakaotalk://buy/foo carregava https://buy.kakao.com/foo
    • O caminho, os parâmetros de consulta e o fragmento podiam ser controlados pelo atacante
  • O endpoint https://buy.kakao.com/auth/0/cleanFrontRedirect?returnUrl= podia redirecionar para qualquer domínio kakao.com, ampliando bastante a superfície de busca por XSS em subdomínios de kakao.com
  • Em m.shoppinghow.kakao.com, foi encontrado um endpoint em que a consulta de busca era enviada para um sink innerHTML, permitindo DOM XSS com uma carga simples
  • Também foi encontrado um XSS armazenado que existia anteriormente, mas o texto informa que ele parecia já ter sido corrigido em maio de 2024
  • Com essa combinação, quando o usuário clicava no deep link malicioso, JavaScript arbitrário era executado dentro da WebView CommerceBuyActivity, e o token de acesso do cabeçalho Authorization podia ser enviado para fora

Acesso ao Kakao Mail e redefinição de conta com o token

  • O token de acesso vazado do KakaoTalk podia ser usado para acessar a conta Kakao Mail da vítima
  • Após verificar se a vítima usava Kakao Mail, era possível obter um token separado e acessar talk.mail.kakao.com
  • Mesmo que a vítima não tivesse uma conta Kakao Mail, era possível criar uma nova em nome dela, e ao selecionar Set As Primary Email na criação do novo endereço o e-mail cadastrado anteriormente podia ser sobrescrito sem verificação adicional
  • Depois de acessar o Kakao Mail, o passo seguinte era a redefinição da senha do KakaoTalk
    • O e-mail da vítima, apelido e número de telefone, que também eram necessários, podiam ser obtidos nas mesmas chamadas da API de configuração da conta
    • O processo de redefinição de senha em accounts.kakao.com tinha 2FA por SMS, mas era possível interceptar e modificar requisições e respostas com Burp para mudar o fluxo para verificação por e-mail
    • O código de verificação podia ser visto no Kakao Mail da vítima

Registro do cliente de PC e acesso às mensagens

  • Ao entrar no KakaoTalk para Windows/macOS ou no KiwiTalk com as credenciais da vítima, ainda era necessário um segundo fator de autenticação
  • Essa autenticação usava um PIN de 4 dígitos, que era exibido na versão para PC para ser digitado no app móvel, ou enviado ao app móvel para ser digitado no app de PC
  • O PIN não era fácil de forçar por tentativa e erro, e os endpoints relacionados tinham limitação de taxa com bloqueio após 5 tentativas
  • No entanto, com o token de acesso vazado era possível enviar ou consultar o PIN no backend do KakaoTalk
  • Com isso, o PoC conseguiu registrar um dispositivo controlado pelo atacante na conta KakaoTalk da vítima e ler mensagens de chat sem criptografia de ponta a ponta

Divulgação, correções e material de pesquisa

  • A vulnerabilidade recebeu o identificador CVE-2023-51219
  • O pesquisador publicou ferramentas para que outros pesquisadores de segurança pudessem analisar a ampla superfície de ataque do KakaoTalk
  • A falha foi reportada em dezembro de 2023 por meio do Kakao Bug Bounty Program
  • O autor do reporte afirmou que não recebeu recompensa porque ela era restrita a cidadãos coreanos
  • A Kakao Corp. retirou imediatamente https://buy.kakao.com do ar, removeu o redirecionamento /auth/0/cleanFrontRedirect?returnUrl= e, em versões posteriores, também removeu a CommerceBuyActivity vulnerável

1 comentários

 
GN⁺ 2024-06-27
Opiniões no Hacker News
  • Se você mora na Coreia, é difícil viver sem usar o Kakao; até a geração das avós usa o app, então é preocupante que ele tenha tantas falhas de segurança
    Especialmente se for uma vulnerabilidade em que o domínio parece legítimo, fica difícil para uma avó perceber que o link é suspeito, e acho que a cultura de trabalho hierárquica da Coreia também contribui
    O chefe impõe um prazo de entrega de funcionalidade sem espaço para negociação, vulnerabilidades de segurança não são visíveis, mas a UI é, então acabam cortando isso de qualquer jeito e lançando
    No fim, vira um app cheio de brechas de segurança, e parece que só vão consertar direito quando a ação da Kakao cair
    • Sou coreano, mas não uso KakaoTalk, nem LINE, nem Facebook. Acaba sendo um caso meio incomum, mas dá para viver sem isso porque muitos serviços oferecem alternativas por SMS
      Na parte de segurança, acho que isso tem menos a ver com a cultura de trabalho coreana e mais com o fato de que grandes empresas de TI como Naver, Kakao, LINE, Coupang e Woowa Bros, agrupadas como "NeKaRaKuBae", costumam ter cultura de trabalho e remuneração muito melhores que a média
      Provavelmente está mais para um app doméstico que não recebeu validação suficiente como apps populares no mundo todo recebem. Dito isso, pela minha experiência, a remuneração era menor do que nos EUA ou em algumas startups coreanas
    • Prazos impossíveis e cultura de trabalho hierárquica não existem só na Coreia; isso existe no mundo inteiro
      A diferença parece ser que, na Coreia, o setor público e os chaebols ocupam uma fatia grande do mercado de TI, então sobra pouco espaço para a cultura de startup fazer diferença
      A Kakao também já foi uma startup legal, mas depois do sucesso passou a dar a impressão de tentar imitar os chaebols
    • O fato de chefes e clientes conseguirem ver a UI, mas não os problemas de segurança, não é algo exclusivo da Coreia
      Pode ser pior lá por causa da cultura, mas isso claramente também acontece no Ocidente e está mais para um problema praticamente universal
    • Fico curioso se isso vai chamar atenção da mídia coreana ou dos órgãos reguladores. Pode haver formas de responsabilização além da queda das ações
    • Cultura de trabalho hierárquica virou meio que uma desculpa coringa usada por americanos para explicar qualquer coisa de que não gostam no Leste Asiático
      Se você passar alguns anos em qualquer empresa razoavelmente grande de trabalho de escritório nos EUA, especialmente em tecnologia, finanças, consultoria ou FAANG, percebe que no Ocidente é igual
      Engenheiros de nível intermediário ficam bajulando VPs para entrar no próximo ciclo de promoção, e as empresas fazem um ótimo marketing de “organização horizontal”, mas na prática isso fica mais perto de slogan publicitário
      Quando um PM ou SVP dá uma ordem, muitas vezes ninguém questiona de frente; só reclama e executa, e é ainda mais triste ver essa confiança ingênua nesse marketing de cultura corporativa virar uma espécie de sentimento raso de superioridade
  • O curioso é que apps ocidentais de transporte por aplicativo não funcionam tão bem na Coreia, e essa empresa também faz o principal app de chamada de carro do país
    Numa viagem recente a Seul, tive de criar uma conta no app de chat móvel para fazer login nesse app, a experiência do usuário não era boa e grande parte estava em coreano, então passei um bom sufoco
    Não fiquei com a impressão de uma operação particularmente profissional
    • Quando morei na Coreia alguns anos atrás, achei interessante como o ecossistema de apps e serviços era separado
      KakaoTalk e Naver praticamente cumpriam os papéis de WhatsApp/Meta e Google no Ocidente
      Acho admirável que tenham sobrevivido apesar do aumento da concorrência com multinacionais. Em muitos outros países, as empresas locais de tecnologia praticamente perderam relevância nos últimos 10 anos, e isso é uma pena
    • Quando fui há uns 5 anos, eu não conseguia usar nenhum app de táxi porque não tinha conta bancária coreana
      Por isso, também era difícil pegar táxi na rua, e parecia que a maioria só aceitava corridas chamadas por app
      Uma vez, finalmente consegui abordar um taxista, mas ele disse que não levaria um “estrangeiro”; não sei se era xenofobia de fato, se ele não queria pagamento em dinheiro, se era porque eu não falava coreano, ou se entendi errado
      Mais tarde, numa corrida que de fato consegui, o trajeto acabou indo para o outro lado da cidade, atravessando a montanha, e precisei ligar para a pessoa com quem eu tinha um encontro para explicar ao motorista que ele estava indo pelo caminho errado. Acho que é um risco de viajar para um país desconhecido sem preparo suficiente
    • O que me surpreendeu na Coreia foi a quantidade de alternativas locais para produtos de tecnologia que eu achava usados no mundo inteiro, enquanto as versões globais/americanas quase não tinham penetração de mercado
      Quando visitei no começo de 2015, o Google era um desses casos
    • Não entendo o que o fato óbvio de um app coreano estar “majoritariamente” em coreano tem a ver com UX ruim ou falta de profissionalismo
      Em que língua você esperava que um app coreano estivesse, francês?
    • Como outras pessoas já disseram, o Uber funciona na Coreia, pelo menos em Seul
      Só que, pelo que entendo, não é exatamente o Uber de verdade, e sim algo mais próximo de um proxy do KakaoTaxi usando a interface do Uber
  • Uma pequena correção: o KakaoTalk não é um app “tudo em um” como o WeChat
    O app principal de chat tem funções adicionais como envio de presentes, que tornou esta vulnerabilidade possível, mas chamar táxi é feito no app de mobilidade Kakao T, e não no KakaoTalk; ele também oferece aluguel de scooters, bicicletas elétricas e reservas de trem e avião
    Há integração com a plataforma de pagamento KakaoPay, mas os serviços em si ficam em apps separados, sendo mais próximo do Google no Android, com um ID central para acessar vários serviços
    Então acho que o motivo de haver tantos pontos de entrada no app também vem dessa integração com serviços próprios
    • Isso não está correto
      Assim como no WeChat, o KakaoPay é integrado ao KakaoTalk a ponto de a grande maioria dos usuários usar o KakaoPay só dentro do KakaoTalk, e não no app KakaoPay
      O fato de existir um app separado do KakaoPay não muda muito, e mesmo sem ele dá para enviar, receber e pagar dinheiro pelo KakaoTalk
  • O fato de a recompensa estar disponível apenas para coreanos já dá a sensação de que, a essa altura, eles até merecem ser hackeados
    • Mesmo para coreanos, a recompensa máxima é de cerca de US$ 7.000, o que é absurdamente baixo para um app que aparenta ter vários problemas de segurança
    • É uma estrutura que incentiva vender o bug
  • Isso me lembrou de quando o fundador do Telegram se gabava do talento da equipe dizendo que um único desenvolvedor cuidava do cliente mobile
    Depois descobriu-se que esse cliente estava cheio de bugs que mostravam mensagens para o usuário errado
    App de chat móvel não é algo para desenvolver na lógica de “andar rápido e quebrar coisas”, e acho que isso é um resultado natural de um app tudo em um como o Kakao
    • Fiquei curioso se isso quer dizer que havia várias contas de usuário adicionadas ao app mobile e as mensagens de uma conta apareciam na outra
      Se não for isso, parece mais um bug de servidor do que um bug de cliente
    • Apps de chat são difíceis, e apps concorrentes também tinham muitos bugs parecidos, então isso por si só não me parece prova de má qualidade
      E, entre os apps de chat que já usei, o Telegram tem sido um dos mais estáveis, ricos em recursos e fáceis de usar
    • Em defesa do Telegram, coisas parecidas também aconteceram bastante em grandes serviços como Facebook, Google e Apple
    • Até software feito por design por comitê pode ter bugs terríveis
    • A Kakao definitivamente não se move rápido
  • É chocante que alguém tenha reportado a vulnerabilidade em dezembro de 2023 pelo Bug Bounty Program da Kakao, mas não tenha recebido nada porque só coreanos podem ganhar recompensa
    • Pelo menos a limitação está divulgada no site de bug bounty
      Diz que é preciso ser “coreano residente no país ou no exterior”
      https://bugbounty.kakao.com/home
      Seria pior se a pessoa tivesse enviado esperando receber e só depois descobrisse que era restrito a cidadãos coreanos
      Além disso, os valores também são muito baixos: vão do mínimo de 50 mil won, cerca de US$ 35, até no máximo 10 milhões de won, cerca de US$ 7.100
    • Na Coreia isso é bem comum
      Como estrangeiro, passei por coisas parecidas várias vezes nos últimos 9 anos, enquanto criava uma startup em Seul
  • Talvez seja hora de dar um passo atrás e repensar o modo atual de fazer engenharia de software
    É preciso avaliar se isso serve para o longo prazo ou para ganhos de curto prazo que acabam nas mãos de poucos
  • Fico me perguntando o quanto isso pode ter afetado pessoal das Forças Armadas dos EUA estacionado na Coreia
    Sabe-se se houve exploração real desse problema em ambiente real?
  • Já faz mais de 10 anos que o serviço existe e ainda não há versão web, mas vendo esta notícia talvez isso até seja uma sorte
    • Ainda assim, eu gostaria que houvesse uma versão web. É difícil fazer o app da Kakao rodar de forma estável com wine no Linux