🔒 Registro cerrado · Apertura oficial próximamente · Acceso exclusivo para alumnos activos
Iniciar SesiónArchivos de bloqueo y dependencias transitivas
5 tareas · 40 min · Principiante
La mayor parte del código que corre en una aplicación web no lo escribió su equipo: llega en paquetes, y cada paquete trae los suyos. El archivo que dice qué versión exacta de cada uno quedó instalada es el archivo de bloqueo, y es lo primero que se lee cuando salta una alerta. Cooperativa Uvito te entrega el proyecto de su portal de asociados y una alerta sobre un paquete que nadie del equipo recuerda haber instalado.
Objetivo de la sala
La mayor parte del código que corre en una aplicación web no lo escribió su equipo: llega en paquetes, y cada paquete trae los suyos. El archivo que dice qué versión exacta de cada uno quedó instalada es el archivo de bloqueo, y es lo primero que se lee cuando salta una alerta. Cooperativa Uvito te entrega el proyecto de su portal de asociados y una alerta sobre un paquete que nadie del equipo recuerda haber instalado.El manifiesto del proyecto (en Node.js, package.json) declara las dependencias directas y, casi siempre, un rango de versiones aceptables para cada una. El rango con acento circunflejo admite cualquier versión que no cambie el primer número distinto de cero: ^1.2.3 acepta desde la 1.2.3 hasta antes de la 2.0.0, pero ^0.2.3 solo hasta antes de la 0.3.0. La virgulilla es más estrecha: ~1.2.3 se queda dentro de la 1.2. Con rangos, dos instalaciones hechas en días distintos pueden traer versiones distintas.
El archivo de bloqueo (package-lock.json) congela el resultado de una instalación: la versión exacta de cada paquete del árbol, directo o no, de dónde se descargó (resolved) y la suma de integridad del archivo descargado (integrity). En su formato actual, las entradas van bajo packages y la clave de cada una es la ruta en la que queda dentro de node_modules. Si una dependencia necesita una versión incompatible con la que está en la raíz, recibe su propia copia anidada bajo su carpeta.
Para seguridad esto tiene una consecuencia directa: lo que está en producción lo dice el archivo de bloqueo, no el manifiesto. Una alerta se contrasta contra el bloqueo, y un arreglo se comprueba en el bloqueo.
Responde para continuar
Un proyecto declara "^0.4.1" para un paquete. ¿Qué versión podría instalar sin incumplir el rango?
Ver pista de ayuda
Con el primer número en cero, el que no puede cambiar es el siguiente.
Abre el laboratorio y lee encargo.txt, package.json y alerta-escaner.txt. El paquete de la alerta no figura en el manifiesto: es una dependencia transitiva, la dependencia de una dependencia. Para saber por qué está ahí hay que subir por el árbol hasta llegar a algo que sí declaró el proyecto. La salida de npm ls del archivo arbol-analiza-fechas.txt hace ese recorrido, y el archivo de bloqueo lo confirma en el campo dependencies de cada entrada.
Responde para continuar
¿Qué dependencia directa del portal es la que termina trayendo la copia vulnerable del paquete de la alerta? Escribe su nombre.
Ver pista de ayuda
Sube desde la versión de la alerta, no desde la otra copia del mismo paquete.
El árbol enseña dos versiones del mismo paquete instaladas a la vez. No es un error: cada dependencia pidió un rango distinto y el gestor no pudo satisfacer los dos con una sola copia, así que dejó una en la raíz y otra anidada. Por eso «ya tenemos la versión nueva» no basta para cerrar una alerta: hay que saber cuál de las copias está afectada y dónde vive.
Responde para continuar
¿Cuál es la clave del archivo de bloqueo de la copia que señala la alerta? Escríbela tal como aparece.
Ver pista de ayuda
Busca la entrada cuya versión coincide con la de la alerta.
Hay tres maneras de mover una dependencia transitiva. La primera es que el rango que pide su padre ya admita una versión corregida: entonces basta con actualizar esa entrada del bloqueo, sin tocar el manifiesto, y revisar el cambio. La segunda es actualizar el padre a una versión que pida otra cosa, lo que puede traer cambios incompatibles. La tercera es forzar la versión desde la raíz del proyecto (en npm, el campo overrides), útil cuando el padre no ha publicado nada, pero que obliga a probar que el padre funciona con una versión que no eligió.
Lo que no sirve es añadir el paquete como dependencia directa con la versión buena: el padre sigue pidiendo su rango y conserva su copia anidada. Y borrar el archivo de bloqueo para regenerarlo todo cierra la alerta a costa de cambiar a ciegas cientos de versiones que nadie revisará. Compara el aviso, el rango que pide el padre y las versiones publicadas del padre en registro-calendario-util.txt, y lee las tres propuestas de notas-equipo.txt.
Responde para continuar
¿Qué versión corregida del paquete vulnerable admite ya el rango que pide hoy su padre directo?
Ver pista de ayuda
Cruza el rango del padre en el archivo de bloqueo con las líneas de versiones corregidas del aviso.
Un archivo de bloqueo solo protege si la instalación lo respeta. Según el gestor y su configuración, la orden de instalación de uso diario puede actualizar el bloqueo cuando el manifiesto y el bloqueo no coinciden, y entonces lo que se construye no es lo que se revisó. Para eso existe una orden de instalación limpia (npm ci), que instala exactamente lo que dice el bloqueo, falla si no concuerda con el manifiesto y nunca lo reescribe. Lee pipeline.txt y la observación del equipo de plataforma.
Responde para continuar
¿Qué cambio en la integración continua de Uvito ataca la observación del equipo de plataforma?
Ver pista de ayuda
El problema es que el bloqueo cambia durante la instalación sin que nadie lo vea.
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.