Konferencja Mega Sekurak Hacking Party w Krakowie – 26-27 października!
Kolejna odsłona kampanii złośliwych paczek npm – tym razem dostarczanych w projektach rekrutacyjnych
Badacze z Socket analizują kampanię złośliwych pakietów w npm. Od października opublikowano co najmniej 197 złośliwych paczek, a całość zebrała łącznie ponad 31 tys. pobrań. Celem są programiści blockchain i Web3 uruchamiający projekty-zadania podczas fałszywych rozmowów kwalifikacyjnych. Kampania jest przypisywana atakującym z Korei Północnej.
TLDR:
- Od października badacze z Socket zidentyfikowali w npm 197 złośliwych paczek, pobranych ponad 31 tys. razy. Niektóre wciąż są dostępne.
- Celem ataków są programiści blockchain i Web3 biorący udział w fałszywych procesach rekrutacyjnych.
- Złośliwe paczki pobierają payload hostowany na Vercel i wykonują go przez eval(), umożliwiając zestawienie reverse shella, keylogging, kradzież schowka, danych portfeli, przeglądarek i plików.
- Wszelki cudzy kod/projekty rekrutacyjne należy uruchamiać w kontenerach lub VM, aby zależności nie były instalowane i nie wykonywały skryptów bezpośrednio na urządzeniu.
Badając złośliwy pakiet npm tailwind-magic badacze odkryli hostowaną na Vercel stronę tetrismic[.]vercel[.]app, a stamtąd dotarli do konta GitHub kontrolowanego przez atakującego – stardev0914, które posiadało 18 repozytoriów. Powiązanie udało się znaleźć i potwierdzić przy współpracy z DPRK Research.
Skaner Socket wykrył w pakiecie tailwind-magic niespójne metadane oraz zapisany na sztywno w kodzie link do repozytorium GitHub: https://github[.]com/stardev0914/tailwind-magic.git.

Na GitHub przechowywano kod serwera dostarczającego malware (github[.]com/stardev0914/tetrismic) – najnowszy payload był pobierany z Vercel (tetrismic[.]vercel[.]app), a osobny serwer zbierał pozyskane dane. Co najmniej 5 złośliwych pakietów, w tym tailwind-magic, tailwind-node, node-tailwind, node-tailwind-magic i react-modal-select wykorzystywało tę infrastrukturę, aby dostarczyć payload dla drugiego etapu.
Przy każdym żądaniu serwer zwracał payload main.js w odpowiedzi JSON. Złośliwy pakiet npm wykonywał otrzymany kod za pomocą funkcji eval() na urządzeniu ofiary.

Sam payload to najnowszy wariant malware OtterCookie, który po uruchomieniu sprawdza urządzenie pod kątem maszyn wirtualnych i sandboxów, identyfikuje hosta, a następnie ustanawia połączenie z serwerem C2. Umożliwiało to atakującym dostęp (reverse shell) do urządzenia, wykradanie zawartości schowka, keylogging i skanowanie systemu plików w celu zbierania poświadczeń oraz danych portfeli kryptowalutowych.

Wykradane były również dane przeglądarek – Chrome i Brave:

Oraz wspomniane portfele kryptowalutowe:

Oprócz tego malware szukało konkretnych ścieżek w systemie plików:

Przechwytywane były także zrzuty ekranu:

Jeden ze zidentyfikowanych pakietów – node-tailwind – w chwili pisania artykułu wciąż jest dostępny w npm, ale został już zgłoszony do zespołu bezpieczeństwa. Skaner Socket wykrył w nim malware i nowe konto, które zaczęło wydawać kolejne wersje paczki. Badacze znaleźli łącznie 15 paczek, które w chwili ich publikacji były wciąż dostępne.

Główny moduł pakietu (index.js) zawiera loader, który łączy się z tetrismic[.]vercel[.]app, a następnie wykonuje (eval) kod zwrócony przez serwer:

Badacze przeanalizowali repozytoria na koncie użytkownika stardev0914 – wiele z nich było po prostu szablonami i stronami demo, które udawały “zadania rekrutacyjne”. Atakujący podszywając się pod rekrutera mógł kierować ofiary do tych repozytoriów prosząc – w ramach zadania rekrutacyjnego – o wprowadzenie w nich zmian. Uruchomienie projektu na komputerze użytkownika skutkowało instalacją złośliwej paczki, a ta uruchamiała malware.
Mimo że konto stardev0914 zostało usunięte, omawiane techniki z pewnością będą jeszcze wykorzystywane. Nie jest to też pierwsza tego typu kampania, bo o bardzo podobnym malware pisaliśmy już w czerwcu, a także pod koniec 2024 r. – złośliwy kod był dostarczany jako projekt programistyczny na potrzeby rekrutacji/zlecenia.
Każde wykonanie komendy npm install w zaimportowanym projekcie powoduje – zależnie od konfiguracji projektu – pobranie dodatkowych (w tym potencjalnie złośliwych) paczek zdefiniowanych przez autora lub niejawne wykonanie dodatkowych skryptów. Omawiana kampania jest kolejnym przykładem na to, jak bardzo może być to niebezpieczne – nawet w ramach pozornie wiarygodnego zadania rekrutacyjnego.
Najważniejszą ochroną jest odizolowanie tego typu projektów – np. za pomocą wirtualnej maszyny lub dedykowanych osobnych środowisk. O ile w tym przypadku szybkie przejrzenie kodu paczki pozwoliłoby zidentyfikować złośliwy skrypt, o tyle taki kod może być sprytnie ukryty. Najlepszą strategią pozostaje więc izolacja, a weryfikowanie instalowanych zależności stanowi dobre uzupełnienie.
Źródło: socket.dev
~Tymoteusz Jóźwiak

Trochę inne, ale dodatkowe źródło: https://blog.daviddodda.com/how-i-almost-got-hacked-by-a-job-interview