npm ERR! 404 No encontrado: [email protected]

Respuestas:

189

tldr;

¡Santo cielo! Resulta que el paquete event-stream tenía una vulnerabilidad que permitía a un pirata informático robar bitcoins.

Para solucionarlo, debe actualizar su event-streampaquete.

  1. Elimina la node_modulescarpeta.
  2. Elimina el package-lock.jsonarchivo.
  3. Corre npm install.

Esto debería actualizar sus paquetes a una versión segura y debería estar listo.

Y aquí está la respuesta oficial del blog de NPM:

Detalles sobre el incidente del flujo de eventos Este es un análisis del incidente del flujo de eventos del que muchos de ustedes se dieron cuenta a principios de esta semana. npm actúa de inmediato para abordar las inquietudes operativas y los problemas que afectan la seguridad de nuestra comunidad, pero normalmente realizamos un análisis más exhaustivo antes de discutir los incidentes; sabemos que ha estado esperando.

En la mañana del 26 de noviembre, el equipo de seguridad de npm recibió una notificación de un paquete malicioso que se había introducido en event-stream, un paquete popular de npm. Después de clasificar el malware, npm Security respondió eliminando flatmap-stream y [email protected] del Registro y asumiendo la propiedad del paquete event-stream para evitar más abusos.

El paquete malicioso era la versión 0.1.1 de flatmap-stream. Este paquete fue agregado como una dependencia directa del paquete event-stream por un nuevo mantenedor el 9 de septiembre de 2018, en la versión 3.3.6. El paquete event-stream se usa ampliamente, pero el código malicioso apuntaba a los desarrolladores de una empresa que tenía una configuración de entorno de desarrollo muy específica: ejecutar la carga útil en cualquier otro entorno no tiene ningún efecto. Esta orientación específica significa que, en última instancia, la mayoría de los desarrolladores no se verían afectados incluso si hubieran instalado por error el módulo malicioso.

El código inyectado se dirige a la aplicación Copago. Cuando un desarrollador de Copay ejecuta uno de sus scripts de compilación de versiones, el código resultante se modifica antes de incluirse en la aplicación. El código fue diseñado para recolectar detalles de cuentas y claves privadas de cuentas que tienen un saldo de más de 100 Bitcoin o 1000 Bitcoin Cash.

La respuesta inicial de Copay fue que no se lanzó al público ninguna compilación que contenga este código malicioso, pero ahora tenemos la confirmación de Copay de que "el código malicioso se implementó en las versiones 5.0.2 a 5.1.0".

El ataque Este ataque comenzó como un ataque de ingeniería social. El atacante, haciéndose pasar por mantenedor, se hizo cargo del mantenimiento del módulo de flujo de eventos.

Los detalles técnicos Aquí hay algunos detalles técnicos que conocemos, para aquellos de ustedes interesados ​​en esto.

El código inyectado:

Leer en AES datos encriptados de un archivo disfrazado como un dispositivo de prueba Tomó la descripción del paquete npm del módulo que lo importó, usando una variable de entorno configurada automáticamente Usó la descripción del paquete como clave para descifrar una parte de los datos extraídos del archivo disfrazado Los datos descifrados formaban parte de un módulo, que luego se compilaba en la memoria y se ejecutaba.

Este módulo realizó las siguientes acciones:

Descifrado otro fragmento de datos del archivo disfrazado Concatenó un pequeño prefijo comentado desde el primer fragmento descifrado hasta el final del segundo fragmento descifrado Realizó tareas de decodificación menores para transformar el bloque de código concatenado de JS no válido a JS válido (creemos que esto fue hecho para evadir la detección mediante herramientas de análisis dinámico) Escribió este bloque procesado de JS en un archivo almacenado en una dependencia que sería empaquetado por los scripts de compilación: El fragmento de código que se escribió era el código malicioso real, destinado a ser ejecutado en dispositivos propiedad de los usuarios finales de Copay.

Este código haría lo siguiente:

Detectar el entorno actual: Móvil / Cordova / Electron Verificar los saldos de Bitcoin y Bitcoin Cash en la cuenta de copago de la víctima Si el saldo actual era superior a 100 Bitcoin o 1000 Bitcoin Cash: Recolectar los datos de la cuenta de la víctima en su totalidad Recolectar las claves privadas de copago de la víctima Envíe los datos de la cuenta de la víctima / claves privadas a un servicio de recolección que se ejecuta en 111.90.151.134. Para los usuarios de la aplicación Copay, bitpay recomienda, "Si está utilizando cualquier versión de 5.0.2 a 5.1.0, no debe ejecutar ni abrir la aplicación Copay".

Para los usuarios de npm, puede verificar si su proyecto contiene la dependencia vulnerable ejecutando npm audit. Si ha instalado la versión afectada de este flujo de eventos, le recomendamos que actualice a una versión posterior lo antes posible.

Mate
fuente
7
O simplemente haga npm list event-streamy actualice cualquier paquete de nivel superior
Phil
4
Eliminar el bloqueo de paquetes parece una mala idea. Comparta el enlace a la publicación del blog de NPM.
pronebird
Guau. ¿Hay un enlace al artículo que citó? EDITAR - Lo encontré: blog.npmjs.org/post/180565383195/…
friederbluemle
7

En realidad, no necesitamos actualizar todos los paquetes que dependen de [email protected].

Puede abrir package-lock.json, eliminar todas las referencias de flujo de eventos y npm installvolver a llamar . Será más rápido.

Después de eso, npm shrinkwrap && mv npm-shrinwrap.json package-lock.jsondebería actualizar solo las referencias del flujo de eventos y no todo el archivo

Matheus Teixeira
fuente
4

Siga los siguientes métodos:

  1. Eliminar los archivos node_modules y package_lock.json

  2. Ejecute npm list event-stream

  3. Ejecutar auditoría npm
  4. Ejecutar npm cache verify
  5. Ejecute npm install
  6. Ejecute git add. (agregue los archivos requeridos)
  7. Ejecute git commit (confirme sus cambios)
  8. Ejecute git push (presione su código)
Basavaraj Hadimani
fuente
3

Resuelvo este problema con los siguientes pasos:

  1. abra su último registro para este error en /node_cache/_logs/xxxx-xx-xxx-debug.log
  2. averiguar la raíz de la event-streamhoja, por ejemplo:


    45 silly saveTree +-- nodemon@1.18.4
    45 silly saveTree | +-- chokidar@2.0.4
    45 silly saveTree | +-- pstree.remy@1.1.0
    45 silly saveTree | | `-- [email protected]
    45 silly saveTree | |   `-- event-stream@3.3.6
    45 silly saveTree | |     +-- duplexer@0.1.1
    45 silly saveTree | |     +-- from@0.1.7
    45 silly saveTree | |     +-- pause-stream@0.0.11
    45 silly saveTree | |     `-- [email protected]

  1. en este caso, la raíz es nodemon, por lo que puede solucionarlo: npm install [email protected]
  2. npm instalar correctamente ahora
Susie Chang
fuente
2

He actualizado npm-run-all de 4.1.3 a 4.1.5 en package.json (eliminar en el flujo de eventos del archivo de bloqueo) Luego, npm install.

Destripador
fuente
2

Como se mencionó en los comentarios, el problema subyacente fue que package-lock.json(el archivo de bloqueo) contenía un paquete en desuso. Eliminar el archivo de bloqueo y reinstalar las dependencias resolvió el problema.

La forma más rápida de hacerlo son estos 2 pasos:

  • eliminar el package-lock.jsonarchivo
  • escriba npm i(o npm install) para reinstalar las dependencias
Huseyin
fuente