Co się stało

Badacze bezpieczeństwa ujawnili w tym tygodniu, że kampania GlassWorm - wcześniej znana z zatruwania pakietów npm i repozytoriów GitHub niewidocznymi ładunkami Unicode - przeszła ewolucję. Najnowszy wariant wykorzystuje natywny plik binarny skompilowany w Zig, ukryty wewnątrz fałszywego rozszerzenia Open VSX, do cichej infekcji każdego IDE kompatybilnego z VS Code na maszynie programisty.

Złośliwe rozszerzenie, opublikowane jako specstudio.code-wakatime-activity-tracker, podszywa się pod WakaTime - popularny tracker aktywności w edytorze. Zostało już usunięte z Open VSX, ale okno na wyrządzenie szkód było spore.

Jak działa dropper Zig

W przeciwieństwie do typowych złośliwych rozszerzeń opartych wyłącznie na JavaScript, GlassWorm dostarcza natywny plik binarny skompilowany w Zig obok swojego kodu JS. Na Windows pojawia się jako win.node, na macOS jako mac.node. To natywne dodatki Node.js - skompilowane biblioteki współdzielone, które ładują się bezpośrednio do środowiska uruchomieniowego Node i wykonują się poza piaskownicą JavaScript z pełnym dostępem do systemu operacyjnego.

Po załadowaniu plik binarny:

  1. Skanuje każde IDE w systemie obsługujące rozszerzenia VS Code
  2. Pobiera złośliwe pliki .VSIX z konta GitHub (ColossusQuailPray)
  3. Instaluje je cicho za pomocą narzędzi CLI każdego edytora
  4. Usuwa własne ślady instalacji

Lista celowanych edytorów obejmuje VS Code, VS Code Insiders, VSCodium, Positron oraz narzędzia do kodowania oparte na AI, takie jak Cursor i Windsurf. Jeśli obsługuje rozszerzenia .vsix, GlassWorm je znajdzie i zainfekuje.

Drugi etap

Dropper instaluje drugie rozszerzenie o nazwie floktokbok.autoimport, podszywające się pod prawdziwy pakiet steoates.autoimport. To rozszerzenie drugiego etapu:

  • Sprawdza lokalizację systemu i pomija wykonanie na systemach z językiem rosyjskim
  • Odpytuje blockchain Solana w celu dynamicznego rozwiązania adresu serwera dowodzenia (C2) - sprytna technika utrudniająca zdjęcie infrastruktury, ponieważ zapisów na blockchainie nie da się łatwo usunąć
  • Wykrada wrażliwe dane, w tym zmienne środowiskowe, klucze SSH i dane uwierzytelniające
  • Wdraża trojana zdalnego dostępu (RAT) zapewniającego trwały dostęp
  • Instaluje złośliwe rozszerzenie Chrome kradnące dane przeglądarki

Dlaczego to dotyczy programistów

Łańcuch ataku działa od początku do końca przeciwko narzędziom, których programiści używają każdego dnia. Prawdziwy pakiet na prawdziwym marketplace, natywny dodatek Zig wykonujący się poza piaskownicą JS i wykradanie kluczy SSH oraz danych uwierzytelniających z każdego edytora kompatybilnego z VS Code na maszynie.

Wybór Zig jako języka kompilacji jest celowy. Zig produkuje małe pliki binarne bez zależności, które omijają większość narzędzi do analizy statycznej. Format binarny wygląda jak legalny natywny dodatek, czyli coś, co wiele rozszerzeń już dostarcza ze względu na wydajność.

Rozwiązywanie C2 przez Solana jest szczególnie paskudne. Tradycyjne przejmowanie domen tu nie zadziała. Atakujący zapisuje adres C2 na blockchainie, a malware go odczytuje. Organy ścigania nie mogą po prostu przejąć domeny, żeby zabić kampanię.

Wykrywanie

Sprawdź zainstalowane rozszerzenia natychmiast:

# Sprawdź VS Code
code --list-extensions | grep -i "floktokbok\|specstudio"

# Sprawdź Cursor
cursor --list-extensions | grep -i "floktokbok\|specstudio"

Szukaj tych wskaźników kompromitacji (IOC):

  • ID rozszerzenia: specstudio.code-wakatime-activity-tracker
  • ID rozszerzenia: floktokbok.autoimport
  • Konto GitHub hostujące ładunki: ColossusQuailPray
  • Nazwy plików natywnych dodatków: win.node, mac.node

Jeśli cokolwiek z powyższych pojawi się w Twoim systemie, zakładaj pełną kompromitację. Zrotuj wszystkie klucze API, klucze SSH, tokeny i dane uwierzytelniające dostępne z zainfekowanej maszyny.

Szerszy wzorzec

GlassWorm zaczynał od niewidocznych znaków Unicode w pakietach npm i repozytoriach GitHub. Teraz przeszedł na skompilowane natywne pliki binarne w rozszerzeniach IDE. Kierunek jest jasny: ataki na łańcuch dostaw narzędzi programistycznych stają się coraz bardziej wyrafinowane, a marketplace'y, którym ufamy, nie nadążają.

Odpowiedzialni wydawcy rozszerzeń IDE podpisują i recenzują każde wydanie ręcznie, zanim trafi do użytkowników. Open VSX wpuściło typosquatowany pakiet z natywnym dodatkiem Zig i puściło go każdemu, kto wpisał w wyszukiwarkę "wakatime".

Open VSX usunęło rozszerzenie po ujawnieniu. Trudniejsze pytanie brzmi: dlaczego pakiet dostarczający plik binarny Zig jako natywny dodatek nie uruchomił żadnej automatycznej weryfikacji przed publikacją.