Я намагаюся розгорнути свій проект, і раптом з'являється ця помилка.
npm ПОМИЛКА! 404 не знайдено: event-stream@3.3.6
Я намагаюся розгорнути свій проект, і раптом з'являється ця помилка.
npm ПОМИЛКА! 404 не знайдено: event-stream@3.3.6
Відповіді:
tldr;
Свята корова! Виявляється, пакет подій-потоку мав уразливість, яка дозволяла хакеру красти біткойни.
Щоб виправити це, потрібно оновити свій event-streamпакет.
node_modulesпапку.package-lock.jsonфайл.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. Якщо ви встановили відповідну версію цього потоку подій, радимо якнайшвидше оновити її до пізнішої версії.
npm list event-streamі оновіть будь-які пакунки верхнього рівня
Насправді нам не потрібно оновлювати всі пакети, що залежить від event-stream@3.3.6.
Ви можете відкрити package-lock.json, видалити всі посилання на потоки подій і зателефонувати npm installзнову. Це буде швидше.
Після цього npm shrinkwrap && mv npm-shrinwrap.json package-lock.jsonслід оновити лише посилання на потік подій, а не весь файл
Дотримуйтесь наведених нижче методів:
Видаліть файли node_modules та package_lock.json
Запустіть npm-список потоків подій
Я вирішую цю проблему наступними кроками:
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
Я оновив npm-run-all з 4.1.3 до 4.1.5 в package.json (видалити в потоці подій файлу блокування) Потім встановити npm.
Як зазначалося в коментарях, основною проблемою було те, що package-lock.json(файл блокування) містив застарілий пакет. Видалення файлу блокування та повторна інсталяція залежностей вирішили проблему.
Найшвидший спосіб зробити це - це 2 кроки:
package-lock.jsonфайлnpm i(або npm install), щоб перевстановити залежності