GlassWorm kompromituje ponad 400 komponentów open source i uderza w łańcuch dostaw oprogramowania

securitybeztabu.pl 4 godzin temu

Wprowadzenie do problemu / definicja

GlassWorm to zaawansowana kampania malware wymierzona w łańcuch dostaw systemu open source. Zamiast atakować ofiary końcowe bezpośrednio, operatorzy przejmują zaufane kanały dystrybucji kodu, modyfikują repozytoria, publikują złośliwe pakiety i rozszerzenia oraz wykorzystują techniki utrudniające wykrycie. Taki model działania jest szczególnie groźny dla środowisk deweloperskich, ponieważ infekcja może zostać dostarczona pod pozorem legalnej aktualizacji lub wiarygodnego projektu.

Najnowsza odsłona kampanii pokazuje, iż zagrożenia supply chain stają się coraz bardziej złożone, wieloplatformowe i trudniejsze do zablokowania tradycyjnymi metodami ochrony. GlassWorm nie ogranicza się do jednego języka programowania ani jednego kanału dystrybucji, ale uderza równolegle w repozytoria kodu, pakiety i rozszerzenia używane przez programistów.

W skrócie

Według opublikowanych ustaleń kampania GlassWorm objęła ponad 400 komponentów w różnych ekosystemach. Atakujący mieli wykorzystywać przejęte konta GitHub do publikowania złośliwych commitów, a następnie rozprzestrzeniać zainfekowane elementy przez npm oraz rozszerzenia dla VS Code i OpenVSX.

  • zaatakowano około 200 repozytoriów Python na GitHub,
  • skompromitowano 151 repozytoriów JavaScript i TypeScript,
  • dotkniętych zostało 72 rozszerzeń VS Code i OpenVSX,
  • zidentyfikowano także 10 złośliwych pakietów npm,
  • kampania wykorzystywała wspólną infrastrukturę oraz podobne ładunki malware.

Głównym celem operacji było wykradanie danych deweloperskich, poświadczeń, tokenów dostępowych, kluczy SSH oraz informacji powiązanych z portfelami kryptowalutowymi.

Kontekst / historia

GlassWorm nie jest nowym zjawiskiem. Wcześniejsze warianty tej kampanii zwracały uwagę wykorzystaniem niewidzialnych znaków Unicode do ukrywania złośliwego kodu w plikach źródłowych. Taka technika pozwala utrudnić analizę zmian i zwiększa prawdopodobieństwo, iż niebezpieczny fragment przejdzie przez code review niezauważony.

Obecna fala ataków wskazuje jednak na wyraźną eskalację zarówno pod względem skali, jak i dojrzałości operacyjnej. Atakujący nie koncentrują się już wyłącznie na klasycznych repozytoriach kodu, ale rozszerzają działania na kolejne elementy ekosystemu tworzenia oprogramowania, w tym marketplace’y rozszerzeń i publiczne rejestry pakietów. To oznacza, iż każda organizacja korzystająca z zewnętrznych zależności może stać się pośrednią ofiarą kompromitacji.

Analiza techniczna

Łańcuch ataku rozpoczyna się od kompromitacji kont GitHub lub nadużycia uprawnień pozwalających na wprowadzenie złośliwych commitów do zaufanych projektów. Ponieważ zmiany pochodzą pozornie od legalnych autorów lub repozytoriów, ich wykrycie jest znacznie trudniejsze niż w przypadku klasycznych kampanii phishingowych czy malware dostarczanego przez podejrzane pliki.

Jednym z najbardziej charakterystycznych elementów GlassWorm pozostaje ukrywanie fragmentów kodu przy pomocy niewidzialnych znaków Unicode. To metoda zaciemniania, która może utrudniać przegląd różnic w kodzie, osłabiać skuteczność prostych reguł detekcyjnych i zwiększać ryzyko przeoczenia złośliwych instrukcji podczas rutynowej analizy.

W opisywanej kampanii mechanizm sterowania i aktualizacji ładunku opierał się na odczytywaniu instrukcji zapisanych w transakcjach blockchain Solana. Taki model tworzy zdecentralizowany kanał C2, który jest trudniejszy do zablokowania niż tradycyjna infrastruktura bazująca na pojedynczych domenach, serwerach lub adresach IP.

Po pobraniu instrukcji malware instalował środowisko Node.js i uruchamiał moduł information stealera napisany w JavaScript. To rozwiązanie zapewnia operatorom elastyczność i ułatwia użycie tego samego modelu ładunku w różnych środowiskach, niezależnie od tego, czy punkt wejścia stanowi repozytorium Python, projekt JS/TS czy rozszerzenie do edytora.

Analiza próbek wskazuje, iż malware był nastawiony przede wszystkim na kradzież informacji o wysokiej wartości operacyjnej.

  • dane z portfeli kryptowalutowych,
  • poświadczenia i tokeny dostępowe,
  • klucze SSH,
  • informacje o środowisku deweloperskim,
  • artefakty umożliwiające dalszy ruch boczny i kolejne kompromitacje.

Badacze wskazali również konkretne wskaźniki kompromitacji. Wśród nich pojawiła się zmienna lzcdrtfxyqiplpd, obecność pliku ~/init.json wykorzystywanego do persistence, nietypowe instalacje Node.js w katalogu domowym użytkownika oraz podejrzane pliki i.js w świeżo sklonowanych projektach. Zwrócono także uwagę na anomalie w historii commitów, zwłaszcza sytuacje, w których data committera była wyraźnie nowsza niż data pierwotnego autora.

Konsekwencje / ryzyko

GlassWorm stwarza poważne ryzyko dla organizacji, które opierają proces tworzenia systemu na komponentach open source, zewnętrznych repozytoriach i automatycznym pobieraniu zależności. Problem nie sprowadza się wyłącznie do infekcji pojedynczej stacji roboczej. Znacznie groźniejsze jest przejęcie elementów całego łańcucha zaufania.

Uruchomienie zainfekowanego pakietu lub rozszerzenia w środowisku deweloperskim może prowadzić do ujawnienia tokenów do systemów CI/CD, kluczy SSH do repozytoriów prywatnych, sekretów chmurowych czy danych pozwalających podpisywać artefakty. W praktyce otwiera to drogę do dalszych etapów ataku, takich jak podmiana kodu źródłowego, kompromitacja pipeline’ów build i deploy, publikacja złośliwych wersji aplikacji oraz naruszenia po stronie klientów końcowych.

Dodatkowym wyzwaniem pozostaje wykrywanie. Połączenie technik zaciemniania z wielokanałową dystrybucją sprawia, iż kampania może funkcjonować przez dłuższy czas bez wzbudzania podejrzeń, szczególnie w organizacjach o wysokim poziomie automatyzacji i rozbudowanej liczbie zależności.

Rekomendacje

Incydent związany z GlassWorm powinien skłonić organizacje do przeglądu procedur bezpieczeństwa w obszarze software supply chain. W praktyce konieczne jest połączenie działań reaktywnych z długofalowym wzmocnieniem kontroli nad zależnościami, tożsamością deweloperów i integralnością procesu budowania oprogramowania.

  • przeprowadzić przegląd ostatnio klonowanych repozytoriów, aktualizowanych pakietów i instalowanych rozszerzeń developerskich,
  • sprawdzić historię commitów pod kątem wymuszonych pushy, anomalii autora i nieprawidłowości czasowych,
  • skanować kod źródłowy pod kątem niewidzialnych znaków Unicode oraz znanych markerów kampanii,
  • zweryfikować obecność plików persistence, takich jak ~/init.json, oraz nieoczekiwanych instalacji Node.js w katalogach użytkowników,
  • odwołać i odnowić tokeny dostępu, klucze SSH oraz sekrety na stacjach roboczych, które mogły mieć kontakt z podejrzanymi komponentami,
  • monitorować środowiska deweloperskie pod kątem nietypowych połączeń sieciowych, uruchomień skryptów JavaScript i pobierania dodatkowych runtime’ów,
  • ograniczyć instalację rozszerzeń IDE do zatwierdzonych źródeł i wdrożyć politykę allowlist,
  • stosować kontrolę integralności zależności, skanowanie pakietów przed użyciem oraz reguły bezpieczeństwa dla pipeline’ów CI/CD,
  • egzekwować silne uwierzytelnianie kont deweloperskich, w tym MFA i ochronę przed przejęciem sesji,
  • rozszerzyć secure code review o wykrywanie technik zaciemniania niewidocznych w standardowym przeglądzie zmian.

Z perspektywy operacyjnej szczególnie ważne jest ograniczenie zaufania do kodu pobieranego bezpośrednio z publicznych repozytoriów i uruchamianego lokalnie bez wcześniejszej analizy. Nowoczesne kampanie supply chain pokazują, iż choćby wiarygodnie wyglądające projekty mogą zostać przejęte i wykorzystane jako wektor pierwszego dostępu.

Podsumowanie

GlassWorm jest przykładem nowoczesnego ataku na łańcuch dostaw oprogramowania, w którym połączono kompromitację kont deweloperskich, dystrybucję złośliwych komponentów w wielu ekosystemach oraz nietypowy kanał C2 oparty na blockchainie. Skala operacji pokazuje, iż atakujący coraz lepiej rozumieją realia pracy zespołów programistycznych i celują tam, gdzie poziom zaufania jest najwyższy.

Dla zespołów bezpieczeństwa najważniejszy wniosek jest jednoznaczny: ochrona endpointów nie wystarczy, jeżeli nie zabezpieczono źródeł kodu, zależności, rozszerzeń IDE i całego procesu SDLC. Skuteczna obrona przed podobnymi kampaniami wymaga połączenia monitoringu, higieny tożsamości, kontroli integralności oraz rygorystycznych procedur bezpieczeństwa dla całego cyklu życia oprogramowania.

Źródła

  1. BleepingComputer — https://www.bleepingcomputer.com/news/security/glassworm-malware-hits-400-plus-code-repos-on-github-npm-vscode-openvsx/
  2. Aikido Security — https://www.aikido.dev/
  3. Socket — https://socket.dev/
  4. Step Security — https://www.stepsecurity.io/
  5. OpenSourceMalware — https://opensourcemalware.com/
Idź do oryginalnego materiału