npm ПОМИЛКА! 404 не знайдено: event-stream@3.3.6


85

Я намагаюся розгорнути свій проект, і раптом з'являється ця помилка.

npm ПОМИЛКА! 404 не знайдено: event-stream@3.3.6


1
npm застарів цей пакет. перевірити github.com/webpack/webpack-cli/issues/698
C. Patel

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

Просто видалення файлу package-lock.json, а потім установка npm працює нормально.
Jitendra Pawar

Відповіді:


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 з реєстру та взяла право власності на пакет потоку подій, щоб запобігти подальшим зловживанням.

Шкідливим пакетом була версія 0.1.1 flatmap-stream. Цей пакет був доданий як пряма залежність пакету потоку подій новим супровідником 9 вересня 2018 року у версії 3.3.6. Пакет потоків подій широко використовується, але зловмисний код націлений на розробників компанії, яка мала дуже конкретне налаштування середовища розробки: запуск корисного навантаження в будь-якому іншому середовищі не має ніякого ефекту. Це конкретне націлювання означає, що, зрештою, більшість розробників не постраждають, навіть якщо вони помилково встановили шкідливий модуль.

Введений код націлений на додаток 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. Якщо ви встановили відповідну версію цього потоку подій, радимо якнайшвидше оновити її до пізнішої версії.


7
Або просто зробіть npm list event-streamі оновіть будь-які пакунки верхнього рівня
Філ

4
Видалення блокування пакетів здається поганою ідеєю. Будь ласка, поділіться посиланням на допис у блозі NPM.
pronebird

Ого. Чи є посилання на цитовану вами статтю? EDIT - Знайшов: 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-список потоків подій

  3. Запустіть перевірку npm
  4. Запустіть перевірку кешу npm
  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(файл блокування) містив застарілий пакет. Видалення файлу блокування та повторна інсталяція залежностей вирішили проблему.

Найшвидший спосіб зробити це - це 2 кроки:

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