Próbuję wdrożyć projekt i nagle pojawia się ten błąd.
npm ERR! 404 Nie znaleziono: event-stream@3.3.6
Próbuję wdrożyć projekt i nagle pojawia się ten błąd.
npm ERR! 404 Nie znaleziono: event-stream@3.3.6
Odpowiedzi:
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-stream
pakiet.
node_modules
folder.package-lock.json
plik.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 event-stream@3.3.6 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.
npm list event-stream
i zaktualizuj dowolne pakiety najwyższego poziomu
Właściwie nie musimy aktualizować wszystkich pakietów zależnych od event-stream@3.3.6.
Możesz otworzyć package-lock.json
, usunąć wszystkie odwołania do strumienia zdarzeń i zadzwonić npm install
ponownie. Będzie szybciej.
Następnie npm shrinkwrap && mv npm-shrinwrap.json package-lock.json
należy zaktualizować tylko odwołania do strumienia zdarzeń, a nie cały plik
Postępuj zgodnie z poniższymi metodami:
Usuń pliki node_modules i package_lock.json
Uruchom strumień zdarzeń listy npm
Rozwiązuję ten problem następującymi krokami:
event-stream
liś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 | | `-- 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
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.
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:
package-lock.json
pliknpm i
(lub npm install
), aby ponownie zainstalować zależności