Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Validar el origen del handshake

5 tareas · 40 min · Principiante

Cuando el canal se autentica con una cookie, el navegador la manda en el handshake sin preguntar qué página lo está abriendo. La única pista de quién pidió la conexión es la cabecera de origen, y solo sirve si el servidor la compara bien. El panel de coordinadores de Trasteos Corotos usa justo ese esquema, y un coordinador jura que no abrió el panel a la hora que dice el registro. Tienes el código, el inventario de dominios y dos registros.

0 de 5 · 0%

Objetivo de la sala

Cuando el canal se autentica con una cookie, el navegador la manda en el handshake sin preguntar qué página lo está abriendo. La única pista de quién pidió la conexión es la cabecera de origen, y solo sirve si el servidor la compara bien. El panel de coordinadores de Trasteos Corotos usa justo ese esquema, y un coordinador jura que no abrió el panel a la hora que dice el registro. Tienes el código, el inventario de dominios y dos registros.

Con una petición normal hecha desde JavaScript, el navegador aplica la política del mismo origen: una página de otro sitio puede enviar la petición, pero no leer la respuesta salvo que el servidor lo autorice. Con WebSocket no es así. Una página de cualquier sitio puede abrir una conexión hacia el servicio, el navegador adjunta las cookies que correspondan a ese destino según sus reglas, y si el servidor acepta, la página lee y escribe en el canal como si fuera la aplicación legítima.

Lo que el navegador sí hace es poner en el handshake la cabecera Origin con el origen de la página que abre la conexión, y no deja que el JavaScript la falsifique. La norma del protocolo indica que un servidor que no deba aceptar conexiones de cualquier página compare ese valor y responda 403 si no le sirve. CWE tiene una entrada específica para cuando no se hace: CWE-1385, falta de validación del origen en WebSockets.

Responde para continuar

¿Por qué una página de otro sitio puede usar la sesión de un coordinador en el canal de Corotos si nadie comprueba el origen?

Ver pista de ayuda

Piensa qué parte del trabajo hace el navegador por su cuenta y qué parte le queda al servidor.

Abre el laboratorio. ws-origen.js acepta un origen si contiene el nombre del dominio de la empresa en cualquier parte. Esa forma de comparar deja pasar dominios que nadie en Corotos registró, siempre que el texto aparezca dentro. Compara cada origen aceptado en registro-handshakes.txt con dominios-corotos.txt.

Responde para continuar

¿Qué origen aceptado en el registro no es un dominio de Corotos? Escríbelo tal como aparece.

Ver pista de ayuda

El nombre de Corotos aparece al principio, pero el dominio que manda es el que termina la dirección.

El hallazgo no es teórico si el registro muestra que con ese handshake viajó la cookie de alguien y que el canal entregó datos. La cookie del panel está marcada para viajar también en contextos de terceros, según el comentario del código, y eso es lo que hizo posible el resto.

Responde para continuar

¿De qué cuenta era la sesión que viajó en el handshake aceptado desde ese origen ajeno?

Ver pista de ayuda

Misma línea del registro de handshakes; después confirma en mensajes-enviados.txt qué recibió.

Un origen es esquema, host y puerto. La forma robusta de comprobarlo es tener la lista cerrada de orígenes que deben abrir el canal y comparar el valor completo contra ella, sin búsquedas de subcadenas ni expresiones sin anclar. El código de Corotos tiene un segundo detalle: cuando no hay cabecera de origen, acepta por defecto para no romper a un aliado que se conecta sin navegador.

Responde para continuar

¿Qué cambio en ws-origen.js corrige la comprobación?

Ver pista de ayuda

Terminar en el nombre tampoco basta si alguien registra un nombre que acabe igual sin el punto.

Un cliente que no es un navegador —un programa, una herramienta de línea de comandos— puede poner en la cabecera de origen lo que quiera. Por eso la norma aclara que esta comprobación no sirve para impedir que esos clientes se conecten. Su papel es otro, y conviene tenerlo claro antes de escribir el informe para que nadie lea el arreglo como un control de autenticación.

Responde para continuar

Si un programa puede enviar cualquier origen, ¿para qué sirve comprobarlo en el handshake?

Ver pista de ayuda

La víctima de este fallo siempre está usando un navegador.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad