GhostAction rozszerza ataki na GitHub: złośliwy plik udający font kradnie sekrety z repozytoriów - Security Bez Tabu

GhostAction rozszerza ataki na GitHub: złośliwy plik udający font kradnie sekrety z repozytoriów

Cybersecurity news

Wprowadzenie do problemu / definicja

Kampania GhostAction pokazuje, że współczesne ataki na łańcuch dostaw oprogramowania nie ograniczają się już wyłącznie do kompromitacji pipeline’ów CI/CD. W najnowszym wariancie napastnicy łączą phishing wymierzony w maintainerów projektów open source z drugim etapem infekcji uruchamianym bezpośrednio na stacjach roboczych programistów. Kluczowym elementem operacji jest ukrycie stealera poświadczeń w pliku wyglądającym jak zwykły zasób front-endowy.

Takie podejście znacząco utrudnia wykrycie incydentu, ponieważ złośliwy komponent może zostać uznany za nieszkodliwy plik techniczny. W efekcie atak obejmuje jednocześnie konta GitHub, konfiguracje deweloperskie, lokalne sekrety i dostęp do infrastruktury powiązanej z procesem wytwarzania oprogramowania.

W skrócie

  • Operatorzy GhostAction rozszerzyli kampanię supply chain o phishing podszywający się pod alert bezpieczeństwa GitHub.
  • Napastnicy przechwytują dane logowania oraz tokeny OAuth, uzyskując trwały dostęp do repozytoriów.
  • W 94 repozytoriach wykryto drugi etap infekcji uruchamiany lokalnie po otwarciu projektu w Visual Studio Code.
  • Złośliwy kod ukryto w pliku o nazwie sugerującej font webowy, który w rzeczywistości działa jako stealer poświadczeń.
  • Malware kradnie m.in. klucze AWS, tokeny npm i PyPI, dane GitHub, sekrety Kubernetes oraz klucze SSH.

Kontekst / historia

GhostAction był wcześniej kojarzony przede wszystkim z osadzaniem złośliwych workflow w przejętych repozytoriach GitHub. Tego rodzaju workflow przeszukiwały środowiska CI pod kątem sekretów, a następnie przekazywały je do infrastruktury kontrolowanej przez operatora. Model ten był szczególnie groźny, ponieważ jedno przejęte repozytorium mogło prowadzić do dalszej kompromitacji rejestrów pakietów, usług chmurowych i środowisk produkcyjnych.

Najnowsza odsłona kampanii wskazuje jednak na zmianę taktyki. Zamiast polegać wyłącznie na środowisku CI/CD, napastnicy przenieśli część działań bezpośrednio na urządzenia deweloperów. To oznacza rozszerzenie powierzchni ataku: celem przestaje być wyłącznie repozytorium, a stają się nim także lokalne maszyny, zapisane na nich sekrety oraz aktywne sesje uwierzytelnione w usługach programistycznych.

Analiza techniczna

Z ustaleń wynika, że kampania wykorzystuje domenę stylizowaną na infrastrukturę GitHub do rozsyłania wiadomości phishingowych. E-mail podszywa się pod alert o nowym logowaniu i nakłania ofiarę do przejścia do fałszywej strony zabezpieczenia konta. Mechanizm działa jako reverse proxy, dzięki czemu może przechwycić zarówno hasło, jak i kod uwierzytelniania dwuskładnikowego w czasie rzeczywistym.

Atak nie kończy się jednak na kradzieży loginu i hasła. Złośliwa infrastruktura automatyzuje autoryzację aplikacji OAuth w aktywnej sesji ofiary. W praktyce pozwala to uzyskać token z uprawnieniami do odczytu i zapisu repozytoriów, modyfikacji workflow oraz dostępu do danych organizacyjnych. Taki token może zapewnić trwały dostęp przez API nawet wtedy, gdy użytkownik zmieni hasło, o ile wcześniej nie zostanie osobno unieważniony.

Drugi etap infekcji został przygotowany tak, aby uruchamiał się lokalnie po otwarciu projektu w Visual Studio Code. W repozytoriach umieszczano plik tasks.json z wyzwalaczem runOn: folderOpen, co powodowało automatyczne wykonanie zadania po otwarciu katalogu. Dzięki temu napastnicy omijali ograniczenia klasycznych mechanizmów CI i przenosili wykonanie kodu bezpośrednio na komputer programisty.

Ładunek malware ukryto w pliku public/fonts/fa-solid-400.woff2, który pozornie wyglądał jak standardowy zasób front-endowy. W rzeczywistości plik zawierał stealer zbierający szeroki zestaw danych uwierzytelniających, w tym klucze AWS, tokeny PyPI i npm, poświadczenia GitHub, konfiguracje Kubernetes, prywatne klucze SSH oraz dane dostępowe do wybranych usług AI. Po uruchomieniu malware nie tylko eksfiltrował znalezione sekrety, ale też instalował zadanie cron wykonywane co pięć minut, zapewniając sobie persistence i możliwość pobierania kolejnych poleceń.

W części repozytoriów osadzano również dodatkowy workflow CI jako mechanizm zapasowy. Jeśli lokalny stealer nie został uruchomiony, złośliwy pipeline nadal próbował wyszukiwać poświadczenia i przekazywać je operatorowi. Workflow ukrywano pod nazwami przypominającymi legalne pliki automatyzacji, takimi jak lint.yml, ci-check.yml, build-check.yml, repo-health.yml, audit.yml, code-review.yml, test-suite.yml czy cache-cleanup.yml.

Konsekwencje / ryzyko

Ryzyko związane z tą kampanią jest wielopoziomowe. Przejęcie tokenu OAuth lub danych logowania do GitHub umożliwia dalsze modyfikowanie repozytoriów, workflow i potencjalnie także publikowanych pakietów. Kompromitacja stacji deweloperskiej otwiera z kolei drogę do kradzieży sekretów, które nie są dostępne w samym CI, takich jak lokalne klucze SSH, konfiguracje klastrów czy dane sesyjne.

Dla organizacji utrzymujących projekty open source skutki mogą być znacznie szersze niż przejęcie pojedynczego konta. Jeśli zaatakowany maintainer ma dostęp do organizacji, prywatnych repozytoriów, rejestrów artefaktów lub środowisk chmurowych, incydent może doprowadzić do skażenia procesu build, wycieku kodu źródłowego, przejęcia pipeline’ów oraz kompromitacji produktów zależnych.

Szczególnie niebezpieczna jest trwałość tego scenariusza. Nawet po usunięciu złośliwego workflow z repozytorium wcześniej zainfekowana maszyna dewelopera może nadal wysyłać sekrety i wykonywać polecenia operatora. Oznacza to, że samo oczyszczenie projektu nie wystarcza do pełnego opanowania incydentu.

Rekomendacje

Organizacje powinny traktować ten typ zdarzenia jako incydent obejmujący równocześnie repozytoria i endpointy deweloperskie. Reakcja musi uwzględniać unieważnienie tokenów GitHub i sesji OAuth, zmianę haseł z czystego urządzenia oraz pełną rotację wszystkich sekretów, do których kompromitowane repozytorium lub stacja robocza mogły mieć dostęp.

W repozytoriach warto przeprowadzić szczegółowy przegląd pod kątem następujących artefaktów:

  • podejrzanych plików workflow w katalogu .github/workflows/,
  • plików tasks.json zawierających automatyczne uruchamianie po otwarciu folderu,
  • nietypowych plików binarnych lub zasobów udających fonty, obrazy i biblioteki front-endowe,
  • śladów po nieautoryzowanych aplikacjach OAuth i tokenach dostępowych.

Na stacjach roboczych deweloperów należy sprawdzić:

  • obecność zadań cron i innych mechanizmów persistence,
  • historię uruchamianych zadań Visual Studio Code,
  • artefakty wskazujące na odczyt katalogów domowych i magazynów poświadczeń,
  • nieautoryzowaną komunikację wychodzącą do nieznanych hostów i portów.

Z perspektywy długofalowej warto ograniczać zakres uprawnień tokenów, wdrażać zasadę najmniejszych uprawnień dla OAuth, monitorować zmiany w workflow CI/CD oraz obejmować przeglądem bezpieczeństwa także pliki konfiguracyjne środowisk deweloperskich. Ważne jest również segmentowanie sekretów tak, aby pojedyncze konto maintainera nie dawało dostępu do całego łańcucha dostaw.

Istotnym elementem obrony pozostaje edukacja zespołów. Szkolenia antyphishingowe powinny uwzględniać nie tylko kradzież haseł, ale również scenariusze reverse proxy i nadużycia device flow OAuth, które pozwalają napastnikom uzyskać szerokie uprawnienia bez wzbudzania podejrzeń ofiary.

Podsumowanie

GhostAction pokazuje, że ataki supply chain stają się coraz bardziej hybrydowe, elastyczne i odporne na pojedyncze mechanizmy obronne. Połączenie phishingu, nadużycia OAuth, złośliwych workflow oraz lokalnego stealera uruchamianego z poziomu Visual Studio Code znacząco zwiększa skuteczność operacji i utrudnia jej neutralizację.

Dla zespołów bezpieczeństwa to wyraźny sygnał, że ochrona łańcucha dostaw musi wykraczać poza same platformy CI/CD. Konieczne jest objęcie kontrolą również stacji deweloperskich, integracji OAuth, lokalnych sekretów i codziennych praktyk pracy z kodem.

Źródła

  1. The Hacker News — https://thehackernews.com/2026/10/ghostaction-attackers-plant-credential.html
  2. GitHub Docs: GitHub OAuth device flow — https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps#device-flow
  3. Visual Studio Code Docs: Tasks — https://code.visualstudio.com/docs/editor/tasks
  4. OpenSourceMalware — https://opensourcemalware.com/