Zidentyfikowano atak phishingowy skierowany na biblioteki JavaScript, w ramach którego w imieniu usługi NPM wysłano wiadomość informującą o konieczności potwierdzenia swojego adresu email. Przeprowadzony atak umożliwił cyberprzestępcom uzyskanie tokenów NPM jednego z większych projektów JavaScript i wypuszczenie aktualizacji z złośliwym kodem dla pięciu pakietów NPM, które w sumie miały około 100 milionów pobrań tygodniowo.
Wysłana wiadomość była stylizowana na typowe powiadomienia NPM, wysyłane z adresu „support@npmjs.org”, ale jako link do przejścia podano domenę „npnjs.com” zamiast „npmjs.com” (trzecia litera „n” zamiast „m”). Atakujący wykorzystali efekt psychologiczny, w którym mózg, przewidując oczekiwany wynik, nie zauważa drobnych zniekształceń, takich jak zamiana liter na podobne lub zmiana kolejności liter w słowie. Po kliknięciu w link otwierana była pełna kopia strony npmjs.com (prawdopodobnie skonfigurowano proxy przechwytujące token dostępu).

W trakcie ataku utworzono nowe wersje pakietów:
- eslint-config-prettier: 8.10.1, 9.1.1, 10.1.6, 10.1.7.
- eslint-plugin-prettier: 4.2.2, 4.2.3.
- synckit: 0.11.9.
- @pkgr/core: 0.2.8.
- napi-postinstall: 0.3.1.
Do utworzonych wydań dodano złośliwy kod atakujący użytkowników korzystających z platformy Windows. Wprowadzone zmiany pobierały bibliotekę node-gyp.dll, zawierającą funkcjonalność do zdalnego wykonywania komend w systemie.
Osoba odpowiedzialna za pakiety zauważyła, że stała się ofiarą phishingu mniej więcej godzinę po otrzymaniu pierwszej skargi na publikację podejrzanych wydań. Natychmiast odwołała token dostępu, zmieniła hasła, oznaczyła problematyczne wersje jako przestarzałe, aby zapobiec ich pobieraniu przez zautomatyzowane systemy budujące, i wysłała prośbę o usunięcie problematycznych wersji z repozytoriów do wsparcia NPM.
Nie podano, ile użytkowników zdążyło pobrać złośliwe wersje (na przykład złośliwa wersja pakietu eslint-plugin-prettier pozostawała w repozytorium przez około dwa dni). W ubiegłym tygodniu pakiet eslint-config-prettier miał 30 milionów pobrań i był używany jako zależność dla 11762 pakietów, pakiet eslint-plugin-prettier – 21 milionów pobrań (8468 zależnych pakietów), synckit – 18 milionów, @pkgr/core – 16 milionów i napi-postinstall – 10 milionów.
Źródło: opennet.ru
