Po prostu usuwając plik package-lock.json, a następnie instaluj npm działa dobrze.
Jitendra Pawar
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.
Usuń node_modulesfolder.
Usuń package-lock.jsonplik.
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.
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
Odpowiedzi:
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:
źródło
npm list event-stream
i zaktualizuj dowolne pakiety najwyższego poziomuWł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 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źródło
Postępuj zgodnie z poniższymi metodami:
Usuń pliki node_modules i package_lock.json
Uruchom strumień zdarzeń listy npm
źródło
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 | | `-- [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]
źródło
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.
źródło
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
(lubnpm install
), aby ponownie zainstalować zależnościźródło