Przejdź do treści

Case study

Interwencja po zgłoszeniu CERT Polska: migracja Joomla 3 do 6

Po zgłoszeniu CERT Polska usunęliśmy wielowarstwową infekcję, zamknęliśmy podatność JCE, przeprowadziliśmy Joomla przez cztery generacje i wdrożyliśmy bezpieczną wersję na PHP 8.3.

Podsumowanie

Po zgłoszeniu CERT Polska działającego w NASK przejęliśmy w modelu white-label zainfekowany serwis na Joomla 3.9.21 i PHP 7.0. Usunęliśmy wielowarstwową infekcję, zamknęliśmy podatność komponentu JCE, oczyściliśmy całe konto hostingowe i przeprowadziliśmy system do Joomla 6.1.2, PHP 8.3 oraz MySQL 8.0.

Sytuacja wyjściowa

Serwis działał na niewspieranej Joomla 3.9.21 i PHP 7.0. Atakujący utworzył nieautoryzowane konto Super User, pozostawił pliki malware oraz aktywne mechanizmy dostępu w katalogach przeznaczonych na media. Zgłoszenie CERT Polska wskazywało podatność CVE-2026-48907 w starszej wersji JCE. Na tym samym koncie znajdowały się również porzucony autorski CMS i WordPress 3.0.3 z 2010 roku.

Problem biznesowy

Klient potrzebował nie tylko doraźnego odwirusowania, ale trwałego przywrócenia bezpieczeństwa bez utraty 465 artykułów, kategorii, menu, galerii i około 293 MB mediów. Wymiana platformy musiała odbyć się pod marką partnera, na działającym środowisku i z minimalnym przestojem.

Ryzyka

Malware było rozproszone pomiędzy główną instalacją, katalogiem obrazów i innymi, nieużywanymi systemami na koncie. Część plików miała neutralne nazwy, dlatego automatyczny skan po sygnaturach nazw nie wystarczał. Dodatkowymi ryzykami były cztery generacje Joomla do przejścia, porzucone rozszerzenie galerii, stara baza MySQL, niekompatybilny serwer oraz konieczność zachowania istniejącej składni treści.

Zakres odpowiedzialności

Jako niewidoczne zaplecze white-label odpowiadaliśmy za kopie, analizę incydentu, odzyskanie dostępu administracyjnego, identyfikację malware po treści, ręczną weryfikację wyników, usunięcie nieautoryzowanego konta i wektorów ataku, migrację rdzenia, aktualizację środowiska, nowy szablon, autorski plugin galerii, testy w Dockerze oraz bezpieczne wdrożenie na produkcję.

Rozwiązanie

Usunęliśmy 56 plików malware z głównego zakresu, w tym skrypty PHP umieszczone w katalogach mediów, oraz zamknęliśmy możliwość wykonywania kodu w uploads. Zaktualizowaliśmy JCE do wersji zamykającej CVE-2026-48907, usunęliśmy eXtplorer, obróciliśmy hasła i klucze bezpieczeństwa. Joomla przeszła kolejno przez 3.10, 4.4, 5.4 do 6.1.2. Dotychczasowy wygląd odtworzyliśmy jako child template Cassiopeia, a porzuconą galerię zastąpiliśmy własnym natywnym pluginem Joomla 6 z lightboxem.

Architektura i integracje

Docelowy serwis działa na Joomla 6.1.2, PHP 8.3, MySQL 8.0 i Apache. Wyszukiwarkę przebudowano na Smart Search, galerie obsługuje własny plugin bez płatnych zależności, a katalogi z mediami są zabezpieczone przed wykonywaniem PHP. Wdrożenie wykonaliśmy metodą nowy katalog → podmiana, ograniczając przerwę do sekund.

Rezultaty

Zachowaliśmy 465 artykułów, kategorie, menu i około 293 MB mediów. Front, panel administracyjny, artykuły, galerie, paginacja i wyszukiwarka odpowiadają poprawnie na PHP 8.3. Poza główną instalacją wykryliśmy i zneutralizowaliśmy 181 webshelli w porzuconym CMS oraz 3 aktywne webshelle w katalogu obrazów. Stary CMS i WordPress 3.0.3 zostały zarchiwizowane i usunięte z publicznego środowiska.

Technologie

Joomla 3.9, 3.10, 4.4, 5.4 i 6.1; JCE; PHP 7.0 i 8.3; MySQL 8; Apache; Docker; Smart Search; Cassiopeia child template; autorski plugin galerii; analiza malware po treści; hardening uploadów; wdrożenie przez podmianę katalogu.

Dalsze kroki

Pozostawiliśmy możliwość rollbacku do kopii starej Joomla oraz archiwów wyłączonych instalacji. Zaleciliśmy dalszy monitoring po incydencie, rotację pozostałych dostępów do konta i regularne aktualizacje komponentów. Dane dostępowe zostały przekazane partnerowi odrębnym, bezpiecznym kanałem.

Incydent i migracja bez ujawniania klienta

Projekt zrealizowaliśmy jako niewidoczne zaplecze techniczne partnera. Nie publikujemy nazwy, domeny, branży ani widoków serwisu. Pokazujemy skalę incydentu, decyzje techniczne i rezultat potwierdzony po wdrożeniu.

3.9 → 6.1migracja Joomla przez wszystkie wersje pośrednie
465artykułów zachowanych wraz z menu i kategoriami
181webshelli usuniętych z porzuconego systemu na koncie
sekundyprzerwy przy produkcyjnej podmianie katalogu


Anonimowa wizualizacja analizy infekcji i migracji starszego systemu do bezpiecznej platformy
Wizualizacja wygenerowana z użyciem AI na podstawie rzeczywistego procesu: starszy system i infekcja → analiza treści plików → czysta platforma Joomla 6. Powiększ planszę ↗
  • Zgłoszenie CERT Polska wiązało się z podatnością CVE-2026-48907 w niewspieranym komponencie JCE.
  • Malware wykrywaliśmy po zawartości plików, a nie wyłącznie po nazwach; ręcznie oddzieliliśmy realne zagrożenia od false positives.
  • Porzuconą galerię zastąpiliśmy własnym, natywnym pluginem Joomla 6 z zachowaniem istniejącej składni treści i nowym lightboxem.
  • Po wdrożeniu zweryfikowaliśmy front, panel, artykuły, galerie, paginację i wyszukiwarkę na docelowym PHP 8.3.