Hace algunos días en las dependencias del paquete npm con el instalador de PureScript fue detectado un código malicioso, que se manifiesta cuando se intenta instalar el paquete purescript.
El código malicioso se incrusta a través de las dependencias load-from-cwd-or-npm y las dependencias de mapa de velocidad. Cabe destacar que el autor original del paquete npm con el instalador de PureScript, que hasta hace poco estaba comprometido en el mantenimiento de este paquete npm, pero el paquete fue enviado a otros mantenedores es responsable de acompañar los paquetes con estas dependencias.
Sobre el problema
El problema fue descubierto por uno de los nuevos analistas del paquete, a quien se transfirieron los derechos de mantenimiento después de muchos desacuerdos y discusiones desagradables con el autor original del paquete npm purescript.
Los nuevos mantenedores son responsables del compilador de PureScript e insistieron en que el paquete NPM con su instalador debe ser reparado por los mismos mantenedores, no por un desarrollador ajeno al proyecto.
El autor del paquete npm con el instalador de PureScript no estuvo de acuerdo durante mucho tiempo, pero luego se dio por vencido y dio acceso al repositorio. Sin embargo, algunas dependencias quedaron bajo su control.
La semana pasada, se anuncio el lanzamiento del compilador PureScript 0.13.2 y los nuevos mantenedores prepararon la actualización correspondiente del paquete npm con el instalador, para la cual se detectó el código malicioso.
El código malicioso se insertó primero en el paquete npm «load-from-cwd-or-npm» en la versión 3.0.2 y luego en el paquete rate-map a partir de la versión 1.0.3. En los últimos días se publicaron varias versiones de ambos paquetes.
Desplazado de la publicación que acompaña al autor del paquete npm con el instalador PureScript, dijo que su cuenta estaba comprometida por atacantes desconocidos.
Sin embargo, en la forma actual, las acciones del código malicioso se limitaron solo al sabotear la instalación del paquete, que fue la primera versión de los nuevos mantenedores. Las acciones malintencionadas se redujeron a un bucle con salida de error al intentar instalar un paquete con el comando «npm i -g purescript» sin realizar ninguna actividad maliciosa explícita.
Se identificaron dos ataques
En resumen, el código sabotea el instalador de purescript npm para evitar que se complete la descarga, lo que hace que el instalador se bloquee durante el paso «Comprobar si se proporciona un binario precompilado para su plataforma».
El primer exploit hizo esto rompiendo el paquete load-from-cwd-or-npm para que cualquier llamada a loadFromCwdOrNpm()retornara una secuencia PassThrough en lugar del paquete se espera (en este caso, el paquete request, que estábamos usando para descargar los binarios del compilador). La segunda iteración del exploit hizo esto modificando un archivo fuente para evitar que se disparara una devolución de llamada de descarga.
4 días después los desarrolladores entendieron el origen de las fallas y se preparaban para lanzar una actualización para excluir load-from-cwd-o-npm de las dependencias, los atacantes lanzaron otra actualización load-from-cwd-or-npm 3.0.4, en donde se ha eliminado el código malicioso.
Sin embargo, una actualización de otra dependencia de Rate-Map 1.0.3 se lanzó casi de inmediato, en la que se agregó una solución que bloquea la llamada de devolución de llamada para su descarga.
Es decir en ambos casos, los cambios en las nuevas versiones de load-from-cwd-or-npm y la tasa de mapa fueron de la naturaleza de una desviación aparente.
Además, en el código malicioso había una verificación que activaba las acciones fallidas solo al instalar la versión de los nuevos mantenedores y no aparecía en absoluto al instalar las versiones anteriores.
Los desarrolladores resolvieron el problema lanzando una actualización en la que se eliminaron las dependencias problemáticas.
Para evitar que el código comprometido se instale en los sistemas de los usuarios, después de intentar instalar la versión problemática de PureScript.
Finalmente el desarrollador recomienda a todos los que cuenten con las versiones dichas del paquete en su sistema eliminar el contenido de los directorios node_modules y los archivos package-lock.json y luego establecer la versión de purescript 0.13.2.