16 złośliwych pakietów RubyGems wykorzystało typosquatting do kradzieży haseł i portfeli kryptowalut - Security Bez Tabu

16 złośliwych pakietów RubyGems wykorzystało typosquatting do kradzieży haseł i portfeli kryptowalut

Cybersecurity news

Wprowadzenie do problemu / definicja

Typosquatting w repozytoriach open source polega na publikowaniu pakietów o nazwach bardzo podobnych do legalnych bibliotek, aby ofiara zainstalowała złośliwy komponent przez literówkę, pośpiech lub brak weryfikacji. Najnowsza kampania wymierzona w użytkowników RubyGems pokazuje, że nawet proste manipulacje nazwami mogą prowadzić do pełnoprawnego ataku na łańcuch dostaw oprogramowania.

W analizowanym przypadku napastnicy opublikowali 16 złośliwych gemów, które uruchamiały kod już na etapie instalacji. Celem operacji była kradzież danych uwierzytelniających, informacji z przeglądarek, danych z Telegram Desktop oraz portfeli kryptowalutowych.

W skrócie

  • W RubyGems wykryto 16 pakietów podszywających się pod legalne zależności.
  • Mechanizm infekcji wykorzystywał plik extconf.rb, uruchamiany podczas instalacji gema.
  • Łańcuch ataku obejmował loader napisany w Rust i stealer zaimplementowany w Go.
  • Złośliwe oprogramowanie było ukierunkowane głównie na systemy Windows.
  • Kradzione były hasła, dane przeglądarek, frazy seed, portfele kryptowalutowe i artefakty z Telegram Desktop.
  • Pakiety usunięto z rejestru, ale incydent podkreśla trwałe ryzyko w publicznych ekosystemach zależności.

Kontekst / historia

Ataki na łańcuch dostaw od lat koncentrują się na publicznych rejestrach pakietów, takich jak npm, PyPI czy RubyGems. Deweloperzy i systemy CI/CD często automatycznie pobierają zależności, co tworzy dogodne warunki do nadużyć. Wystarczy, że złośliwy pakiet będzie wyglądał wiarygodnie lub zostanie omyłkowo dodany do projektu.

W tej kampanii zidentyfikowano pakiety o nazwach przypominających legalne biblioteki Ruby, ale zawierających mylące literówki. Dodatkowym problemem okazał się model zarządzania nazwami pakietów: w części przypadków napastnicy mieli wykorzystać możliwość ponownego użycia nazwy po wycofaniu wcześniejszych wersji. Wątpliwości budzi również pole autora pakietu, które może sprawiać wrażenie autentyczności, mimo że nie zawsze odzwierciedla realne pochodzenie publikacji.

Analiza techniczna

Kluczowym elementem kampanii było nadużycie mechanizmu wykonywania kodu podczas instalacji pakietu. W RubyGems rolę tę pełni między innymi plik extconf.rb, zwykle wykorzystywany do konfiguracji i kompilacji natywnych rozszerzeń. W tym przypadku został on użyty jako hook instalacyjny do automatycznego uruchomienia złośliwego kodu.

Po rozpoczęciu instalacji pakiet pobierał zewnętrzny komponent w postaci loadera o rozmiarze około 22 MB, napisanego w Rust. Jego zadaniem było dostarczenie i uruchomienie właściwego ładunku, czyli stealera określanego jako wincfg, zaimplementowanego w Go. Taki podział zwiększał elastyczność ataku i utrudniał szybką analizę całego łańcucha.

Złośliwe oprogramowanie koncentrowało się przede wszystkim na środowiskach Windows. Według opisu kampanii stealer zawierał bibliotekę DLL służącą do pozyskiwania danych z przeglądarek opartych na Chromium. Zakres zbieranych informacji obejmował loginy, hasła, historię przeglądania, dane rozszerzeń oraz zapisane lokalnie dane kart płatniczych. Istotnym aspektem było również omijanie wybranych mechanizmów ochrony danych przeglądarkowych.

Równolegle malware przeszukiwał system pod kątem portfeli kryptowalutowych, fraz seed i danych z Telegram Desktop. Dodatkowo zbierane były informacje systemowe oraz publiczny adres IP ofiary. Po skompletowaniu materiału dane były archiwizowane do zaszyfrowanego hasłem pliku ZIP, przesyłane do zewnętrznej usługi hostingu plików, a następnie przekazywane operatorowi ataku przez nieszyfrowany kanał HTTP.

Aktywność była przy tym maskowana jako standardowy proces budowania rozszerzenia. Zamiast rzeczywistej kompilacji generowano pozorne artefakty i puste cele build, aby instalacja wyglądała na rutynową i nieszkodliwą. Faktyczne działania ofensywne odbywały się jednak poza oczekiwanym przepływem pracy.

Konsekwencje / ryzyko

Skala ryzyka jest wysoka, ponieważ kompromitacja następuje bardzo wcześnie — już podczas instalacji zależności. Oznacza to, że zagrożone są nie tylko stacje robocze programistów, ale także pipeline’y CI/CD, środowiska testowe, serwery build i systemy administracyjne.

Zakres potencjalnie przejętych danych obejmuje zasoby o wysokiej wartości operacyjnej i finansowej. Kradzież haseł z przeglądarek może prowadzić do przejęcia kont deweloperskich, repozytoriów kodu, usług chmurowych, paneli administracyjnych i poczty. Utrata portfeli kryptowalutowych oraz fraz seed oznacza z kolei bezpośrednie ryzyko finansowe. Dane z Telegram Desktop mogą wspierać dalsze działania wywiadowcze, phishing lub próby przejęcia sesji.

Incydent pokazuje też, że nawet stosunkowo nieudolne literówki w nazwach pakietów mogą okazać się skuteczne, jeśli trafią do dokumentacji, skryptów instalacyjnych lub ręcznie wpisywanych poleceń. Dlatego sama kontrola nazwy zależności nie wystarcza — konieczna jest również analiza zachowania pakietu podczas instalacji.

Rekomendacje

Organizacje korzystające z RubyGems powinny wdrożyć ścisłą kontrolę zależności i traktować instalację pakietu jak uruchomienie potencjalnie nieufnego kodu. Kluczowe znaczenie mają zarówno procesy techniczne, jak i polityki bezpieczeństwa w zespołach deweloperskich oraz DevSecOps.

  • Pinować wersje zależności i korzystać z zaufanych lockfile.
  • Ograniczać ręczne dodawanie nowych pakietów bez zatwierdzenia.
  • Monitorować użycie extconf.rb oraz innych hooków instalacyjnych.
  • Skanować zależności pod kątem typosquattingu i anomalii w metadanych.
  • Wdrażać wewnętrzne proxy lub mirror rejestru pakietów z procesem akceptacji artefaktów.
  • Izolować buildy i instalacje pakietów w środowiskach sandbox.
  • Blokować nieautoryzowany ruch outbound z hostów deweloperskich i runnerów CI.
  • Monitorować procesy potomne uruchamiane przez menedżery pakietów.
  • Wykrywać nietypowy dostęp do danych przeglądarek, Telegram Desktop i katalogów portfeli kryptowalutowych.
  • Egzekwować MFA oraz separację tożsamości dla kont uprzywilejowanych i deweloperskich.

Jeśli istnieje podejrzenie instalacji jednego z tych pakietów, należy natychmiast przeprowadzić analizę hosta, zweryfikować historię instalacji gemów i sprawdzić połączenia sieciowe wykonywane podczas instalacji. Wszystkie lokalnie zapisane sekrety powinny zostać uznane za potencjalnie skompromitowane, co w praktyce oznacza reset haseł, rotację tokenów, unieważnienie sesji i kontrolę integralności środowisk build.

Podsumowanie

Kampania z 16 złośliwymi pakietami RubyGems potwierdza, że bezpieczeństwo łańcucha dostaw oprogramowania zależy nie tylko od jakości własnego kodu, ale także od zaufania do ekosystemu zależności. Napastnicy połączyli typosquatting, hooki instalacyjne i wieloetapowy łańcuch dostarczania ładunku, aby kraść poświadczenia, dane finansowe i informacje o wysokiej wartości.

Dla zespołów bezpieczeństwa najważniejszy wniosek jest prosty: instalacja pakietu musi być traktowana jak wykonanie obcego kodu. Skuteczna obrona wymaga weryfikacji nazwy, pochodzenia, metadanych i rzeczywistego zachowania zależności jeszcze przed dopuszczeniem jej do środowisk produkcyjnych.

Źródła

  1. 16 Typosquatted RubyGems Packages Steal Browser Credentials and Crypto Wallets — https://thehackernews.com/2026/08/16-typosquatted-rubygems-packages-steal.html
  2. RubyGems Guides: Gems with Extensions — https://guides.rubygems.org/gems-with-extensions/
  3. OpenSourceMalware — StubMaker campaign research — https://opensourcemalware.com/
  4. RubyGems.org — package registry and package ownership records — https://rubygems.org/
  5. npm Docs: package lifecycle hooks — https://docs.npmjs.com/cli/v10/using-npm/scripts