npm ERR! 404 не найдено: event-stream@3.3.6


85

Я пытаюсь развернуть свой проект и внезапно получаю эту ошибку.

npm ERR! 404 не найдено: event-stream@3.3.6


1
npm объявил устаревшим этот пакет. проверьте github.com/webpack/webpack-cli/issues/698
Prayag C. Patel

1
вопрос обсуждался на мета: meta.stackoverflow.com/questions/378071/…
Роман Покровский

Просто удалите файл package-lock.json, а затем установите npm.
Джитендра Павар

Ответы:


189

tldr;

Святая корова! Оказывается, в пакете потока событий была уязвимость, которая позволила хакеру украсть биткойны.

Чтобы исправить это, вам нужно обновить свой event-streamпакет.

  1. Удалите node_modulesпапку.
  2. Удалите package-lock.jsonфайл.
  3. Беги npm install.

Это должно обновить ваши пакеты до безопасной версии, и все будет в порядке.

А вот официальный ответ блога NPM:

Подробная информация об инциденте с потоком событий Это анализ инцидента с потоком событий, о котором многие из вас узнали ранее на этой неделе. npm действует незамедлительно, чтобы решить операционные проблемы и проблемы, которые влияют на безопасность нашего сообщества, но мы обычно проводим более тщательный анализ перед обсуждением инцидентов - мы знаем, что вы ждали.

Утром 26 ноября служба безопасности npm была уведомлена о вредоносном пакете, который проник в поток событий, популярный пакет npm. После сортировки вредоносного ПО служба npm Security отреагировала удалением flatmap-stream и event-stream@3.3.6 из реестра и взяла на себя ответственность за пакет потока событий, чтобы предотвратить дальнейшее злоупотребление.

Вредоносный пакет представлял собой flatmap-stream версии 0.1.1. Этот пакет был добавлен как прямая зависимость пакета потока событий новым сопровождающим 9 сентября 2018 г. в версии 3.3.6. Пакет event-stream широко используется, но вредоносный код нацелен на разработчиков в компании, у которой была очень специфическая среда разработки: запуск полезной нагрузки в любой другой среде не имеет никакого эффекта. Этот конкретный таргетинг означает, что в конечном итоге большинство разработчиков не пострадают, даже если они по ошибке установили вредоносный модуль.

Внедренный код предназначен для приложения Copay. Когда разработчик в Copay запускает один из своих сценариев сборки релиза, полученный код модифицируется перед включением в приложение. Код был разработан для сбора данных учетной записи и закрытых ключей от учетных записей с балансом более 100 биткойнов или 1000 биткойн наличными.

Первоначальный ответ Copay состоял в том, что сборки, содержащие этот вредоносный код, не были опубликованы, но теперь у нас есть подтверждение от Copay, что «вредоносный код был развернут в версиях с 5.0.2 по 5.1.0».

Атака Эта атака началась как атака социальной инженерии. Злоумышленник, выдавая себя за сопровождающего, взял на себя обслуживание модуля потока событий.

Технические детали Вот некоторые технические подробности, о которых мы знаем, для тех, кто в этом заинтересован.

Внедренный код:

Чтение зашифрованных данных AES из файла, замаскированного под тестовое приспособление. Получение описания пакета npm модуля, который его импортировал, с использованием автоматически установленной переменной среды. Использование описания пакета в качестве ключа для расшифровки фрагмента данных, полученного из замаскированного файла. Расшифрованные данные были частью модуля, который затем компилировался в памяти и выполнялся.

Этот модуль выполнял следующие действия:

Расшифровал еще один фрагмент данных из замаскированного файла. Объединение небольшого закомментированного префикса из первого расшифрованного фрагмента в конец второго расшифрованного фрагмента. Выполнены незначительные задачи декодирования для преобразования объединенного блока кода из недопустимого JS в допустимый JS (мы считаем, что это было сделано, чтобы избежать обнаружения инструментами динамического анализа) Записал этот обработанный блок JS в файл, хранящийся в зависимости, которая будет упакована сценариями сборки: записанный фрагмент кода был фактическим вредоносным кодом, предназначенным для запуска на устройствах, принадлежащих конечным пользователям Copay.

Этот код будет делать следующее:

Определите текущую среду: Mobile / Cordova / Electron.Проверьте остатки биткойнов и биткойн-наличных на счете доплаты жертвы.Если текущий баланс был больше 100 биткойнов или 1000 биткойн-наличных: соберите данные учетной записи жертвы полностью. Получите личные ключи доплаты жертвы. Отправьте данные учетной записи / закрытые ключи жертвы в службу сбора, работающую на 111.90.151.134. Для пользователей приложения Copay bitpay рекомендует: «Если вы используете любую версию от 5.0.2 до 5.1.0, вам не следует запускать или открывать приложение Copay».

Для пользователей npm вы можете проверить, содержит ли ваш проект уязвимую зависимость, запустив npm audit. Если вы установили затронутую версию этого потока событий, мы рекомендуем как можно скорее выполнить обновление до более поздней версии.


7
Или просто сделайте npm list event-streamи обновите любые пакеты верхнего уровня
Фил

4
Удаление блокировки пакета звучит как плохая идея. Поделитесь ссылкой на сообщение в блоге NPM.
pronebird 03

Вау. Есть ли ссылка на цитируемую вами статью? РЕДАКТИРОВАТЬ - Нашел: blog.npmjs.org/post/180565383195/…
Friederbluemle

7

На самом деле нам не нужно обновлять все пакеты, зависящие от event-stream@3.3.6.

Вы можете открыть package-lock.json, удалить все ссылки на поток событий и позвонить npm installснова. Так будет быстрее.

После этого npm shrinkwrap && mv npm-shrinwrap.json package-lock.jsonследует обновить только ссылки на поток событий, а не весь файл.


4

Следуйте нижеприведенным методам:

  1. Удалите файлы node_modules и package_lock.json

  2. Запустить поток событий npm list

  3. Запустить аудит npm
  4. Запустить npm cache verify
  5. Запустите npm install
  6. Запустите git add. (добавить необходимые файлы)
  7. Запустите git commit (зафиксируйте свои изменения)
  8. Запустите git push (нажмите свой код)

3

Я решаю эту проблему следующими шагами:

  1. откройте свой последний журнал для этой ошибки в /node_cache/_logs/xxxx-xx-xxx-debug.log
  2. узнать корень event-streamлиста, например:


    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 | | `-- ps-tree@1.2.0
    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 | |     `-- split@0.3.3

  1. в данном случае корнем является nodemon, поэтому вы можете исправить это: npm install nodemon@1.18.4
  2. npm установить успешно сейчас

2

Я обновил npm-run-all с 4.1.3 до 4.1.5 в package.json (удалить в потоке событий файла блокировки) Затем установить npm.


2

Как упоминалось в комментариях, основная проблема заключалась в том, что package-lock.json(файл блокировки) содержал устаревший пакет. Удаление файла блокировки и повторная установка зависимостей разрешили проблему.

Самый быстрый способ сделать это - это два шага:

  • удалить package-lock.jsonфайл
  • введите npm i(или npm install), чтобы переустановить зависимости
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.