Mega Sekurak Hacking Party w Krakowie! 20.10.2025 r. Bilety -30%
Atak na łańcuch dostaw w npm – malware ukryty w kodach QR
Środowisko NPM po raz kolejny stało się miejscem propagacji malware. Jeszcze nie milkną echa o ostatniej szeroko zakrojonej kampanii, która na szczęście nie odniosła oczekiwanych efektów, a już pojawiło się nowe zagrożenie. Malware ukryty w kodzie QR, umieszczony w pakiecie fezbox.
TLDR:
- Badacze bezpieczeństwa informują o kolejnym ataku na łańcuch dostaw w npm.
- Malware został umieszczony w pakiecie fezbox, który oferował zestaw narzędzi JavaScript/TypeScript wspierających deweloperów.
- Głównym celem ataku było przejęcie danych uwierzytelniających użytkowników, przechowywanych w ciasteczkach (login i hasło).
- Aby utrudnić wykrycie złośliwej aktywności, malware stosował szereg technik ukrywania takich jak: obfuskacja, odwracanie łańcuchów znaków, steganografia w kodach QR.
- NIewielka liczba pobrań pakietu oraz konstrukcja ciasteczek we współczesnych aplikacjach webowych znacząco zredukowały skuteczność ataku.
Podejrzana biblioteka została wykryta przez badaczy z zespołu Socket Threat Research na portalu npm. Pakiet o nazwie fezbox, zgodnie z przeznaczeniem miał zawierać zestaw narzędzi JavaScript/TypeScript ułatwiających pracę deweloperom. Posiadał szereg funkcji pomocniczych, dedykowanych do obsługi różnych modułów, pozwalających m.in. na import tylko tych elementów, które są aktualnie potrzebne w projekcie. Ponadto, oferował moduł obsługujący kody QR (generowanie, parsowanie, odczytywanie).
W rzeczywistości okazało się, że wewnątrz pakietu ukryta została dodatkowa funkcjonalność, przechwytywanie haseł i loginów użytkownika z ciasteczek przeglądarki.
Analiza pakietu fezbox
Biblioteka fezbox została opublikowana na portalu socket.dev. Kod źródłowy nie zostały publicznie udostępniony. Pakiet zawierał jedynie skompilowaną wersję – fezbox.cjs, co utrudniało analizę i wykrycie złośliwego oprogramowania. Ponadto, zawierał szereg technik obfuskacyjnych, takich jak: odwracanie łańcuchów znaków, ukrywanie payloadu w kodach QR, stosowanie steganografii do zabezpieczenia payloadu, dynamiczne pobieranie kodu z zewnętrznych serwisów. Wszystkie te mechanizmy skutecznie utrudniały wykrycie przez automatyczne skanery. Na poniższym rysunku przedstawiono zawartość pliku fezbox.cjs.

Na szczególną uwagę zasługuje poniższy fragment kodu:

Zgodnie z listingiem kodu przedstawionego na Rys. 2, w pierwszym etapie następuje sprawdzenie, czy kod został uruchomiony w środowisku deweloperskim oraz losowo (w 2 na 3 przypadków) nie wykonuje żadnej akcji. Następnie, przed realizacją głównej funkcji zaimplementowano 120 sekundowy timeout. W ten sposób atakujący starają się ukryć przed automatycznymi skanerami.
Po odwróceniu ciągu znaków i przejściu na otrzymany adres strony wyświetlał się złośliwy kod QR. Podczas analizy kod QR pozostawał nadal aktywny i możliwy do odczytania. Co ciekawe, skanery kodów QR nie potrafiły go rozpoznać, głównie z powodu zastosowania mechanizmów obfuskacji. Kod był możliwy do odczytania, jedynie z poziomu pakietu fezbox.
Należy podkreślić, że kod QR był niewidoczny dla użytkownika i korzystał z niego jedynie malware. Link prowadzący do kodu został na stałe zahardkodowany w pakiecie. Jego zastosowanie miało na celu utrudnienie wykrycia złośliwego kodu przez automatyczne skanery bezpieczeństwa.



Jak widać na Rys. 5, malware odczytuje ciasteczko z przeglądarki, próbuje pobrać nazwę użytkownika oraz hasło, a następnie wysyła odczytane dane na adres https://my-nest-app-production[.]up[.]railway[.]app/users. W przypadku, kiedy dane te nie zostaną odnalezione, kończy działanie.
Malware wykryty, co dalej?
Zarówno badacze z Socket Threat Research jak i automatyczny skaner malware – Socket AI Scanner wykryli złośliwy kod. W konsekwencji pakiet został zablokowany i usunięty z serwisu.

Liczba pobrań pakietu (mniej niż 100) sugeruje, że nie był on zbyt popularny wśród deweloperów. Biorąc pod uwagę fakt, że współczesne aplikacje nie przechowują danych uwierzytelniających użytkownika (login i hasło) w postaci jawnej w ciasteczkach można ocenić, że jego skuteczność była ograniczona.
Nie mniej jednak sam sposób przeprowadzenia ataku, a w szczególności zastosowane mechanizmy obfuskacyjne (odwracanie łańcuchów znaków, ukrywanie payloadu w kodzie QR, obfuskacja kodu, dynamiczne pobieranie malware z zewnętrznych serwisów) są godne uwagi i pokazują kreatywność atakujących.
Zaprezentowany wektor ataku oraz zastosowane techniki ukrywania złośliwej aktywności wyraźnie pokazują, że cyberprzestępcy doskonalą swoje umiejętności programistyczne, a w niedalekiej przyszłości można spodziewać się coraz to bardziej wyrafinowanych sposobów ataku.
Źródło: socket.dev/blog
~_secmike