Assumindo contas do TikTok

Em mais de 150 mercados, 75 idiomas e mais de um bilhão de usuários, o aplicativo TikTok se tornou o mais popular do mundo! É também o aplicativo líder em downloads em diversas lojas de aplicativos.

A maioria dos usuários do aplicativo são adolescentes e crianças que o usam para vídeos curtos de 15 a 60 segundos. No aplicativo você pode compartilhar vídeos com todos os seus usuários ou gravar vídeos privados que ninguém terá acesso.

Devido à grande popularidade do aplicativo e a grande quantidade de usuários, ele atrai muitos hackers de todo o mundo que investem muitos recursos para acessar as informações pessoais dos usuários ou tentar detectar falhas de segurança que os ajudem a invadir as contas dos usuários..

É por isso que decidimos pesquisar o famoso aplicativo e tentar testar suas proteções.

Então, basicamente, descobrimos que um link malicioso pode ser enviado ao usuário por meio do site do TikTok e, se o usuário clicar no link, o invasor pode:

  • Obter todas as informações pessoais do usuário com quem ele se registrou no TikTok, independentemente se ele optar por divulgar as informações ou não.
  • Excluir os vídeos da conta do usuário.
  • Adicionar um vídeo à conta pessoal do usuário.
  • Alterar as configurações dos vídeos privados para público e assim revelar todas as informações pessoais do usuário.

Depois de se reportar ao TikTok, eles responderam com responsabilidade, confirmaram todas as descobertas e corrigiram as falhas de segurança!

Um vídeo demonstrando as descobertas:


Técnico

Envio de um link malicioso por meio do site da TikTok. Em www.tiktok.com localizamos uma funcionalidade que permite ao usuário inserir um número de telefone para enviar um link para baixar o aplicativo..

Portanto, um invasor pode usar a ferramenta burp suite (Uma ferramenta que ensinamos em nosso curso cibernético), Capturar a mensagem enviada e editar os parâmetros da seguinte forma:

O parâmetro Mobile contém o número do telefone para o qual o SMS será enviado, enquanto o parâmetro download_url contém o link a ser enviado via SMS. Se editarmos os parâmetros, podemos enviar um link direto do tiktok para quem queremos e com qual link queremos, por exemplo attacker.com:

Assim que o invasor clicar no link, ele irá para o site attacker.com, uma vez que a maioria dos usuários do TikTok não usa o site TikTok.com, mas no aplicativo tentamos encontrar uma maneira de obter o link para abrir o aplicativo e transferir o ataque de lá.

Passe o link para o aplicativo e continue o ataque

Portanto, o objetivo claro, precisamos encontrar uma maneira de fazer o aplicativo abrir o link que enviamos no SMS com os IDs de usuário do aplicativo. Abrimos o aplicativo com-jadx (Software que ensinamos no curso Android Hacking).

E começamos a percorrer o código, você pode ver que existe um Intent que escuta musically e define um esquema customizado para a aplicação, deve-se notar que o link será aberto usando o-domain https://m.tiktok.com/h5/share/webview.

Você pode vê-lo aqui:

Portanto, se adicionarmos ao nosso link, que estamos enviando o prefixo musically: Faremos com que o aplicativo abra nosso link, mas qual link será aberto? E como fazer o aplicativo realizar alguma ação com a identidade do usuário?

Para fazer isso, precisamos ter certeza de que o usuário está conectado e, em seguida, realizar a operação por meio do aplicativo, portanto, precisaremos encontrar um open redirect (redirecionamento aberto) que ensinamos no curso de testes de intrusão web que nos ajudará a realizar a operação após o-login.

Detecção open redirect

Nós olhamos para-domain https://login.tiktok.com E vimos que há um parâmetro na url que determina para onde o usuário irá após o login:

https://login.tiktok.com/?redirect_url=https://www.tiktok.com

O problema é que existe um controle para o parâmetro e não é possível escrever outro nome de domínio, como atacante.com, porque o site não nos moverá para este domínio. Abrimos o código e olhamos para a defesa:

Pode-se ver que esta é uma proteção simples do lado do cliente que apenas verifica se o domínio termina em tiktok.com. Portanto, se adicionarmos à palavra tiktok.com em qualquer lugar da URL, ele também será aceito como exemplo: https://www.attacker-tiktok.com.

Os programadores provavelmente queriam dizer que o link que eles inseririam seria apenas uma mudança de subdomínio e não uma mudança de prefixo para o próprio domínio. Como vai ser:

Compramos o domínio tlktiktok.com e, portanto, fizemos com que o site entre em contato conosco.

No momento, estamos na próxima etapa, podemos enviar um link através do site tiktok.com por SMS para o destino. Se o alvo clicar no link, o link será aberto no aplicativo dentro do webview porque ele começa em musically. O site que abrimos é login.tiktok.com que nos leva a tlktiktok.com, que está sob nosso controle.

Fizemos a transição para garantir que o usuário esteja conectado à sua conta.

Agora precisamos realizar ações no nome de usuário e para isso usaremos-CSRF.

Executar ações em nome do usuário:

Após um estudo aprofundado do site, identificamos que a proteção contra CSRF no site não protege adequadamente o usuário e uma ação de API pode ser enviada ao usuário e isso será feito.

Para realizar ações como outros usuários, precisamos obter informações sobre os usuários e todos os tipos de identificadores diferentes, então procuramos uma maneira de obter mais informações que nos ajudem no ataque.

Para extrair informações confidenciais sobre os usuários, observamos as ações da API do aplicativo, vimos que existem 2 endereços principais:

Esses dois subdomínios retornam muitas informações, mas o problema é que você não pode se comunicar diretamente com eles devido ao problema CORS e SOP e se fizermos uma solicitação, obteremos um erro no navegador:

Esse é o erro que temos.:

Portanto, agora temos que contornar o CORS de alguma forma, um dos métodos para contornar o CORS é encontrar uma ação deliberada no site que usa JSONP porque definir um curso de ação incorporada é legal, portanto, se encontrarmos uma ação JSONP no site, podemos obter as informações sem danificar o mecanismo

(Sobre este mecanismo e métodos de desvio, é claro, também explicamos no curso)

Analisamos o código-fonte do aplicativo e verificamos se há um traço de operação JSOP usando parâmetros como callback ou cb e descobrimos que há uma série de operações API “ocultas” às quais você pode adicionar o parâmetro de callback e ignorar o CORS para as informações que eles retornam para nós.

Então, basicamente, executar a operação ajax com JSOP para todas as APIs que nos permitem receber informações nos dá informações pessoais sobre os usuários e muitas informações que nos ajudarão mais tarde:

Assim que tivermos todas as informações necessárias, iniciaremos as operações nas contas dos usuários.

Apagando os clipes:

Para excluir os vídeos, temos o seguinte pedido:

https://api-t.tiktok.com/aweme/v1/aweme/delete/?aweme_id=video_id

Por exemplo, excluímos o vídeo 6755373615039991045 pertencente ao usuário que estamos atacando, todos os identificadores podem ser facilmente vistos pela falha de segurança adicional que encontramos, que nos permite obter todas as informações pessoais do usuário ou reproduzindo o vídeo do usuário no aplicativo.

O pacote de informações será semelhante a este:

Depois de enviar o pacote, o lado do servidor irá confirmar a ação porque os cookies do usuário são enviados com cada solicitação para o lado do servidor e excluirá o vídeo para o usuário.

Criando um novo vídeo:

Para inserirmos um vídeo em qualquer conta do tiktok, precisamos entender como funciona o mecanismo de upload de vídeo no aplicativo, na primeira etapa fazemos o upload do vídeo e na segunda etapa o vinculamos à conta.

Então, se carregarmos o vídeo em nossa conta e obtivermos sua id usando a seguinte ação:

Obteremos o id da resposta:

E vamos usá-lo com nossa operação CSRF(Também explicado no curso).

Alterarando as especificações de privilégios de vídeo para público

Para converter um vídeo privado em um vídeo público, o invasor deve primeiro saber a ID do vídeo. Existem várias permissões de vídeo diferentes – Vídeos que apenas amigos podem assistir, vídeos privados e vídeos públicos.

Para obter um ID de vídeo que apenas amigos podem assistir, encontramos uma ação de API que faz com que a vitima nos adicione a seus amigos usando a seguinte ação:

https://api-m.tiktok.com/aweme/v1/commit/follow/request/approve

E a id do nosso usuário que será assim:

Então, teremos acesso a todos os vídeos que os amigos podem assistir e torná-los públicos:

https://api-m.tiktok.com/aweme/v1/aweme/modify/visibility/?aweme_id=video_id&type=1&aid=1233&mcc_mnc=42503

O parâmetro type especifica o nível de privacidade quando 1 é público e 2 é privado, então, por exemplo, tornaremos o vídeo público:

Em conclusão:

Neste artigo, demonstramos como a segmentação de uma série de pequenas falhas de segurança pode tornar um ataque bem-sucedido, e é claro

O TikTok confirmou todas as falhas de segurança e corrigiu tudo.

No ataque que apresentamos, o invasor envia um sms do site do tiktok para o alvo com um link que contém musically: O mesmo link faz com que o aplicativo abra o link dentro do webview e transfira o destino para a página de login, onde será identificado ou transferido automaticamente para a nossa página que aparece no redirect_url que ignoramos.

A partir daí o alvo chegará ao nosso site e obteremos todas as informações pessoais do usuário por causa do jsonp e bypass do CORS e então realizaremos todas as ações especificadas como o usuário usando o bug CSRF que encontramos.

Outros artigos que você pode ter interesse: