GhostPoster: złośliwe rozszerzenia Firefoksa ukrywają malware w ikonach PNG - Security Bez Tabu

GhostPoster: złośliwe rozszerzenia Firefoksa ukrywają malware w ikonach PNG

Wprowadzenie do problemu / definicja luki

Badacze bezpieczeństwa opisali kampanię GhostPoster, w której co najmniej 17 rozszerzeń Firefoksa zawierało ukryty złośliwy kod w plikach ikon (PNG). Rozszerzenia wyglądały na nieszkodliwe (VPN, tłumacz, zrzuty ekranu, pogoda, dark mode), a łącznie zanotowały ponad 50 tys. instalacji. Celem było m.in. śledzenie aktywności w przeglądarce, wtryskiwanie iframów, oszustwa afiliacyjne i przygotowanie backdoora.

W skrócie

  • Nośnik: złośliwy JavaScript ukryty w ikonach PNG rozszerzeń (steganografia + loader).
  • Skala: 17 rozszerzeń, >50 000 pobrań z oficjalnego repozytorium.
  • Technika uniku: opóźniona aktywacja i warunkowe pobieranie payloadu; wykorzystanie web_accessible_resources do ładowania zasobów rozszerzeń.
  • Skutki: porywanie prowizji, śledzenie, wtryskiwanie ukrytych iframów, modyfikacja nagłówków bezpieczeństwa, potencjalne ominięcie CAPTCHA.

Kontekst / historia / powiązania

Złośliwe rozszerzenia to problem powracający zarówno w ekosystemie Mozilli, jak i Chrome. W ostatnich miesiącach opisywano liczne nadużycia (kampanie ad-fraud, kradzież danych, podmiana linków), a producenci przeglądarek sukcesywnie wzmacniają polityki (np. deklaracje dotyczące danych, ostrzejsze weryfikacje). GhostPoster wpisuje się w ten trend, ale wyróżnia się nietypowym nośnikiem – ikoną dodatku – co utrudnia detekcję statyczną i przegląd sklepu.

Analiza techniczna / szczegóły luki

Łańcuch ataku

  1. Użytkownik instaluje z pozoru użyteczne rozszerzenie.
  2. Skrypt rozszerzenia ładuje ikonę PNG z katalogu zasobów rozszerzenia, oznaczoną jako web_accessible_resource (dostępną dla stron/ram). Mechanizm ten jest wspólny dla WebExtensions i umożliwia udostępnianie obrazów, stron HTML czy skryptów.
  3. W pikselach obrazu osadzono zaszyfrowane bądź zakodowane fragmenty JavaScript (steganografia). Po wczytaniu obraz jest dekodowany w pamięci, a wynikowy loader montuje i uruchamia kod.
  4. Loader stosuje opóźnienie (np. do 48h) i/lub probabilistyczne wywołanie zewnętrznego C2, ograniczając artefakty w ruchu sieciowym i sygnatury behawioralne. Następnie dociąga moduły odpowiedzialne za inject iframów, manipulację nagłówkami, ad-fraud/affiliate hijacking oraz przygotowanie kanału trwałego dostępu.

Dlaczego to działa?

  • Analiza statyczna manifestu i plików JS nie wykazuje anomalii – „hak” tkwi w obrazie.
  • web_accessible_resources ułatwia legalne wczytanie ikony/zasobu z pakietu rozszerzenia i jego dalsze przetwarzanie przez skrypty.

Praktyczne konsekwencje / ryzyko

  • Kradzież i monetyzacja ruchu (affiliate hijacking, ad-fraud) oraz tracking użytkownika w skali całej sesji przeglądarki.
  • Ryzyko backdoora w przeglądarce (dodatkowe skrypty z C2, modyfikacje DOM, przechwytywanie formularzy).
  • Niski sygnał dla EDR/AV – brak oddzielnych plików JS na dysku, aktywacja z opóźnieniem i warunkowo.

Rekomendacje operacyjne / co zrobić teraz

Dla użytkowników i zespołów IT

  1. Natychmiastowy przegląd zainstalowanych dodatków: usuwaj rozszerzenia o nieznanym pochodzeniu lub zbędne funkcjonalnie (zasada „zero zbędnych wtyczek”).
  2. Wymuś allowlisty rozszerzeń w domenie (GPO/MDM) – zezwalaj tylko na audytowane dodatki.
  3. Monitoruj nietypowe zachowania przeglądarki: pojawianie się ukrytych iframów, nieoczekiwane zapytania do nieznanych domen, zmiany nagłówków (np. brak CSP).
  4. Segmentacja dostępu do danych przeglądarki (profile służbowe vs. prywatne; separacja przeglądarek dla krytycznych aplikacji).
  5. EDR z regułami behawioralnymi pod WebExtensions: detekcja dekodowania obrazów do stringów JS, eval/Function z danych binarnych, nietypowe canvas/ImageData.
  6. Reakcja po-incydentowa: po usunięciu dodatku – czyszczenie profilu, rotacja haseł/sesji, sprawdzenie reguł proxy/DNS, IOCs z ruchu C2.

Dla deweloperów rozszerzeń

  • Ograniczaj web_accessible_resources do minimalnego zestawu, nie oznaczaj skryptów jako publicznych; weryfikuj integralność zasobów.
  • Dodaj CSP dla stron rozszerzeń (np. script-src 'self'), unikaj eval/dynamicznego generowania kodu z bajtów obrazu.
  • Używaj podpisywania/CI z kontrolą zmian w assetach i skanach pod kątem steganografii.

Różnice / porównania z innymi przypadkami (jeśli dotyczy)

W porównaniu z typowymi kampaniami złośliwych rozszerzeń (np. aktualizacja, która nagle dodaje spyware), GhostPoster nietypowo przenosi payload w pliku graficznym ikony, a nie w jawnym skrypcie/serwerze aktualizacji. To zbliża się do wcześniejszych przypadków ukrywania kodu w PNG (np. projekty ataków na ekosystemy deweloperskie), lecz tutaj wektor przeniesiono na logo dodatku i mechanikę web_accessible_resources, co utrudnia manualne i automatyczne review.

Podsumowanie / kluczowe wnioski

GhostPoster pokazuje, że kontrola zasobów statycznych (obrazy, ikony) w pakietach rozszerzeń jest równie ważna jak analiza kodu JS. Organizacje powinny ograniczyć powierzchnię poprzez allowlisty, monitoring behawioralny i restrykcyjny CSP, a użytkownicy – instalować tylko absolutnie niezbędne dodatki od zaufanych wydawców. Ikona to też kod – traktuj ją jak potencjalny kontener payloadu.

Źródła / bibliografia

  • SecurityWeek – „GhostPoster Firefox Extensions Hide Malware in Icons”. (fakty: techniki, skutki, opis kampanii) (SecurityWeek)
  • BleepingComputer – „GhostPoster attacks hide malicious JavaScript in Firefox addon logos”. (skala, technika, opóźnienia/loader) (BleepingComputer)
  • The Hacker News – „GhostPoster Malware Found in 17 Firefox Add-ons with 50,000+ Downloads”. (liczba rozszerzeń, pobrania, klasy aktywności) (The Hacker News)
  • KOI Security – „Inside GhostPoster: How a PNG Icon Infected 50,000 Firefox Users”. (szczegóły TTPs/steganografia) (koi.ai)
  • MDN Web Docs – „web_accessible_resources (manifest.json)”. (mechanizm techniczny WebExtensions) (MDN Web Docs)