🔒 Registro cerrado · Apertura oficial próximamente · Acceso exclusivo para alumnos activos
Iniciar SesiónXSS 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.
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.
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.
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.
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.
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.
Preparando el escritorio…
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
Preferencias
Configuraciones de cookies
Elige qué categorías permitir. Las esenciales siempre están activas. Consulta la Política de Privacidad.
Esenciales
Siempre activas · sesión, CSRF, tema y esta preferencia
Necesarias para iniciar sesión, proteger formularios (CSRF) y recordar tu elección de cookies y tema. Sin ellas la plataforma no funciona de forma segura.
Analíticos
Hoy no activos en la plataforma; listos para cuando se conecten
Nos ayudan a entender uso de cursos y páginas. Si los activas, se usarán cuando conectemos analítica; hasta entonces no se carga ningún tracker.
Marketing
Hoy no activos; campañas futuras solo con tu permiso
Comunicaciones o campañas. No activos hoy en la plataforma; quedarán listos si los conectamos y solo si los permites.