Fueron encontradas tres vulnerabilidades en NPM, las cuales se solucionan en NPM 6.13.4
Los desarrolladores que están a cargo del proyecto del administrador de paquetes NPM, dieron a conocer hace poco la liberación de una actualización correctiva de NPM 6.13.4 incluida en la entrega de Node.js y utilizada para distribuir módulos JavaScript.
Esta nueva versión correctiva del gestor fue lanzada con la finalidad de llegar a solucionar tres vulnerabilidades que permiten modificar o sobrescribir los archivos arbitrarios del sistema al instalar un paquete preparado por un atacante.
CVE-2019-16775
Esta vulnerabilidad afecta a las versiones de NPM CLI anteriores a 6.13.3, pues estas son vulnerables a una escritura de archivo arbitrario. Es posible que los paquetes creen enlaces simbólicos a archivos fuera de la carpeta node_modules a través del campo bin después de la instalación.
Una entrada construida correctamente en el campo bin package.json permitiría a un editor de paquetes crear un enlace simbólico que apunta a archivos arbitrarios en el sistema de un usuario cuando se instala el paquete. Este comportamiento aún es posible mediante scripts de instalación.
CVE-2019-16776
En esta vulnerabilidad las versiones de NPM CLI anteriores a 6.13.3 son afectadas a una escritura de archivo arbitrario. Ya que no se puede evitar el acceso a las carpetas fuera de la carpeta node_modules prevista a través del campo bin.
Una entrada construida correctamente en el campo bin package.json permitiría a un editor de paquetes modificar y obtener acceso a archivos arbitrarios en el sistema de un usuario cuando se instala el paquete. Este comportamiento aún es posible mediante scripts de instalación.
En el campo bin se permitieron rutas con “/../”
CVE-2019-16777
Finalmente, en esta vulnerabilidad las versiones de NPM CLI anteriores a 6.13.4 son vulnerables a una sobrescritura de archivos arbitrarios. Ya que no puede evitar que otros binarios sobrescriban los binarios existentes instalados globalmente.
Por ejemplo, si un paquete se instaló globalmente y creó un binario de servicio, cualquier instalación posterior de paquetes que también creen un binario de servicio sobrescribirá el binario de servicio anterior. Este comportamiento todavía está permitido en instalaciones locales y también a través de scripts de instalación.
Solo puede reemplazar archivos en el directorio de destino donde están instalados los archivos ejecutables (generalmente /usr, /local, /bin).
Aun que un factor importante para estas vulnerabilidades es que la persona que quiere aprovechar estos fallos tendría que hacer que su víctima instale el paquete con la entrada bin especialmente diseñada. Sin embargo, como hemos visto en el pasado, esta no es una barrera insuperable.
El equipo de seguridad de npm, Inc. ha estado escaneando el registro en busca de ejemplos de este ataque, y no ha encontrado ningún paquete publicado en el registro con este exploit. Eso no garantiza que no se haya utilizado, pero sí significa que actualmente no se está utilizando en paquetes publicados en el registro.
Continuaremos monitoreando y tomaremos medidas para evitar que los malos actores exploten esta vulnerabilidad en el futuro. Sin embargo, no podemos escanear todas las fuentes posibles de paquetes npm (registros privados, espejos, repositorios git, etc.), por lo que es importante actualizar lo antes posible.
Solución a los fallos
Como principal solución, se recomienda que se actualice a la nueva version correctiva ya que las bibliotecas de análisis package.json en uso en NPM v6.13.3 se actualizaron de manera que desinfectarían y validarían todas las entradas en el campo bin para eliminar las barras inclinadas iniciales, entradas de ruta, y otros medios de escape de ruta, utilizando la utilidad de ruta bien probada y altamente confiable integrada en Node.js.
Aunque, como solución alternativa, se puede instalar con la opción –ignore-scripts, que prohíbe la ejecución de paquetes de controladores integrados.
Sin más, si quieres conocer más al respecto sobre los fallos, puedes consultar los detalles en la publicación del blog de npm en el siguiente enlace.
Finalmente, para quienes quieran instalar la nueva versión, podrán hacerlo desde los canales oficiales u optando por realizar la compilación desde su código fuente. Para ello pueden seguir las instrucciones en el siguiente enlace.