Arquivo de Notícias2021 | 2022

Vulnerabilidade no aplicativo TikTok para Android pode levar ao sequestro de conta com um clique

A Microsoft descobriu uma vulnerabilidade de alta gravidade no aplicativo TikTok para Android, que poderia permitir que invasores comprometessem as contas dos usuários com um único clique. A vulnerabilidade, que exigiria que vários problemas fossem encadeados para serem explorados, foi corrigida e não localizamos nenhuma evidência de exploração em estado selvagem. Os invasores podem ter aproveitado a vulnerabilidade para sequestrar uma conta sem o conhecimento dos usuários se um usuário-alvo simplesmente clicasse em um link especialmente criado. Os invasores podem acessar e modificar os perfis e informações confidenciais do TikTok dos usuários, como divulgar vídeos privados, enviar mensagens e fazer upload de vídeos em nome dos usuários.

A vulnerabilidade permitiu que a verificação de link direto do aplicativo fosse ignorada. Os invasores podem forçar o aplicativo a carregar um URL arbitrário no WebView do aplicativo, permitindo que o URL acesse as pontes JavaScript anexadas do WebView e conceda funcionalidade ao invasores. 

Pesquisamos anteriormente pontes JavaScript para suas potenciais implicações de amplo alcance. Enfatizando a importância de ter cuidado ao clicar em links desconhecidos, esta pesquisa também mostra como a colaboração dentro da comunidade de segurança é necessária para melhorar as defesas do ecossistema digital geral.

O TikTok tem dois sabores de seu aplicativo Android: um para o leste e sudeste da Ásia sob o nome de pacote com.ss.android.ugc.trill e outro para os demais países sob o nome de pacote com.zhiliaoapp.musically. Realizando uma avaliação de vulnerabilidade do TikTok, determinamos que os problemas estavam afetando os dois tipos do aplicativo para Android, que têm mais de 1,5 bilhão de instalações combinadas por meio da Google Play Store. Depois de analisar cuidadosamente as implicações, um pesquisador de segurança da Microsoft notificou o TikTok sobre os problemas em fevereiro de 2022, como parte de nossa política de divulgação responsável por meio da Divulgação Coordenada de Vulnerabilidade  (CVD) por meio da Pesquisa de Vulnerabilidade de Segurança da Microsoft (MSVR). O TikTok respondeu rapidamente lançando uma correção para resolver a vulnerabilidade relatada, agora identificada como CVE-2022-28799, e os usuários podem consultar a entrada CVE para obter mais informações. Recomendamos a resolução eficiente e profissional da equipe de segurança do TikTok. Os usuários do TikTok são incentivados a garantir que estejam usando a versão mais recente do aplicativo.

Nesta postagem do blog, compartilhamos informações sobre os problemas que descobrimos, examinamos como eles poderiam ter sido aproveitados em um ataque para assumir rápida e silenciosamente as contas de usuários direcionados e orientamos as práticas recomendadas e proteções. À medida que as ameaças nas plataformas continuam a crescer, também compartilhamos detalhes de nossa pesquisa, divulgação e colaboração com a comunidade de segurança mais ampla, no esforço de melhorar continuamente a segurança para todos, independentemente da plataforma ou dispositivo em uso.

Interfaces JavaScript

A exploração da vulnerabilidade depende da implementação de interfaces JavaScript do aplicativo, que são fornecidas por um componente do sistema operacional Android chamado WebView. O WebView permite que os aplicativos carreguem e exibam páginas da Web e, usando a chamada de API addJavascriptInterface , também pode fornecer funcionalidade de ponte que permite que o código JavaScript na página da Web invoque métodos Java específicos de uma classe específica no aplicativo. Carregar conteúdo da Web não confiável para o WebView com objetos de nível de aplicativo acessíveis por meio de código JavaScript torna o aplicativo vulnerável à injeção de interface JavaScript, o que pode levar a vazamento de dados, corrupção de dados ou, em alguns casos, execução de código arbitrário.

Em nosso exemplo, o código abaixo demonstra como uma interface JavaScript é usada, uma instância da classe JsObject é injetada no WebView (linha 8) e é referenciada pela variável injectObject dentro do código JavaScript, que é carregado através do método loadUrl da API (linha 10):

Figura 1. Adicionando uma interface JavaScript a um objeto WebView

Antes da API do Android nível 18 (lançada em 2013 com o Android 4.3), qualquer método da classe injetada era exposto a esse código JavaScript. A partir do nível 18 da API, apenas métodos de classe com a anotação “@JavascriptInterface” podem ser invocados (representados acima na linha 2).

Ponte JavaScript

O TikTok para Android usa interfaces JavaScript extensivamente, aprimorando os recursos do WebView usados ​​no aplicativo. Identificamos uma classe de interesse que faz uso de tal WebView. Ele registra uma ponte JavaScript que tem acesso a todo tipo de funcionalidade implementada pelas classes do pacote [redacted ] .bridge.* . Esta ponte expõe o método descrito abaixo:

Figura 2. Renderizando o método que pode ser chamado por meio do código JavaScript

arg1 corresponde a uma string JSON que consiste em vários atributos, sendo os atributos func e params os mais relevantes.

O atributo func corresponde ao nome do método Java que é invocado a partir do código JavaScript, enquanto o atributo params define os argumentos que esse método recebe. Por exemplo, para chamar o método Java com assinatura String foo(String arg1, String arg2) do código JavaScript, a seguinte instrução deve ser usada:

Figura 3. Código de exemplo invocando um método Java por meio da interface JavaScript.

O resultado é retornado como uma string JSON para um retorno de chamada definido no código JavaScript, que recebe uma única string como argumento.

Figura 4. Interação entre Java e componentes da Web usando a interface JavaScript

A figura acima visualiza o conceito e descreve as seguintes etapas:

  1. O aplicativo carrega o site example.com em seu WebView
  2. O código JavaScript, que é obtido do servidor remoto, invoca o método Java
  3. O método é executado
  4. O resultado é retornado como um parâmetro para a função de retorno de chamada

Por fim, o método do manipulador pode processar o resultado localmente ou enviá-lo para um servidor externo usando um XMLHttpRequest , um objeto de navegador integrado que também pode ser aproveitado durante um ataque para enviar dados roubados ao servidor de um invasor.

Mergulhando em links profundos

Descobriu-se que a vulnerabilidade em si residia no manuseio do aplicativo de um deeplink específico. No contexto do sistema operacional Android, um deeplink é um hiperlink especial que se vincula a um componente específico em um aplicativo móvel e consiste em um esquema e (geralmente) uma parte do host . Quando um link direto é clicado, o gerenciador de pacotes do Android consulta todos os aplicativos instalados para ver qual deles pode manipular o link direto e, em seguida, o roteia para o componente declarado como seu manipulador. Um deeplink deve ser declarado no manifesto do aplicativo para ser usado por componentes fora do contexto do aplicativo:

Figura 5. Um exemplo de adição de um filtro de intenção no manifesto do aplicativo para links diretos.

No exemplo acima na Figura 5,

  1. O usuário clica no link http://www.example[.]com/gizmos . Como mais de um aplicativo pode manipular o esquema, o sistema apresenta uma caixa de diálogo, também conhecida como diálogo de ambiguidade, semelhante à mostrada abaixo na Figura 6.
  2. Um link direto na forma de example://gizmos é roteado diretamente para a atividade GizmosActivity , o componente declarado como o manipulador de link direto nesse caso.
Figura 6. Caixa de diálogo Ambiguidade

Para evitar a caixa de diálogo de ambiguidade para esquemas http e https , um aplicativo pode declarar um Android App Link usando o atributo autoVerify em seu filtro de intenção para sinalizar ao sistema para verificar a associação entre o aplicativo e o domínio de URL declarado. Além disso, um arquivo JSON que contém o nome do pacote do aplicativo e a impressão digital SHA256 de seu certificado deve ser publicado em https://domain.name/.well-known/directory. O TikTok para Android usa esse recurso para o domínio m.tiktok.com , o que significa que todos os links correspondentes ao domínio específico serão roteados para o aplicativo sem apresentar a caixa de diálogo de ambiguidade.

Além dos deeplinks que são exportados no manifesto do Android, um aplicativo também pode trocar dados entre seus componentes usando deeplinks internos. Tentar abrir um deeplink interno de fora do aplicativo, como em um navegador da Web, retornará uma mensagem de erro “não foi possível resolver a intenção”, pois o sistema não pode roteá-lo para o manipulador apropriado.

Descobertas de vulnerabilidade

É importante entender os vários componentes em jogo que permitem que a vulnerabilidade seja explorada, como a implementação de interfaces JavaScript do aplicativo, pois eles determinam o impacto da própria vulnerabilidade. Ao analisar o tratamento do aplicativo de um link direto específico, descobrimos vários problemas que, quando encadeados, poderiam ter sido usados ​​para forçar o aplicativo a carregar um URL arbitrário para o WebView do aplicativo. Ao criar essa URL com parâmetros de consulta adicionais, foi possível injetar uma instância da ponte JavaScript que fornece acesso total à funcionalidade implementada pelo pacote [redigido] .bridge.* .

O que segue é uma descrição técnica da vulnerabilidade, que analisamos usando o aplicativo TikTok para Android com o nome do pacote com.zhiliaoapp.musically . A mesma descrição se aplica ao aplicativo TikTok Android com.ss.android.ugc.trill , pois as vulnerabilidades foram encontradas em SDKs comuns.

Acionando os deeplinks internos do aplicativo

O TikTok para Android usa vários esquemas de deeplink, alguns dos quais são exportados pelo manifesto, enquanto outros são usados ​​apenas internamente pelo aplicativo. Entre os exportados, o link https://m.tiktok[.]com/redirect é tratado pela classe [redacted] e é usado para redirecionar URIs para vários componentes do aplicativo por meio de um parâmetro de consulta:

Figura 7. Identificando deeplinks e suas atividades direcionadas usando o Medusa

Determinamos que é possível acionar deeplinks internos por meio do parâmetro de consulta e chamar atividades não exportadas, expandindo a superfície de ataque do aplicativo. De acordo com o TikTok, esse redirecionamento para deeplinks internos não levanta preocupações adicionais.

Como prova de conceito, criamos uma URL que usa um esquema específico não exportado para carregar https://www.tiktok[.]com para o WebView do aplicativo, conforme mostrado abaixo na Figura 8:

Figura 8. Usando um link para acionar um esquema usado internamente e carregar o Tiktok.com.

Embora o link direto [redacted-internal-scheme] ://webview?url=<website> possa ser usado para carregar URLs para o WebView da CrossPlatformActivity por meio de um parâmetro de consulta, o aplicativo impõe filtros para rejeitar hosts não confiáveis. Em contraste com o carregamento bem-sucedido do domínio Tiktok.com , conforme mostrado na Figura 8 acima, a Figura 9 abaixo exibe o domínio Example.com sendo rejeitado pelos filtros do aplicativo:

Figura 9. Os filtros do aplicativo rejeitando o link direto [ redacted-internal-scheme] ://webview?url=https://www.example[.]com

A filtragem ocorre no lado do servidor e a decisão de carregar ou rejeitar uma URL é baseada na resposta recebida de uma determinada solicitação HTTP GET. Nossa análise estática indicou que é possível contornar a verificação do lado do servidor adicionando dois parâmetros adicionais ao deeplink.

O WebView anexado à atividade cria instâncias da ponte JavaScript, que verificamos dinamicamente usando o módulo WebView da Medusa. A partir deste ponto, o site atribuído ao parâmetro de consulta do esquema [redacted-scheme] ://webview tem acesso total à ponte JavaScript, o que significa que o código JavaScript do site agora pode acessar e invocar qualquer funcionalidade exposta encontrada sob o [redacted ] pacote .bridge.* .

Funcionalidade exposta

Revendo a funcionalidade acessível ao código JavaScript em páginas web carregadas no WebView, identificamos mais de 70 métodos expostos. Quando combinados com um exploit para sequestrar o WebView, como a vulnerabilidade que descobrimos, esses métodos podem ser invocados para conceder funcionalidade aos invasores. Alguns dos métodos expostos podem acessar ou modificar as informações privadas dos usuários, enquanto outros podem realizar solicitações HTTP autenticadas para qualquer URL fornecida como parâmetro. Além disso, o método aceita um conjunto de parâmetros na forma de uma string JSON que pode ser usada para formar o corpo de uma solicitação POST e retorna a resposta do servidor, incluindo os cabeçalhos.               

Ao invocar esses métodos, um invasor pode:

  • Recupere os tokens de autenticação do usuário acionando uma solicitação para um servidor controlado e registrando o cookie e os cabeçalhos da solicitação.
  • Recupere ou modifique os dados da conta TikTok do usuário, como vídeos privados e configurações de perfil, acionando uma solicitação para um endpoint TikTok e recuperando a resposta por meio do retorno de chamada JavaScript.

Resumindo, ao controlar qualquer um dos métodos capazes de realizar solicitações HTTP autenticadas, um agente mal-intencionado pode ter comprometido uma conta de usuário do TikTok.

Prova de conceito

Na prova de conceito a seguir, o invasor envia um link criado para um usuário do TikTok direcionado. Uma vez que o usuário clica no link, os tokens de autenticação de upload de vídeo são enviados de volta ao invasor e, posteriormente, o script modifica as informações da biografia do usuário para ler “!! FALHA DE SEGURANÇA !!”:

Depois que o link malicioso especialmente criado pelo invasor é clicado pelo usuário do TikTok visado, o servidor do invasor, https://www.attacker[.]com/poc, recebe acesso total à ponte JavaScript e pode invocar qualquer funcionalidade exposta. O servidor do invasor retorna uma página HTML contendo código JavaScript para enviar tokens de upload de vídeo de volta ao invasor, bem como alterar a biografia do perfil do usuário.

Os tokens de autenticação de upload de vídeo são enviados de volta ao invasor por meio de um XMLHttpRequest . O invasor também recebe o corpo da resposta e o cabeçalho, descritos nas Figuras 10 e 11 abaixo:

Figura 10. Os cabeçalhos de solicitação recuperados pelo ataque
Figura 11. A resposta do servidor incluindo os cabeçalhos

Por fim, a mensagem “!! FALHA DE SEGURANÇA !!!” é definido na biografia do perfil do usuário:

Figura 12. Comprometendo a integridade do perfil do usuário

Práticas recomendadas de interface JavaScript

Como este caso e nossa pesquisa anterior mostraram, do ponto de vista da programação, o uso de interfaces JavaScript apresenta riscos significativos. Uma interface JavaScript comprometida pode permitir que invasores executem código usando o ID e os privilégios do aplicativo. Assim, recomendamos que a comunidade de desenvolvedores esteja ciente dos riscos e tome precauções extras para proteger o WebView.

Nos casos em que o uso de interfaces JavaScript não pode ser evitado, sugerimos o uso de uma lista aprovada de domínios confiáveis ​​a serem carregados no WebView do aplicativo para evitar o carregamento de conteúdo da Web malicioso ou não confiável. Além disso, sugerimos as seguintes práticas de codificação seguras:

  • Use o navegador padrão para abrir URLs que não pertencem à lista de aprovados do aplicativo.
  • Mantenha a lista de aprovados atualizada e acompanhe as datas de expiração dos domínios incluídos. Isso pode impedir que invasores sequestrem o WebView reivindicando um domínio expirado na lista de aprovados.
  • Evite usar métodos de comparação de strings parciais para comparar e verificar um URL com a lista aprovada de domínios confiáveis.
  • Evite adicionar domínios de estágio ou de rede interna à lista aprovada, pois esses domínios podem ser falsificados por um invasor para sequestrar o WebView.

A divulgação responsável e a colaboração do setor melhoram a segurança para todos

Aproveitando novas ameaças, técnicas e recursos de invasores, os adversários continuam a se concentrar em identificar e tirar proveito de vulnerabilidades e configurações incorretas não corrigidas como um vetor para acessar sistemas e informações confidenciais para fins maliciosos. Responder ao cenário de ameaças em constante mudança exige que expandamos nosso conhecimento e experiência em outros dispositivos e plataformas como parte de nosso compromisso de melhorar continuamente a segurança da Microsoft, não apenas para a Microsoft.

Usamos pesquisas colaborativas como essa para melhorar nossas tecnologias de proteção em todas as plataformas, garantindo que o Gerenciamento de Vulnerabilidades do Microsoft Defender detecte e alerte sobre aplicativos instalados com vulnerabilidades conhecidas, incluindo aquelas que afetam dispositivos não Windows. Embora não tenhamos conhecimento de nenhuma exploração ativa dessa vulnerabilidade em estado selvagem, os usuários podem seguir as diretrizes de segurança abaixo para se defender contra esse e outros tipos de problemas semelhantes:

  • Evite clicar em links de fontes não confiáveis
  • Mantenha sempre o dispositivo e os aplicativos instalados atualizados
  • Nunca instale aplicativos de fontes não confiáveis
  • Relate imediatamente qualquer comportamento estranho do aplicativo ao fornecedor, como alterações de configuração acionadas sem interação do usuário.

Como parte de nossa política de divulgação responsável por meio da divulgação coordenada de vulnerabilidades  (CVD) por meio da Microsoft Security Vulnerability Research (MSVR), divulgamos a vulnerabilidade ao TikTok em fevereiro de 2022, conforme indicado em seu site. A vulnerabilidade, CVE-2022-28799, foi rapidamente classificada como de alta gravidade com uma pontuação de 8,3, e uma correção para o problema foi incluída em uma versão atualizada do aplicativo lançada menos de um mês após a divulgação inicial. Gostaríamos de agradecer à equipe de segurança do TikTok por colaborar de forma rápida e eficiente na resolução desses problemas.

Este caso mostra como a capacidade de coordenar pesquisa e compartilhamento de inteligência de ameaças por meio de colaboração de especialistas e entre setores é necessária para mitigar problemas de forma eficaz. À medida que as ameaças entre plataformas continuam a crescer em número e sofisticação, divulgações de vulnerabilidades, resposta coordenada e outras formas de compartilhamento de inteligência de ameaças são necessárias para ajudar a proteger a experiência de computação dos usuários, independentemente da plataforma ou dispositivo em uso. Continuaremos a trabalhar com a comunidade de segurança mais ampla para compartilhar pesquisas e informações sobre ameaças no esforço de criar uma melhor proteção para todos.

Fonte: Microsoft

LEAVE A REPLY

Please enter your comment!
Please enter your name here