by Claudemir Todo Bom - 2024-Feb-20
Em Fevereiro de 2024 detectei o que julguei serem falhas gravíssimas no sistema Whaticket e seus derivados.
O autor do projeto original deixa claro que ele não teve uma atenção à segurança da aplicação, recomendando que fosse utilizado apenas em ambientes de rede local. Porém existem várias versões derivadas, principalmente com o objetivo de fornecimento no modelo Software como Serviço (SaaS) que acabaram por replicar essas falhas.
São duas falhas:
O backend não valida credenciais na conexão websocket e fornece acesso a qualquer um que se conecta.
O backend envia mensagens via websocket que não são destinadas ao usuário logado. Esse problema pode ser confirmado através da console do navegador onde é possível observar toda a troca de mensagens, status, contatos que ocorre entre todos os usuários do mesmo sistema, apenas observando o websocket aberto pelo componente das notificações.
Essas duas falhas em conjunto expõem toda a comunicação que passa pelo servidor para qualquer pessoa que tentar conectar no websocket.
Basicamente ele se conecta ao websocket do servidor sem fornecer nenhuma credencial e passa a mostrar as mensagens recebidas.
Para funcionar o servidor precisa possuir um usuário com o ID 1, que é o padrão para o usuário administrador.
USE APENAS PARA TESTAR SEU PRÓPRIO SERVIDOR OU ALGUM SERVIDOR AO QUAL VOCÊ TENHA PERMISSÃO. EU NÃO SOU RESPONSÁVEL PELO QUE VOCÊ FIZER COM ESTA FERRAMENTA.
Acessando a página de releases Você pode baixar o arquivo executável e rodar direto no Windows.
Você vai precisar do nodejs instalado em seu computador.
Tendo ele instalado, abra um terminal e navegue até a pasta em que este exploit está instalado. Inicialmente você vai precisar instalar as dependências do script:
npm installDepois você pode executar ele:
npm startO Whaticket-Exploit fornece algumas opções na primeira tela:
- backend_hostname: Esse é obrigatório, vai indicar onde está rodando o serviço de websocket, normalmente sem porta, mas se tiver necessidade pode ser colocada no formato hostname:port
- frontend_hostname: (opcional) O backend de alguns sistemas exigem a URL do frontend como origem, isso não adiciona segurança pois é facilmente forjável. Preenchendo esse campo o cabeçalho de origem será preenchido de acordo
- login e password: (opcional) É possível fornecer um login e senha para observar vazamento de dados de outras empresas e usuários. ATENÇÃO: Nesse modo as mensagens direcionadas ao login fornecido também serão exibidas, o que não configura exatamente um vazamento... só é mesmo vazamento se mensagens que o usuário fornecido não devesse ter acesso aparecerem.
- enable ssl: Geralmente marcado, indica que deve utilizar https para acessar o backend.
Se este código ajudou você a detectar e resolver uma falha no teu servidor, considere fazer uma doação ao autor pelo PIX abaixo.
Chave Pix: 80fd8916-1131-4844-917e-2732eaa2ba74
