Laboratorio vulnerable a Cross-Site WebSocket Hijacking (CSWSH) inspirado en una aplicación bancaria.
- Linux
sudo apt update
sudo apt install nodejs npm libnss3-tools
sudo apt install mkcert
npm install --global http-server
- Windows
- Descarga NodeJS
- Descarga mkcert
- Descarga http-server
git clone https://github.com/z3robyte/CSWSH-lab
cd CSWSH-lab
npm install
Para que sea posible la vulnerabilidad en este lab, el servidor local debe usar HTTPS, debido a que las cookies tienen que tener el atributo SameSite=None
, y por requerimiento de este, el atributo secure
. Más info aquí.
A continuación veremos como generar e instalar los certificados necesarios ello:
mkdir certificates
cd certificates
mkcert install # si da problemas, ejecutar como admin o root
mkcert localhost
- Para levantar la aplicación:
node app.js
# https://localhost:3000
Hay 2 usuarios, cuyas credenciales son: victim:pass123
y attacker:haxxor1
- Para levantar el servidor del atacante:
cd exploit
http-server -S -C "../certificates/localhost.pem" -K "../certificates/localhost-key.pem"
# https://localhost:8080
Acordarse acceder a los servidores por HTTPS
La aplicación web usa websockets para realizar transacciones de dinero ficticio entre usuarios. Sin embargo, el handshake del websocket depende únicamente de la cookie de sesión para establecerse (la cual tiene sameSite=None
), por lo que podemos crear un sitio malicioso para que cuando una víctima lo visite se establezca una conexión websocket de forma silenciosa con javascript y nos enviemos dinero a nuestra cuenta.
Este ataque es parecido a un CSRF pero aplicado a los websockets.
Aquí tienes un video mostrando la explotación de la vulnerabilidad (haz click en la imagen):
Si este proyecto te ha ayudado a aprender algo, considera aportar tu granito de arena para hacer más labs como este.