WebSocket Sin Autenticación
Los endpoints WebSocket que aceptan conexiones sin verificar autenticación permiten que usuarios no autenticados reciban flujos de datos en tiempo real destinados a usuarios autenticados.
Cómo Funciona
Las requests HTTP se autentican por request mediante cookies o headers Authorization. Las actualizaciones WebSocket ocurren una sola vez — si no verificas la identidad del usuario durante el handshake de actualización, cualquier cliente que puede alcanzar el endpoint obtiene una conexión persistente. Una vez conectado sin auth, recibe cada mensaje broadcast enviado a ese canal.
// MAL: servidor WebSocket sin verificación de autenticación en la conexión
const wss = new WebSocketServer({ port: 8080 });
wss.on('connection', (ws) => {
// sin verificación de auth — cualquier cliente obtiene un stream en tiempo real
ws.send(JSON.stringify(await getPrivateFeed()));
});// BIEN: verifica el token de auth durante la actualización WebSocket
const wss = new WebSocketServer({ noServer: true });
httpServer.on('upgrade', async (req, socket, head) => {
const token = new URL(req.url, 'ws://base').searchParams.get('token');
const user = await verifyToken(token);
if (!user) { socket.destroy(); return; } // rechaza actualizaciones no autenticadas
wss.handleUpgrade(req, socket, head, (ws) => {
wss.emit('connection', ws, req, user);
});
});Ejemplo Real
Varias plataformas de chat y trading en tiempo real han tenido vulnerabilidades WebSocket donde conectarse sin autenticación otorgaba acceso a los canales privados de otros usuarios. Las plataformas de trading son especialmente atacadas porque los datos de flujo de órdenes en tiempo real tienen valor financiero directo.
Cómo Prevenirlo
- Autentica la conexión WebSocket durante el handshake de actualización HTTP — antes de que se establezca la conexión
- Pasa un token de auth como parámetro de query o header sub-protocol durante la actualización ws://
- Valida el token del lado del servidor y rechaza la actualización si es inválido (socket.destroy())
- Asocia cada conexión WebSocket con un ID de usuario y filtra los mensajes broadcast para que los usuarios solo reciban sus propios datos
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Sin Límite de Tamaño de Archivo
mediumLos endpoints de carga de archivos sin límites de tamaño permiten a los atacantes agotar el espacio en disco, la memoria y la CPU con cargas de múltiples gigabytes.
Sin Límite de Tamaño del Cuerpo de Request
mediumLos endpoints de API JSON sin límite de tamaño del body pueden ser víctimas de DoS enviando payloads JSON enormes que agotan la memoria del servidor durante el parseo.
Sin Rate Limiting Global
mediumSin rate limiting global a nivel de edge o middleware, cualquier endpoint puede ser inundado con requests hasta que el servidor se desborde.
Sin Timeout de Request
lowLas requests HTTP sin timeouts del lado del servidor permiten que clientes lentos o ataques slow-body mantengan conexiones del servidor abiertas indefinidamente.