npm ERR! 404 Nie znaleziono: [email protected]

Odpowiedzi:

189

tldr;

Święta krowa! Okazuje się, że pakiet strumienia zdarzeń miał lukę, która pozwoliła hakerowi ukraść bitcoiny.

Aby to naprawić, musisz zaktualizować swój event-streampakiet.

  1. Usuń node_modulesfolder.
  2. Usuń package-lock.jsonplik.
  3. Biegnij npm install.

Powinno to zaktualizować twoje pakiety do bezpiecznej wersji i powinieneś być gotowy.

A oto oficjalna odpowiedź z bloga NPM:

Szczegóły zdarzenia związanego ze strumieniem zdarzeń Jest to analiza zdarzenia związanego ze strumieniem zdarzeń, o którym wielu z was dowiedziało się na początku tego tygodnia. npm działa natychmiast, aby rozwiązać problemy operacyjne i problemy, które mają wpływ na bezpieczeństwo naszej społeczności, ale zazwyczaj przeprowadzamy dokładniejszą analizę przed omówieniem incydentów - wiemy, że czekałeś.

Rankiem 26 listopada zespół bezpieczeństwa npm został powiadomiony o szkodliwym pakiecie, który przedostał się do strumienia zdarzeń, popularnego pakietu npm. Po wytypowaniu złośliwego oprogramowania npm Security odpowiedział, usuwając flatmap-stream i [email protected] z Rejestru oraz przejmując na własność pakiet zdarzeń, aby zapobiec dalszym nadużyciom.

Złośliwym pakietem była wersja 0.1.1 flatmap-stream. Ten pakiet został dodany jako bezpośrednia zależność pakietu strumienia zdarzeń przez nowego opiekuna 9 września 2018 r. W wersji 3.3.6. Pakiet strumienia zdarzeń jest szeroko stosowany, ale złośliwy kod był skierowany do programistów w firmie, która miała bardzo specyficzną konfigurację środowiska programistycznego: uruchomienie ładunku w jakimkolwiek innym środowisku nie przynosi żadnego efektu. To konkretne kierowanie oznacza, że ​​ostatecznie większość programistów nie ucierpi, nawet jeśli omyłkowo zainstalowali złośliwy moduł.

Wstrzyknięty kod jest przeznaczony dla aplikacji Copay. Kiedy programista w Copay uruchamia jeden ze swoich skryptów kompilacji wydania, wynikowy kod jest modyfikowany przed dołączeniem do aplikacji. Kod został zaprojektowany w celu zbierania szczegółów konta i kluczy prywatnych z kont o saldzie przekraczającym 100 Bitcoinów lub 1000 Bitcoin Cash.

Początkowa odpowiedź Copay była taka, że ​​żadne kompilacje zawierające ten złośliwy kod nie zostały upublicznione, ale teraz otrzymaliśmy potwierdzenie od Copay, że „złośliwy kod został wdrożony w wersjach od 5.0.2 do 5.1.0”.

Atak Ten atak rozpoczął się jako atak socjotechniczny. Atakujący, udając opiekuna, przejął opiekę nad modułem strumienia zdarzeń.

Szczegóły techniczne Oto kilka szczegółów technicznych, o których wiemy, dla tych z Państwa, którzy są tym zainteresowani.

Wstrzyknięty kod:

Wczytaj dane zaszyfrowane AES z pliku podszywającego się pod urządzenie testowe Pobrał opis pakietu npm modułu, który go zaimportował, używając automatycznie ustawionej zmiennej środowiskowej Wykorzystał opis pakietu jako klucz do odszyfrowania porcji danych pobranych z zamaskowanego pliku Odszyfrowane dane były częścią modułu, który następnie został skompilowany w pamięci i wykonany.

W tym module wykonano następujące czynności:

Odszyfrowano kolejny fragment danych z ukrytego pliku Połączono mały, opatrzony komentarzem przedrostek od pierwszego odszyfrowanego fragmentu do końca drugiego odszyfrowanego fragmentu Wykonano pomniejsze zadania dekodowania w celu przekształcenia połączonego bloku kodu z nieprawidłowego JS do prawidłowego JS (uważamy, że było to wykonano w celu uniknięcia wykrycia przez narzędzia do analizy dynamicznej) Zapisano ten przetworzony blok JS do pliku przechowywanego w zależności, która byłaby spakowana przez skrypty budujące: Fragment kodu, który został zapisany, był rzeczywistym złośliwym kodem, który miał zostać uruchomiony na urządzeniach będących własnością końcowych użytkowników Copay.

Ten kod wykonałby następujące czynności:

Wykryj obecne środowisko: Mobile / Cordova / Electron Sprawdź salda Bitcoin i Bitcoin Cash na koncie ofiary Jeśli aktualne saldo było większe niż 100 Bitcoinów lub 1000 Bitcoin Cash: Zbierz pełne dane konta ofiary Zbierz klucze prywatne ofiary Wyślij dane konta / klucze prywatne ofiary do usługi windykacyjnej działającej pod numerem 111.90.151.134. Bitpay zaleca użytkownikom aplikacji Copay: „Jeśli używasz dowolnej wersji od 5.0.2 do 5.1.0, nie powinieneś uruchamiać ani otwierać aplikacji Copay”.

W przypadku użytkowników npm możesz sprawdzić, czy projekt zawiera podatną na zagrożenia zależność, uruchamiając audyt npm. Jeśli masz zainstalowaną wersję tego strumienia zdarzeń, której dotyczy problem, zalecamy jak najszybsze zaktualizowanie do nowszej wersji.

Matt
źródło
7
Lub po prostu zrób npm list event-streami zaktualizuj dowolne pakiety najwyższego poziomu
Phil
4
Usunięcie blokady pakietów brzmi jak zły pomysł. Udostępnij link do wpisu na blogu NPM.
pronebird
Łał. Czy jest link do cytowanego artykułu? EDYCJA - Znaleziono: blog.npmjs.org/post/180565383195/ ...
friederbluemle
7

Właściwie nie musimy aktualizować wszystkich pakietów zależnych od [email protected].

Możesz otworzyć package-lock.json, usunąć wszystkie odwołania do strumienia zdarzeń i zadzwonić npm installponownie. Będzie szybciej.

Następnie npm shrinkwrap && mv npm-shrinwrap.json package-lock.jsonnależy zaktualizować tylko odwołania do strumienia zdarzeń, a nie cały plik

Matheus Teixeira
źródło
4

Postępuj zgodnie z poniższymi metodami:

  1. Usuń pliki node_modules i package_lock.json

  2. Uruchom strumień zdarzeń listy npm

  3. Uruchom audyt npm
  4. Uruchom weryfikację pamięci podręcznej npm
  5. Uruchom instalację npm
  6. Uruchom git add. (dodaj wymagane pliki)
  7. Uruchom git commit (zatwierdź swoje zmiany)
  8. Uruchom git push (przekaż swój kod)
Basavaraj Hadimani
źródło
3

Rozwiązuję ten problem następującymi krokami:

  1. otwórz najnowszy dziennik tego błędu w /node_cache/_logs/xxxx-xx-xxx-debug.log
  2. znajdź korzeń event-streamliścia, na przykład:


    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. w tym przypadku root jest nodemon, więc możesz naprawić przez: npm install [email protected]
  2. npm zainstaluj teraz pomyślnie
Susie Chang
źródło
2

Zaktualizowałem npm-run-all z 4.1.3 do 4.1.5 w package.json (usuń w strumieniu zdarzeń pliku blokady) Następnie npm install.

Evilripper
źródło
2

Jak wspomniano w komentarzach, podstawowym problemem był package-lock.json(plik blokujący) zawierający przestarzały pakiet. Usunięcie pliku blokującego i ponowne zainstalowanie zależności rozwiązało problem.

Najszybszym sposobem na to są 2 kroki:

  • usuń package-lock.jsonplik
  • wpisz npm i(lub npm install), aby ponownie zainstalować zależności
Huseyin
źródło