Exploit de 1 clique encontrado no maior app de chat móvel da Coreia
(stulle123.github.io)- 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
CommerceBuyActivitydo KakaoTalk10.4.3, onde a validação insuficiente de deep links, a ativação de JavaScript e a exposição do cabeçalhoAuthorizationcriavam o problema em conjunto - A cadeia de ataque usava o redirecionamento de
buy.kakao.come um DOM XSS emm.shoppinghow.kakao.compara 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.comdo ar e removeu os redirecionamentos relacionados e aCommerceBuyActivityvulnerá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
CommerceBuyActivitytinha várias condições favoráveis para o atacante- Era exposta externamente (
exported) e podia ser iniciada por deep links comokakaotalk://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
ComponenteSelectorde URIsintent://não eram limpos paranull
- Era exposta externamente (
- Essa WebView enviava o token de acesso no cabeçalho
Authorizationdas 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çalhoAuthorizationera exposto junto com a requisição GET - Se o atacante conseguisse executar JavaScript dentro dessa WebView, bastava um clique em um deep link
kakaotalk://buymalicioso para roubar o token de acesso do usuário
Bypass da validação de URL e encadeamento com DOM XSS
- A
CommerceBuyActivitynão carregava diretamente uma URL arbitrária do atacante; em vez disso, combinava o deep link recebido com uma URL iniciada porhttps://buy.kakao.com- Por exemplo,
kakaotalk://buy/foocarregavahttps://buy.kakao.com/foo - O caminho, os parâmetros de consulta e o fragmento podiam ser controlados pelo atacante
- Por exemplo,
- O endpoint
https://buy.kakao.com/auth/0/cleanFrontRedirect?returnUrl=podia redirecionar para qualquer domíniokakao.com, ampliando bastante a superfície de busca por XSS em subdomínios dekakao.com - Em
m.shoppinghow.kakao.com, foi encontrado um endpoint em que a consulta de busca era enviada para um sinkinnerHTML, 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çalhoAuthorizationpodia 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 Emailna 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.comtinha 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.comdo ar, removeu o redirecionamento/auth/0/cleanFrontRedirect?returnUrl=e, em versões posteriores, também removeu aCommerceBuyActivityvulnerável
1 comentários
Opiniões no Hacker News
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
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
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
Pode ser pior lá por causa da cultura, mas isso claramente também acontece no Ocidente e está mais para um problema praticamente universal
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
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
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
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
Quando visitei no começo de 2015, o Google era um desses casos
Em que língua você esperava que um app coreano estivesse, francês?
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
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
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
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
Se não for isso, parece mais um bug de servidor do que um bug de cliente
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
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
Como estrangeiro, passei por coisas parecidas várias vezes nos últimos 9 anos, enquanto criava uma startup em Seul
É preciso avaliar se isso serve para o longo prazo ou para ganhos de curto prazo que acabam nas mãos de poucos
Sabe-se se houve exploração real desse problema em ambiente real?