
Co znajdziesz w tym artykule?
- 1 Wprowadzenie do problemu / definicja luki
- 2 W skrócie
- 3 Kontekst / historia / powiązania
- 4 Analiza techniczna / szczegóły luki
- 5 Praktyczne konsekwencje / ryzyko
- 6 Rekomendacje operacyjne / co zrobić teraz
- 7 Różnice / porównania z innymi przypadkami (jeśli dotyczy)
- 8 Podsumowanie / kluczowe wnioski
- 9 Źródła / bibliografia
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
- Użytkownik instaluje z pozoru użyteczne rozszerzenie.
- 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.
- 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.
- 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
- Natychmiastowy przegląd zainstalowanych dodatków: usuwaj rozszerzenia o nieznanym pochodzeniu lub zbędne funkcjonalnie (zasada „zero zbędnych wtyczek”).
- Wymuś allowlisty rozszerzeń w domenie (GPO/MDM) – zezwalaj tylko na audytowane dodatki.
- Monitoruj nietypowe zachowania przeglądarki: pojawianie się ukrytych iframów, nieoczekiwane zapytania do nieznanych domen, zmiany nagłówków (np. brak CSP).
- Segmentacja dostępu do danych przeglądarki (profile służbowe vs. prywatne; separacja przeglądarek dla krytycznych aplikacji).
- EDR z regułami behawioralnymi pod WebExtensions: detekcja dekodowania obrazów do stringów JS, eval/Function z danych binarnych, nietypowe
canvas/ImageData. - 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)