Mega Sekurak Hacking Party w Krakowie! 26-27.10.2026 r.
GlassWorm – nowy, “niewidzialny” atak na łańcuch dostaw
W połowie września pisaliśmy o ataku na łańcuch dostaw – Shai-Hulud – który zresztą nie był jedynym w środowisku npm. Dziś mamy do czynienia z kolejną kampanią typu supply chain attack.
TLDR:
- GlassWorm to nowy atak na łańcuch dostaw, który ukrywa złośliwy kod przy użyciu niewidocznych znaków Unicode – dla programisty wyglądających jak puste linie.
- Malware wykorzystuje jako infrastrukturę C2 blockchain Solana i kalendarz Google, co czyni go trudnym do zablokowania.
- Złośliwe rozszerzenia automatycznie infekują użytkowników – badacze szacują ponad 35,800 instalacji.
- GlassWorm kradnie dane uwierzytelniające (NPM, GitHub, portfele kryptowalut), uruchamia serwer SOCKS i daje atakującemu ukryty dostęp do pulpitu (HVNC).
GlassWorm, bo o nim mowa, nie jest typowym atakiem na łańcuch dostaw. Wykorzystuje on bowiem niewidoczne znaki Unicode. Jego infrastruktura to serwery C2 działające na blockchain (Solana), a jako backup służy… kalendarz Google.
Zaczęło się od oflagowania przez Koidex zmian w nowej wersji (1.8.3) rozszerzenia CodeJoy dystrybuowanego w OpenVSX (alternatywna biblioteka wtyczek do Visual Studio Code).

Na pierwszy rzut oka wtyczka nie wydawała się podejrzana – regularne aktualizacje, wielu użytkowników. Badacze z Koi postanowili jednak zajrzeć do jej kodu źródłowego. Wtedy zrobiło się ciekawie.

Przerwa w kodzie to tak naprawdę oflagowany fragment z pierwszego zdjęcia.
Atakujący poczynił tutaj innowację. Historia zna już przypadki zaciemniania niebezpiecznych fragmentów kodu tak, aby nie rzucały się w oczy. Ten fragment też nie rzuca się w oczy, bo w ogóle go nie widać. Użyto w tym celu selektorów Unicode – specjalnych znaków, które są częścią specyfikacji Unicode, ale nie dają żadnego efektu wizualnego.
Dla programisty przeglądającego kod wyglądają one jak puste linie/spacje. Dla interpretera JavaScript będzie to jednak zwyczajny, wykonywalny kod.
Dlatego atak otrzymał nazwę GlassWorm – złośliwy kod jest całkowicie przezroczysty. Programista, którego konto zostało przejęte, mógł spojrzeć na plik i nie zauważyć nawet, że za chwilę rozprowadzi złośliwe oprogramowanie wśród setek użytkowników.
Nawet skrupulatne przejrzenie kodu i sprawdzenie podglądu zmian w repozytorium Git nie pokaże niczego podejrzanego. Ta technika pokazuje, że nie wszystko da się wykryć na pierwszy rzut oka.
Badacze z Koi rozszyfrowali niewidoczne znaki Unicode. Okazało się, że to nie koniec zaskoczeń. Złośliwe oprogramowanie wykorzystuje blockchain Solana jako infrastrukturę C2 (Command and Control). Złośliwe oprogramowanie przeszukuje blockchain Solana w poszukiwaniu transakcji (adres portfela jest zdefiniowany w kodzie). Po znalezieniu transakcji odczytuje pole memo – miejsce, w którym można dołączyć do transakcji dowolny tekst. W tej notatce atakujący umieszcza obiekt JSON z zakodowanym w base64 linkiem do pobrania złośliwego kodu.

Gdy zdekodujemy wartość link, ukazuje nam się:

Oznacza to, że instrukcje atakującego są – jako transakcje w łańcuchu bloków – niezmienialne, zdecentralizowane i trudne do zniszczenia. Znacznie ogranicza to też możliwości ustalenia prawdziwej osoby stojącej za atakiem. Transakcje nie są zależne od jednego dostawcy, rejestratora, ani infrastruktury, które można zablokować. Koszt zamieszczenia instrukcji przez atakującego wynosi mniej niż grosz.
Jeśli docelowe adresy zostaną wykryte i zablokowane (np. dodane do baz takich jak lista CERT), atakujący po prostu opublikuje nową transakcję z innym adresem URL, a wszystkie zainfekowane rozszerzenia automatycznie ją pobiorą. Nie ma żadnego skutecznego sposobu na zlikwidowanie takiej infrastruktury.
Serwer pod wskazanym adresem zwraca odpowiedź zaszyfrowaną (AES-256-CBC) kluczem, który znajduje się w nagłówku HTTP. Atakujący dynamicznie generuje klucze szyfrujące dla każdego żądania.
Badacze odszyfrowali zawartość i poddali ją analizie. W efekcie ustalili, że uruchamiany malware przede wszystkim przeszukuje dysk pod kątem danych uwierzytelniających (hasła, tokeny itp.) do:
- NPM – do publikowania złośliwych paczek,
- Git i GitHub – do przejmowania repozytoriów i publikowania złośliwego kodu,
- OpenVSX – do publikowania złośliwych wtyczek,
- 49 różnych portfeli kryptowalutowych – m.in. MetaMask, Phantom, Coinbase Wallet.
Na tym etapie można pomyśleć, że infrastruktura wykorzystywana jako C2 w tym ataku jest bardzo dobrze przemyślana. To prawda, bo blockchain Solana to nie jedyne rozwiązanie wykorzystywane w ramach GlassWorm.
W kodzie znajduje się link do wydarzenia w kalendarzu Google. Podczas analizy, wydarzenie miało w nazwie kolejny ciąg base64, który okazał się być kolejnym adresem URL.

Zdekodowana nazwa prezentuje się tak:


Kalendarz był tutaj swego rodzaju backupem. I to całkiem sprytnym, bo kto zablokowałby domeny Google? Nawet jeśli jeden z elementów C2 przestanie działać, atakujący ma do dyspozycji drugi kanał.
Odszyfrowanie i deobfuskacja przekazywanego przez wydarzenie zombi_payload pokazała, że GlassWorm służy nie tylko do pozyskiwania danych uwierzytelniających. Moduł zombi uruchamia na każdym zainfekowanym urządzeniu serwer SOCKS. Ponadto pobiera i wdraża moduły WebRTC do bezpośredniej komunikacji z urządzeniem (peer-to-peer). Połączenia te omijają tradycyjne zapory sieciowe poprzez NAT traversal.
Oznacza to, że zainfekowane urządzenia stają się węzłem proxy dla działalności atakującego.
Atakujący może więc kierować swój ruch przez przejęte urządzenia, uzyskując przy okazji dostęp do zasobów, do których nie ma dostępu z zewnątrz.
Ale to jeszcze nie koniec. Atakujący korzysta z HVNC (Hidden Virtual Network Computing), czyli zdalnego dostępu do komputera, działającego w tle – niewidocznie dla użytkownika. Nie pojawia się on w menedżerze zadań i nie wyświetla żadnych okien na ekranie.
Ma dzięki temu możliwość m.in.:
- korzystania z przeglądarki ofiary (z uwierzytelnionymi sesjami);
- dostępu do poczty e-mail, komunikatorów, aplikacji na urządzeniu ofiary;
- pozyskania dodatkowych danych uwierzytelniających z urządzenia ofiary;
- przejścia do innych systemów w sieci ofiary.
Dystrybucja malware przez wtyczki VS Code jest sprytnym rozwiązaniem, ponieważ rozszerzenia aktualizują się automatycznie. Kiedy pojawiła się wersja 1.8.3 CodeJoy zawierająca złośliwe oprogramowanie, wszyscy użytkownicy otrzymali aktualizację. Bez manualnego potwierdzenia ani jakiejkolwiek interakcji. Po prostu cicha, automatyczna infekcja w tle.
A ponieważ złośliwe oprogramowanie jest niewidoczne, pierwotni programiści, których konta zostały przejęte, prawdopodobnie nie mieli o tym pojęcia. Być może nawet przejrzeli puste linie w swoim kodzie i nie zauważyli niczego niepokojącego. Badacze oszacowali skalę ataku na ponad 35,800 instalacji, ale biorąc pod uwagę sposób dystrybucji, ta liczba zapewne wciąż rośnie.
Przypadek GlassWorm pokazuje przede wszystkim, jak niebezpieczne są ataki na łańcuch dostaw. Trzeba przyznać, że ta kampania została dobrze przemyślana, szczególnie w kontekście ciekawej infrastruktury C2. Pełną listę wtyczek, w których zidentyfikowano malware oraz znane IoC można sprawdzić tutaj.
Źródło: koi.ai
~Tymoteusz Jóźwiak
