Cada día crece la cantidad de paquetes Javascript. Es el resultado de la actividad de una comunidad que, por un lado, demanda nuevas soluciones y, por otro, las genera como forma de autodesarrollo o realización. Un crecimiento tan grande abre nuevas puertas y posibilidades, pero también conlleva peligros, de los que todo desarrollador debe ser consciente.
A finales de noviembre de 2018, la comunidad de GitHub informó de una grave vulnerabilidad en flujo de eventos - que ayuda a trabajar con nodo de forma más eficaz. Era bastante popular, ya que el número de descargas en ese periodo concreto superaba los 2,2 millones a la semana (en comparación con React, con 3,7 millones). Event-stream, así como sus dependencias, dependían de otra biblioteca - mapa-plano-vapor, que se había actualizado con un malware de criptobolsa. Permitía robar claves privadas y otros datos de las cuentas de los usuarios en las máquinas en las que estaba incluido el paquete.
Finalmente, flatmap-stream fue retirada de NPM, lo que creó problemas temporales con muchas otras bibliotecas. En mayo del mismo año, la comunidad encontró una puerta trasera dentro de el getcookie que también formaba parte de muchas otras dependencias. Estos ejemplos pueden multiplicarse, lo que demuestra que es importante prestar atención a las dependencias instaladas en un paquete proyectono sólo de la Javascript perspectiva, sino también en un contexto general.
Apoyarse en soluciones oficiales y grandes comunidades
En la medida de lo posible, es importante confiar en soluciones oficiales en su proyecto. No sólo son menos vulnerables debido a un mejor proceso de desarrollo. Una gran comunidad, que normalmente viene acompañada de una mejor marca, ayuda a identificar los problemas mucho más rápido y, lo que es más importante, a encontrar buenas soluciones.
Utilizar las tendencias de los MNP
Fig. 1 Tendencia NPM de Webpack.
Fig. 2. Tendencia de los MNP en el flujo de eventos.
A veces, el conocimiento de un estado actual del paquete puede no representar su pasado. Un vistazo rápido al gráfico de tendencias de npm puede mostrarte la tendencia actual de un paquete. Mostrará no sólo grandes picos, donde podría encontrarse alguna vulnerabilidad, sino el estado general de un paquete dado (NOTA: los grandes picos en google trends cerca del 24 - 30 de diciembre representan la temporada de vacaciones, lo que puede no representar necesariamente un problema). Como ejemplo, echa un vistazo a la figura 1 - una tendencia representativa de la descarga de Webpack por semana. Verás un crecimiento estable sin ningún punto de ruptura, lo que puede sugerir que Webpack es un paquete estable y seguro de usar. Por otro lado, en la figura 2 encontrarás una gran caída en noviembre, lo cual es una clara señal de que algo malo pudo haber ocurrido en ese periodo (lo cual ya sabemos que es cierto).
Auditoría de dependencia
La mejor y más fiable forma de verificar el estado de sus dependencias es realizar un auditoría. Este comando ya está disponible de forma nativa tanto para yarn como para npm, aunque requiere sus últimas versiones. Envía una lista de dependencias actuales a un endpoint apropiado y devuelve información con sus vulnerabilidades actuales y otros detalles de uso, incluyendo referencias a documentación. (figura3).
Fig. 3. Ejemplo del resultado del comando npm audit. Fuente: https://docs.npmjs.com
Gestionar dependencias en Javascript no es una tarea fácil. El número de soluciones crece día a día, por lo tanto recuerda elegir tus dependencias sabia y cuidadosamente. Sigue auditando tu proyecto actual y actualiza tus paquetes regularmente.
Para saber más sobre las dependencias javascript y cómo resolver algunos de sus problemas, consulte este artículo.
Fuente:
- https://github.com/dominictarr/event-stream/issues/116
- https://blog.npmjs.org/post/180565383195/details-about-the-event-stream-incident
- https://blog.npmjs.org/post/173526807575/reported-malicious-module-getcookies
- https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities
- https://docs.npmjs.com/cli/audit
- https://yarnpkg.com/lang/en/docs/cli/audit/