Estos no son los paquetes npm que buscas
DeveloperSteve Coochin
4 de mayo de 2022
0 minutos de lecturaA lo largo de los años, como desarrollador, he creado e implementado muchas aplicaciones en agencias digitales, proyectos personales, startups y trabajos independientes. Con plazos ajustados, expectativas de los clientes y fechas de entrega por cumplir, la seguridad no solía ser una prioridad al instalar un paquete de código abierto con npm. Esto a menudo implicaba rehacer y limpiar implementaciones en las que se habían infiltrado vulnerabilidades conocidas, lo que alargaba aún más los plazos y decepcionaba a los clientes.
A principios de año, se publicaron más de 500 paquetes maliciosos en el ecosistema npm para generar confusión de dependencias en las aplicaciones. Estos paquetes inyectaban directamente código y funciones no deseados, o introducían código malicioso mediante la inyección de una librería de código abierto directa o de dependencia.
Al igual que en las películas originales de Star Wars, estos paquetes maliciosos intentaban usar un truco mental Jedi para infiltrarse en nuestras aplicaciones. Como estos casos van en aumento, es importante dedicar el tiempo necesario y tomar precauciones para proteger nuestras implementaciones.
Veamos algunas formas de ayudar a proteger las aplicaciones contra la inyección de dependencias.
Debida diligencia
Siempre es importante entender qué usa tu aplicación en cada etapa del desarrollo. Alrededor del 80 % de las vulnerabilidades del ecosistema npm aparecen debido a rutas vulnerables en la inyección de dependencias. Por eso, la debida diligencia es fundamental. Para mantener la seguridad, debemos entender cómo se crearon los paquetes de código abierto que elegimos y qué tipo de soporte tienen.
Una forma de hacerlo es revisar la funcionalidad de la librería, ya sea en la página del paquete en npm o en el repositorio de Git. Esto puede ayudarte a averiguar cuántas versiones se han publicado, evaluar el soporte y ver qué dependencias requiere el paquete.

Otra forma práctica de hacerlo es con Snyk Advisor, que ofrece información útil sobre el estado del paquete y los tipos de vulnerabilidades que han aparecido a lo largo de su historial.
Una de las mejores cosas de la página de Snyk Advisor es que ofrece una visión integral del proyecto, incluido un puntaje de estado basado en la comunidad, la popularidad, la seguridad y el mantenimiento.

En esta página también puedes consultar gráficos prácticos que muestran estadísticas de popularidad a lo largo del tiempo, como las descargas por semana, la cantidad de commits aportados por la comunidad y el número de problemas pendientes. Esto ayuda a evaluar la actividad de la comunidad, además de la adopción en el ecosistema.

Ambos gráficos ayudan a mostrar qué tan rápido se uniría una comunidad para corregir los problemas de seguridad que surjan en el proyecto.
Creación de árboles de dependencias
Un solo npm install puede incorporar cientos de librerías a tu aplicación de Node. Electron, por ejemplo, tiene tres dependencias principales, y algunas de ellas tienen sus propias dependencias, que se agregarán automáticamente a una aplicación basada en Electron.
Los árboles de dependencias pueden ayudar a detectar los paquetes que se agregan a través de una librería o dependencia. Y, lo que es más importante, facilitan la creación de un SBOM (lista de materiales de software) al identificar los componentes que usa tu aplicación.
Hay varias formas de generar un árbol de dependencias, por ejemplo:
Con una herramienta de mapeo visual
Las herramientas de mapeo visual son una forma práctica de generar mapas de dependencias, ya que muestran visualmente todos los componentes de código abierto que usa tu aplicación.
Una herramienta de mapeo visual que he usado es npmgraph.an, que crea una vista bidimensional del árbol de dependencias a partir de una sola librería de npm. Una vez generado, puedes hacer clic en los nodos del árbol que representan dependencias para ver más información en un panel a la izquierda.

Con npm en la línea de comandos
Me encanta lo versátil que es npm: sirve desde para instalar una librería global como Snyk CLI hasta para generar una lista de librerías y dependencias.
Para generar un árbol, ve al directorio raíz de un proyecto que tenga un manifiesto de paquetes y escribe npm list. Esto mostrará una lista sin gráficos de todas las librerías de nivel superior que usa una aplicación basada en npm. También puedes obtener más información sobre un paquete específico si escribes npm list [package].

Sin embargo, el comando anterior no muestra las dependencias anidadas. Para eso, debemos usar la etiqueta --depth. Por ejemplo, si ejecutas npm list --depth=5 en el directorio raíz de un proyecto npm, verás un árbol más completo.

También puedes especificar la profundidad de un paquete en particular con npm list [package] --depth=5. Una desventaja de este método para organizar paquetes es que puede ser complicado navegarlo. Es fácil perderse en el árbol, sobre todo al trabajar con mapas de dependencias grandes.
Con Snyk Open Source
Este método combina la vista del árbol en la línea de comandos con el mapeo visual y, además, detecta vulnerabilidades.
Para comenzar, regístrate para obtener una cuenta gratuita de Snyk e inicia sesión. Luego, conecta a Snyk el repositorio donde está almacenada tu aplicación y ejecuta un análisis. Para hacerlo, haz clic en el botón Agregar proyecto y selecciona el repositorio que prefieras.

Sigue los pasos para conectar el repositorio y dale permiso a Snyk para acceder a él.
Consejo práctico: En la mayoría de las plataformas, el análisis funciona tanto si el repositorio es público como si es privado.
Una vez conectado, busca y selecciona el repositorio de la aplicación para el que quieres generar un árbol. Luego, haz clic en el botón Agregar repositorios seleccionados, en la parte superior derecha, para iniciar el análisis.

Cuando termine el análisis, verás una vista consolidada de los hallazgos. Si expandes el nivel superior con la flecha desplegable, verás el desglose de cada elemento que el análisis pudo detectar.

Para este ejercicio, buscamos algunos elementos del manifiesto de paquetes npm package.json. Haz clic en la línea package.json para expandir la lista y ver las rutas vulnerables detectadas en librerías específicas, más información sobre las correcciones recomendadas y mucho más.

Aquí es donde ocurre la verdadera magia Jedi. Haz clic en la pestaña Dependencias para ver una lista de las dependencias del proyecto. Haz clic en el ícono de estructura de árbol, en la parte superior derecha, para ver detalles como la relación entre las librerías y la ubicación de las vulnerabilidades detectadas.

Ahora tienes un árbol interactivo de librerías y dependencias que te muestra dónde comienzan las rutas vulnerables.
Lo mejor de generar un árbol de dependencias con Snyk es que los análisis continuos te alertan sobre las nuevas vulnerabilidades que aparezcan y sugieren soluciones, como actualizar versiones o aplicar parches personalizados. Incluso puedes configurar pull requests automáticos en tu repositorio para corregir las vulnerabilidades detectadas aún más rápido.
Que el (código) fuente te acompañe
Revisar periódicamente tus componentes de código abierto es una parte importante del mantenimiento de la seguridad de las aplicaciones. Los árboles de dependencias son un excelente punto de partida para entender qué estás usando, pero también es fundamental analizar continuamente tu aplicación con una herramienta de análisis de composición de software (SCA), como Snyk Open Source.
Empieza con los desafíos de Capture the Flag
Aprende a resolver desafíos de captura la bandera con nuestro taller virtual introductorio a pedido.



