Se encuentra código malicioso en el paquete npm event-stream, descargado 8 millones de veces en los últimos 2.5 meses
27 de noviembre de 2018
0 minutos de lecturaSe descubrió que un paquete npm muy utilizado, event-stream, contiene un paquete malicioso llamado flatmap-stream. El problema se dio a conocer mediante un reporte publicado en GitHub sobre el repositorio de código fuente.
El paquete event-stream facilita la creación y el uso de streams, y es muy popular: recibe alrededor de 2 millones de descargas por semana. El paquete secundario malicioso se descargó casi 8 millones de veces desde que se incluyó en septiembre de 2018.
Agregamos el paquete malicioso a nuestra base de datos de vulnerabilidades. Si Snyk monitorea tu proyecto y detectamos la dependencia maliciosa (ya sea event-stream@3.3.6 o cualquier versión de flatmap-stream), recibirás una notificación mediante las alertas habituales de Snyk.
Si Snyk no monitorea tus proyectos y quieres comprobar si usan este paquete, haz clic aquí para analizar tus repositorios con Snyk o usa nuestra CLI para analizar los proyectos localmente.
Así se desarrollaron los acontecimientos:
Aunque el paquete npm event-stream es popular, no recibe mantenimiento activo. De hecho, no se había actualizado en un par de años, salvo por algunos cambios cosméticos en el README y la biblioteca maliciosa en cuestión.
Según se informa, el presunto atacante, cuyo nombre de usuario en GitHub es right9ctrl, se ofreció a ayudar a mantener la biblioteca. El responsable original, Dominic Tarr, probablemente con el objetivo de ayudar a sus usuarios, aceptó y le otorgó a right9ctrl permisos para publicar. Es importante señalar que transferir la propiedad es una práctica bastante común en el mundo del código abierto y se utiliza para ayudar a mantener proyectos cuando sus autores originales ya no pueden o no quieren hacerlo.
Lamentablemente, el nuevo propietario agregó una biblioteca maliciosa llamada flatmap-stream como dependencia del paquete event-stream, lo que provocó que todos los usuarios del paquete event-stream la descargaran y ejecutaran (al usar la versión maliciosa 3.3.6). La biblioteca maliciosa acumuló casi 8 millones de descargas hasta la fecha.
Como agregar bibliotecas es una práctica habitual, es fácil entender por qué no se revisó con suficiente atención la nueva biblioteca. Además, parece que cumplía con la funcionalidad prometida (procesar un stream de mapas planos). Por último, el código malicioso de la biblioteca estaba ofuscado para evadir la detección (más adelante se descodificó y se reveló el código malicioso).
La dependencia maliciosa pasó desapercibida durante 2.5 meses, hasta que un usuario, Ayrton Sparling, detectó y reportó una dependencia sospechosa el 20 de noviembre. Pronto se determinó que la dependencia —que contenía código ofuscado— era maliciosa. La noticia se difundió ampliamente el 26 de noviembre. Snyk agregó de inmediato la vulnerabilidad a nuestra base de datos y la reportó al grupo de trabajo de seguridad de Node Foundation, que la está revisando activamente. npm también respondió al incidente y retiró de publicación la biblioteca maliciosa flatmap-stream, al igual que la versión 3.3.6 de event-stream, que contenía el código malicioso.
En cuanto a las acciones maliciosas, parece que el código se enfocaba en robar bitcoins de la aplicación y redirigir cualquier bitcoin minado a la billetera del atacante, en lugar del destino previsto. Puedes leer más en la página de avisos de Snyk.
¿Qué debes hacer?
Tu prioridad inmediata debe ser comprobar si estás usando la biblioteca maliciosa en cuestión. Si es así, las próximas compilaciones de tu aplicación fallarán, pero es probable que las aplicaciones implementadas anteriormente contengan el código malicioso y posiblemente lo estén ejecutando.
Si Snyk monitorea tu proyecto y tu aplicación contiene este paquete malicioso, recibirás una notificación mediante las alertas habituales de Snyk.
Pero si todavía no monitoreas tus proyectos con Snyk, puedes hacer un análisis puntual: haz clic aquí para analizar tus repositorios o usa nuestra CLI para analizar tus proyectos localmente.
Me afectó. ¿Qué debo hacer ahora?
Primero debes eliminar el paquete malicioso de tu aplicación. Para hacerlo, vuelve a la versión 3.3.4 de event-stream.
Si tu aplicación usó la biblioteca maliciosa y trabaja con bitcoins, revisa su actividad de los últimos 3 meses para detectar si algún bitcoin minado o transferido no llegó a tu billetera.
Si tu aplicación no trabaja con bitcoins, pero es especialmente sensible, te recomendamos revisar su actividad de los últimos 3 meses para detectar cualquier actividad sospechosa, en particular, datos enviados por la red a destinos no previstos. Creemos que es poco probable que el código haga algo más que robar bitcoins, pero el análisis completo todavía está en curso.
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.



