Destruição do WhatsApp

Em um artigo anterior, escrevi sobre uma ferramenta que desenvolvemos na check Point que nos permite decifrar o tráfego entre o WhatsApp Web e o telefone, usando esta ferramenta você pode ver todos os parâmetros enviados no tráfego e alterá-los como estamos acostumados quando pesquisamos um site ou aplicativo normal.

No blog anterior Link para o blog do check Point Check Point Mostramos como manipular o WhatsApp e afetar o chat de maneiras diferentes, neste blog apresentaremos um novo estudo que continua a pesquisa anterior e mostra como você pode travar o WhatsApp de alguém e colocá-lo em-Crash Loop (Cada abertura do aplicativo levará a outra falha).

A falha de segurança foi relatada ao WhatsApp em agosto de 2019 e a correção veio imediatamente na versão 2.19.246 e desapareceu.

Vídeo de demonstração:

Informações técnicas sobre a falha de segurança

Em agosto de 2019, demos uma palestra na conferência Black Hat Vegas sobre o protocolo WhatsApp e como ele pode ser decifrado.

![Roman Zaikin Na conferência Black Hat](/img/course_class/blackhat1.jpg)

![Roman Zaikin Na conferência Black Hat](/img/course_class/blackhat2.jpg)

![Roman Zaikin Na conferência Black Hat](/img/course_class/blackhat1.jpg)

![Roman Zaikin Na conferência Black Hat](/img/course_class/blackhat2.jpg)

![Roman Zaikin Na conferência Black Hat](/img/course_class/blackhat1.jpg)

![Roman Zaikin Na conferência Black Hat](/img/course_class/blackhat2.jpg)

Após a pesquisa decidimos continuar decifrando mais partes do código e assim chegamos à parte do código que é responsável pelos números de telefone nos grupos e encontramos uma falha de segurança que nos permitiu travar todos os membros do grupo.

Nesta parte do blog, explicaremos como encontramos a falha de segurança e qual era o pensamento por trás desse bug.

Primeiro precisamos abrir o WhatsApp Web e pegar as chaves de criptografia usando Chrome DevTools, as chaves podem ser obtidas se fizermos um breakpoint na parte onde são criadas e apenas copiá-las para a ferramenta que desenvolvemos para- WhatsApp Protocol Decryption.

Em seguida, escanearemos o código QR com o telefone e obteremos o secret do tráfego do Web Socket enviado após a varredura do-QR Code.

Como explicamos em nossa palestra em-Black Hat (Em breve gravaremos um vídeo sobre o assunto), A informação encontrada no parâmetro secret é usada por nós para descriptografar as mensagens criptografadas enviadas no WhatsApp e eventualmente contém a chave-AES.

Assim que tivermos todas as informações poderemos decifrar o tráfego e ver todos os parâmetros que estão passando. Vamos pegar qualquer mensagem enviada no grupo e visualizar os parâmetros no formato JSON, que ficará assim:

Você pode ver que existem muitos parâmetros aqui, um dos parâmetros interessantes que vemos é participant que contém o telefone da pessoa que enviou a mensagem no grupo. Se mudarmos o número de telefone para o caractere “a” e enviarmos a mensagem, obteremos o erro “Null Pointer Exception”.

Como este é um erro de Java e não um erro de livraria, a falha de segurança não pode ser usada para executar o código.

Vimos o motivo da falha do aplicativo e vimos que era um erro no protocolo e-XMPP (Extensible Messaging and Presence Protocol).

O erro é assim:

Examinando o Stack Trace, pode-se ver que o erro está na função dgba.ba.run que é responsável por analisar todos os parâmetros da mensagem, como: message id, data, participants Etc’…

Passamos pelo código responsável pela análise do parametro participant, esse código verifica os números de telefone que contenham entre 5 e 20 caracteres. Mas e se tiver menos de 5 caracteres?

O código irá inserir o valor nulo no número do telefone e depois tentar ler o número ira entrar em colapso.

No modo padrão, o usuário deve verificar seu número de telefone antes de usar-WhatsApp.

Portanto, aparentemente, uma situação em que um número de telefone incorreto é inserido não deveria ser possível, mas ao mesmo tempo os programadores não levantaram a situação em que alguém irá descriptografar o tráfego e começar a brincar com os parâmetros enviados ao enviar uma mensagem.

Nossa ferramenta tornou possível visualizar os parâmetros e alterá-los e, portanto, foi realmente possível alterar o número de telefone para a letra c por exemplo:

E depois de enviar a mensagem ela chegará da seguinte forma:

O telefone não sabia como lidar com esse número de telefone e simplesmente travava automaticamente para todos os membros do grupo:

Depois de abrir o WhatsApp novamente, ele irá travar repetidas vezes até que você desinstale o aplicativo e instale-o novamente. Após a instalação, você precisa remover o grupo onde a mensagem que está causando a falha está localizada.

Os usuários que não fizerem backup dos dados podem ficar sem o histórico de mensagens e o conteúdo que tinham no WhatsApp, perdendo assim informações valiosas.

Outro ponto a notar é que embora você só possa travar grupos, isso não interfere na travamento de ninguém no WhatsApp, isso porque o invasor pode simplesmente criar um grupo, adicionar você e travar seu WhatsApp ou, alternativamente, criar um grupo com todos os seus objetivos e travar todos sem clicar Em um link ou executar alguma ação.

Interessado em segurança da informação? Nós convidamos você a ler nossos livros que serão publicados em breve ou ou Inscreva-se em um de nossos cursos

Compartilhe este post

Outros artigos que você pode ter interesse: