🔒 Registro cerrado · Apertura oficial próximamente · Acceso exclusivo para alumnos activos
Iniciar SesiónContaminación de prototipos y fusiones de objetos
5 tareas · 40 min · Principiante
En JavaScript casi todos los objetos comparten un mismo ancestro, y una función de fusión descuidada puede escribir en él. Lo que se escribe ahí lo heredan de golpe todos los objetos de la página, también los que el código usa para decidir permisos. La recepción de un consultorio vio por un momento los botones de sedes ajenas en el panel de Turnoverde. Te entregan la utilidad de fusión, cómo se arman las preferencias, la vista de sedes y los registros del navegador y del servidor.
Objetivo de la sala
En JavaScript casi todos los objetos comparten un mismo ancestro, y una función de fusión descuidada puede escribir en él. Lo que se escribe ahí lo heredan de golpe todos los objetos de la página, también los que el código usa para decidir permisos. La recepción de un consultorio vio por un momento los botones de sedes ajenas en el panel de Turnoverde. Te entregan la utilidad de fusión, cómo se arman las preferencias, la vista de sedes y los registros del navegador y del servidor.Cuando el código lee una propiedad que un objeto no tiene, JavaScript no se detiene: la busca en el prototipo del objeto, y luego en el prototipo de ese prototipo. Casi todos los objetos creados con llaves terminan en el mismo, Object.prototype. La clave especial __proto__ da acceso a ese prototipo, y constructor.prototype es otro camino al mismo sitio.
Una fusión recursiva típica recorre las claves de un objeto de origen y copia cada una en el destino, bajando por los objetos anidados. Si el origen viene de un JSON externo, puede traer una clave literal __proto__ (al analizar JSON, esa clave queda como propiedad propia del objeto). La función baja por ella, llega a Object.prototype y escribe ahí. MITRE la cataloga como CWE-1321. En el servidor, con Node.js, el efecto puede ser grave; en el navegador, el daño depende de qué código lea después una propiedad que no existe.
Responde para continuar
¿Por qué una propiedad escrita en `Object.prototype` afecta a objetos que nadie tocó?
Ver pista de ayuda
Piensa en lo que hace JavaScript cuando una propiedad falta.
Abre el laboratorio. Lee fusionar.js y preferencias.js: la configuración del panel se arma fusionando unos valores fijos, las preferencias guardadas del usuario y un objeto que llega en la URL para que los enlaces se puedan compartir. Luego busca en errores-cliente.txt los eventos del vigilante que plataforma añadió el 4 de noviembre.
Responde para continuar
¿Qué propiedad terminó heredada por todos los objetos del panel según el vigilante? Escríbela tal como aparece en el registro.
Ver pista de ayuda
El vigilante nombra la clave al final de su mensaje.
El alcance de un hallazgo en el navegador se mide por sesiones: cada sesión es una página cargada con su propio Object.prototype. Cuenta las sesiones distintas en las que el vigilante detectó el prototipo alterado. Una misma sesión puede aparecer más de una vez.
Responde para continuar
¿Cuántas sesiones distintas del registro del navegador llegaron con el prototipo alterado?
Ver pista de ayuda
Agrupa por el identificador de sesión, no por cuenta ni por línea.
PanelSedes.vue decide qué sedes pedir mirando un permiso del usuario. El permiso que la recepción no tiene no aparece en su respuesta de /api/yo, así que su lectura cae en el prototipo. Cruza cada sesión con aviso del vigilante con registro-api-sedes.txt. Fíjate también en el origen de la sesión de la recepción: no escribió nada, abrió un enlace.
Responde para continuar
¿Cómo se valora el impacto del hallazgo con estos dos registros?
Ver pista de ayuda
Lee el código de respuesta del servidor para cada petición de alcance completo.
El servidor contuvo el daño esta vez, pero el panel tiene otras comprobaciones que leen propiedades ausentes, y un enlace compartido basta para alterar la página de otra persona.
Responde para continuar
¿Qué cambio quita la causa del hallazgo en el panel de Turnoverde?
Ver pista de ayuda
La causa está en la función que copia claves sin mirar cuáles son.
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.