Deweloperzy Rspack ogłosili niedawno, że dwie z ich paczek npm, blank”>@rspack/core i blank”>@rspack/cli, padły ofiarą ataku w łańcuchu dostaw oprogramowania. W ramach tego incydentu, złośliwi aktorzy opublikowali na oficjalnym rejestrze zainfekowane wersje zawierające złośliwe oprogramowanie umożliwiające wydobywanie kryptowalut.
Po odkryciu problemu, wersje 1.1.7 obu bibliotek zostały usunięte z rejestru npm. Obecnie najnowsza wersja wolna od złośliwego kodu to 1.1.8. Jak wynika z analizy przeprowadzonej przez ekspertów ds. bezpieczeństwa z firmy Socket, „wersje te zostały opublikowane przez atakującego, który uzyskał nieautoryzowany dostęp do mechanizmu wydawania paczek npm, i zawierają złośliwe skrypty”.
blank”>Rspack jest uważany za alternatywę dla popularnego blank”>webpacka. Jest to zaawansowany bundler JavaScript stworzony w języku Rust, początkowo opracowany przez ByteDance. Projekt zyskał jednak na popularności i jest dziś wykorzystywany przez takie firmy jak Alibaba, Amazon, Discord, czy Microsoft. Dwie wspomniane paczki npm cieszą się dużym zainteresowaniem – @rspack/core notuje ponad 300 tysięcy pobrań tygodniowo, a @rspack/cli ponad 145 tysięcy.
Analiza zainfekowanych wersji wykazała, że zawierają one kod umożliwiający oddalone wywołania do zdalnego serwera („80.78.28[.]72”). Kod ten pozwala na przesyłanie poufnych informacji o konfiguracji, takich jak dane uwierzytelniające do usług w chmurze. Co więcej, biblioteki zbierały również dane o adresie IP oraz lokalizacji poprzez żądania HTTP do „ipinfo[.]io/json”.
Co interesujące, atak ten był ograniczony do urządzeń znajdujących się w określonych krajach, takich jak Chiny, Rosja, Hongkong, Białoruś czy Iran. Finalnym celem atakujących było uruchomienie kryptomineru XMRig na zaatakowanych systemach Linux w trakcie instalacji paczek. Wdrożenie to realizowano za pomocą skryptu „postinstall” w pliku „package.json”, który uruchamiał złośliwe oprogramowanie natychmiast po zainstalowaniu paczki.
„Złośliwe oprogramowanie jest wykonywane automatycznie dzięki mechanizmowi postinstall, co oznacza, że użytkownik nie musi podejmować żadnych działań – kod zostaje osadzony w docelowym środowisku”, wyjaśnia Socket.
Aby przeciwdziałać skutkom ataku, zespół odpowiedzialny za Rspack szybko wydał nowe wersje paczek, w których usunięto złośliwy kod. Dodatkowo unieważniono wszystkie istniejące tokeny npm i GitHub oraz dokładnie sprawdzono uprawnienia do repozytoriów i sam kod źródłowy w poszukiwaniu dalszych luk w zabezpieczeniach. Trwa również dochodzenie mające na celu ustalenie, jak doszło do kradzieży tokenów.
Incydent ten podkreśla konieczność wprowadzenia bardziej rygorystycznych mechanizmów ochrony przez menedżery paczek. Eksperci z firmy Socket sugerują, że warto rozważyć implementację weryfikacji uwierzytelniania podczas aktualizacji pakietów, co mogłoby utrudnić atakującym wprowadzanie nieautoryzowanych wersji. Jednocześnie zauważają, że takie zabezpieczenia nie są doskonałe. „Jak pokazały ostatnie ataki na łańcuch dostaw w ekosystemie Pythona, na przykład kompromitacja paczek Ultralytics, atakujący wciąż mogą manipulować mechanizmami weryfikacji, wykorzystując luki w działaniach takich jak cache poisoning w GitHub Actions.”