Alguien intentó ocultar una puerta trasera en un paquete popular JavaScript npm

El equipo de Node Package Manager (npm) evitó un desastre hace unos días cuando descubrierón y bloquearón la distribución de un mecanismo de puerta trasera ingeniosamente escondido dentro de un popular paquete de JavaScript.

El mecanismo de puerta trasera real se encontró en "getcookies", un paquete npm relativamente nuevo (biblioteca de JavaScript) para trabajar con cookies del navegador.

El equipo de npm que analizó este paquete después de recibir informes de la comunidad npm dice que "getcookies" contiene un sistema complejo para recibir comandos de un atacante remoto, que podría apuntar a cualquier aplicación de JavaScript que haya incorporado esta biblioteca. El equipo de npm explica:

La puerta trasera funcionaba analizando las request.headers HTTP proporcionadas por el usuario, buscando datos específicamente formateados que proporcionan tres comandos diferentes a la puerta trasera.
[...]
Podemos ver aquí que los encabezados están codificados y el resultado busca valores en el formato de: gCOMMANDhDATAi

Según el equipo de npm, la puerta trasera "permitió a un atacante ingresar código arbitrario en un servidor en ejecución y ejecutarlo".

El módulo original backdoored se importó en otros paquetes

Pero las cosas no terminaron aquí. La biblioteca "getcookies" era nueva y no era muy popular, y se incluyó en muy pocos proyectos.

El equipo de npm dice que descubrió una cadena de dependencia anidada a través de la cual el paquete "getcookies" había llegado indirectamente a la estructura de una biblioteca muy popular llamada "Mailparser".

mailparser
└── http-fetch-cookies
└── express-cookies
└──getcookies

Mailparser es un paquete npm para analizar datos de correo electrónico usando JavaScript. Esta es una biblioteca antigua, y una que ha sido desaprobada a favor de una más nueva llamada "Nodemailer".

Pero a pesar de estar abandonada, la biblioteca no se ha publicado en el índice de paquetes npm, ya que hay aplicaciones antiguas que aún la usan en sus cadenas de construcción. Al momento de escribir, la página Mailparser npm enumeró más de 66,000 descargas semanales.

No se informaron ataques

"Especulamos que el mailparser requiera http-fetch-cookies para ejecutar un ataque en el futuro o inflar conteos de descargas de cookies exprés para aumentar su legitimidad", dijo el equipo de npm hoy en un informe de respuesta a incidentes.

Los investigadores también sugieren que no se produjeron ataques para explotar la puerta trasera porque "ningún paquete publicado en el Registro npm utilizó los módulos maliciosos de una manera que hubiera permitido que se activara la puerta trasera".

Los mantenedores del índice NPM parecen haber atrapado un futuro ataque en la cadena de suministro antes de que sucediera. El equipo de npm también eliminó al usuario "dustin87" y no publicó los paquetes getcookies, express-cookies y http-fetch-cookies.

También lanzaron Mailparser a v2.2.0, eliminando tres versiones (2.2.3, 2.2.2 y 2.2.1) que contenían el paquete malicioso http-fetch-cookies.

Ha habido incidentes anteriores

En agosto de 2017, el mismo equipo de npm eliminó 38 paquetes JavaScript npm que fueron capturados robando variables de entorno en proyectos infectados.

Algo similar sucedió en PyPI (Python Package Index) el repositorio oficial de software de terceros para el lenguaje de programación Python. En septiembre de 2017, la Oficina de Seguridad Nacional de Eslovaquia (NBU) encontró y reportó diez paquetes de Python maliciosos en PyPI, que fueron eliminados rápidamente.