Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

XSS en el DOM

4 tareas · 20 min · Principiante

Hay un XSS que el servidor no ve nunca: el que ocurre entero en el navegador, cuando el propio JavaScript de la pagina toma un dato de la URL y lo escribe en el documento sin tratarlo. El servidor no interviene, asi que codificar en el servidor no lo cierra ni el registro lo muestra. En Boletia el script del perfil escribe en la pagina lo que viene del fragmento de la URL. Se localiza en el codigo del cliente, se clasifica y se arregla.

0 de 4 · 0%

Objetivo de la sala

Hay un XSS que el servidor no ve nunca: el que ocurre entero en el navegador, cuando el propio JavaScript de la pagina toma un dato de la URL y lo escribe en el documento sin tratarlo. El servidor no interviene, asi que codificar en el servidor no lo cierra ni el registro lo muestra. En Boletia el script del perfil escribe en la pagina lo que viene del fragmento de la URL. Se localiza en el codigo del cliente, se clasifica y se arregla.

En perfil.js el script lee un valor del fragmento de la URL —la parte que va despues del #— y lo escribe en la pagina con innerHTML. El fragmento no llega al servidor: lo maneja solo el navegador. Por eso este XSS no aparece en los registros del servidor y no se cierra codificando la salida en el servidor: el dato nunca pasa por alli. El auditor lo busca en el codigo del cliente, en el punto donde el script escribe en el documento algo que vino de la URL.

Abre el script y sigue el dato: de donde lo toma y donde lo escribe.

Esta tarea se hace en el laboratorio

Un escritorio Linux con terminal, aquí en la página. No instalas nada y no puedes romper nada.

Preparando el escritorio…

Responde para continuar

Por que el XSS de perfil.js no se ve en los registros del servidor?

Ver pista de ayuda

Fijate en que parte de la URL lee el script y si esa parte viaja al servidor.

La clave de un XSS en el DOM es el sink: la funcion del navegador que convierte texto en marcado vivo. Escribir en innerHTML un dato que viene de la URL hace que el navegador trate ese texto como parte del documento y ejecute lo que contenga. El auditor reconoce el fallo por ese par —origen no confiable, como la URL, que termina en un sink que interpreta marcado, como innerHTML—, no por probar nada en el navegador.

Hay sinks seguros y sinks peligrosos: el mismo dato en uno es texto y en otro es codigo.

Esta tarea se hace en el laboratorio

Un escritorio Linux con terminal, aquí en la página. No instalas nada y no puedes romper nada.

Preparando el escritorio…

Responde para continuar

Que combinacion hace peligroso al codigo de perfil.js?

Ver pista de ayuda

Mira el origen del dato y la funcion del navegador donde termina escribiendose.

El arreglo vive donde vive el fallo: en el cliente. En vez de escribir el dato con innerHTML, se usa una via que lo trate como texto —asignar textContent—, de modo que el navegador lo muestre sin interpretarlo como marcado. Si de verdad hace falta construir elementos, se crean con las funciones del DOM y se insertan como nodos, nunca pegando una cadena con datos del usuario. El auditor recomienda el sink seguro, no filtrar la URL.

El principio es el mismo de toda la ruta: el dato que viene de fuera es texto hasta que algo decide lo contrario, y ese algo no debe ser el usuario.

Esta tarea se hace en el laboratorio

Un escritorio Linux con terminal, aquí en la página. No instalas nada y no puedes romper nada.

Preparando el escritorio…

Responde para continuar

Que arreglo cierra el XSS en el DOM de perfil.js?

Ver pista de ayuda

El arreglo cambia el sink por uno que trate el dato como texto, no esconde el script.

El XSS en el DOM tiene su propia nota de triaje en Boletia, con el archivo, el sink, la clasificacion CWE-79 y el arreglo del lado del cliente. Abrela en el laboratorio, confirma que describe el innerHTML de perfil.js y lee el codigo del hallazgo con el que cierra.

Esta tarea se hace en el laboratorio

Un escritorio Linux con terminal, aquí en la página. No instalas nada y no puedes romper nada.

Preparando el escritorio…

Responde para continuar

Abre la nota de triaje del XSS en el DOM de Boletia (carpeta auditoria) y escribe el codigo del hallazgo que la cierra.

Ver pista de ayuda

Es la nota del script perfil.js y su innerHTML, no la del buscador ni la del comentario guardado.

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

Preparando el escritorio…

16:24
Terminal (user@whoami)
user@whoami:~$
Tab Autocompletar ↑/↓ Historial
bash 5.2.21
Whoami-Labs OS v3.0.1 LTS · build bcc89e

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