TL;DR

Rdzeń WordPressa może być aktualny, a strona nadal podatna przez jeden porzucony dodatek. Pięć przeanalizowanych przypadków obejmuje trzy powtarzalne wektory:

  • nieautoryzowany upload plików: Peugeot Music 1.0 i motyw Seotheme pozwalają przesłać kod PHP bez logowania;
  • RCE przez funkcję dodatku: Augmented-Reality nadużywa konektora elFinder, a Spectra pozwala uwierzytelnionemu redaktorowi doprowadzić do wykonania kodu;
  • SQL injection: Google Review Slider 6.1 przyjmuje złośliwą wartość parametru tid bez uwierzytelnienia.

Wniosek nie brzmi „zainstaluj więcej wtyczek bezpieczeństwa”. Największą zmianę daje zmniejszenie liczby komponentów, usunięcie nieużywanych plików, kontrola kont i regularna weryfikacja integralności serwera.

Dlaczego dodatki są ważniejsze niż licznik aktualizacji

Panel WordPressa pokazuje dostępne aktualizacje, ale nie rozwiązuje trzech problemów. Po pierwsze, dodatek może być porzucony i nigdy nie dostać poprawki. Po drugie, dezaktywowany komponent nadal leży na serwerze, a jego publiczny plik PHP może pozostać dostępny. Po trzecie, motyw lub wtyczka napisana dla jednej agencji może nie istnieć w oficjalnym repozytorium, więc nie pojawi się żadne automatyczne ostrzeżenie.

Dlatego audyt musi obejmować pliki obecne na serwerze, nie tylko aktywne pozycje w panelu.

Pięć przypadków, które warto znać

Peugeot Music 1.0: upload bez logowania

CVE-2018-25335 dotyczy endpointu upload.php. Nieuwierzytelniony atakujący może przesłać plik o dowolnym rozszerzeniu przez manipulację parametrem name, a następnie wykonać kod z katalogu uploadów. Rekord otrzymał wynik 9,8 w CVSS 3.1.

Konkretna wtyczka jest niszowa. Wzorzec jest powszechny: stary skrypt do uploadu zostaje publiczny, choć funkcja dawno nie jest używana. Samo wyłączenie dodatku nie wystarcza — trzeba usunąć jego katalog i sprawdzić, czy w wp-content/uploads nie ma plików PHP. Analiza: CVE-2018-25335 w Peugeot Music.

Seotheme: plik PHP w katalogu motywu

CVE-2023-54352 umożliwia nieautoryzowane przesłanie kodu PHP do katalogu motywu Seotheme. NVD wskazuje ścieżkę /wp-content/themes/seotheme/mar.php jako przykład powłoki używanej do wykonywania komend i utrzymania dostępu.

Sprawdzenie jednego pliku jest dobrym początkiem, ale nie kończy analizy. Nazwę webshella można zmienić. Po wykryciu śladów uploadu należy porównać wszystkie pliki WordPressa z czystą kopią, przejrzeć konta administratorów i zmienić poświadczenia. Szczegóły: RCE w motywie Seotheme.

Augmented-Reality: podatny konektor elFinder

CVE-2023-54350 wykorzystuje connector.minimal.php w komponencie elFinder. Atakujący bez konta może użyć komend mkfile i put, aby utworzyć plik PHP w katalogu file_manager, a następnie go wykonać.

W logach warto szukać żądań POST do tej ścieżki. Na dysku — plików PHP w katalogach przeznaczonych na media. Jeśli takie pliki istnieją, serwer należy traktować jako potencjalnie skompromitowany, nie jako „stronę wymagającą jednej aktualizacji”. Pełny alert: RCE we wtyczce Augmented-Reality.

Google Review Slider 6.1: blind SQL injection

CVE-2019-25745 pozwala nieuwierzytelnionemu atakującemu manipulować parametrem tid i wydobywać informacje z bazy metodą time-based blind SQL injection. Serwer nie zwraca danych bezpośrednio; operator wnioskuje o nich na podstawie opóźnień odpowiedzi.

To atak wolniejszy od prostego wycieku, ale łatwy do automatyzacji. W logach szukaj nietypowych wartości tid, powtarzalnych żądań i charakterystycznych opóźnień. Opis: SQL injection w Google Review Slider.

Spectra: zaufane konto jako punkt wejścia

CVE-2026-7465 przypomina, że nie każda krytyczna ścieżka zaczyna się bez logowania. W źródłowym alercie opisaliśmy możliwość wykonania kodu przez użytkownika z rolą Contributor lub wyższą, wykorzystującego spreparowane bloki Gutenberga.

Dla strony z wieloma autorami oznacza to konieczność przeglądu kont redakcyjnych. Konto byłego pracownika albo agencji zewnętrznej może być równie ważne jak niezałatana wtyczka. Szczegóły: RCE w Spectra.

Audyt WordPressa w 30 minut

1. Zrób listę komponentów z dysku

Spisz katalogi w wp-content/plugins i wp-content/themes. Porównaj je z listą aktywnych dodatków w panelu. Każdy komponent nieaktywny, testowy albo bez właściciela biznesowego jest kandydatem do usunięcia po wykonaniu backupu.

2. Sprawdź datę ostatniej aktualizacji i źródło

Priorytet mają dodatki spoza oficjalnego repozytorium, komponenty bez aktualizacji od roku oraz kod wykonany na zamówienie. Dla każdego zapisz producenta, numer wersji i osobę odpowiedzialną za decyzję o aktualizacji lub usunięciu.

3. Poszukaj kodu w katalogach mediów

Pliki .php, .phtml i podobne nie powinny pojawiać się w zwykłym katalogu uploadów. Sama obecność nie zawsze dowodzi włamania, ale wymaga wyjaśnienia. Sprawdź też świeżo utworzone pliki w katalogach wtyczek i motywów.

4. Zweryfikuj konta

Usuń użytkowników nieaktywnych i obniż uprawnienia osobom, które tylko publikują treści. Włącz MFA dla administratorów, jeśli używany mechanizm logowania to obsługuje. Nie współdziel kont między pracownikiem i agencją.

5. Potwierdź, że backup da się odtworzyć

Backup na tym samym serwerze nie chroni przed przejęciem hosta. Potrzebna jest kopia poza środowiskiem i test odtworzenia. Po incydencie czysta kopia musi pochodzić sprzed pierwszych śladów kompromitacji.

Co zrobić po znalezieniu podejrzanego pliku

  1. Ogranicz publiczny dostęp do strony i zabezpiecz kopię logów oraz plików do analizy.
  2. Nie usuwaj tylko jednego webshella. Załóż, że atakujący mógł dodać kolejne pliki, konto administratora albo zadanie cron.
  3. Odtwórz rdzeń i dodatki z zaufanych źródeł albo z czystej kopii. Nie kopiuj w ciemno całego starego wp-content.
  4. Zmień hasła do WordPressa, hostingu, SSH/FTP, bazy danych i panelu DNS. Unieważnij aktywne sesje.
  5. Oceń, czy doszło do dostępu do danych osobowych. Jeśli tak, uruchom procedurę obsługi naruszenia i ustal obowiązki zgłoszeniowe.

WAF i skaner WordPressa mogą pomóc w wykryciu części ataków, ale nie zastępują usunięcia podatnego kodu ani analizy po kompromitacji.

Źródła

  1. nvd.nist.gov › CVE 2018 25335
  2. nvd.nist.gov › CVE 2023 54352
  3. nvd.nist.gov › CVE 2026 7465
  4. nvd.nist.gov › CVE 2019 25745
  5. nvd.nist.gov › CVE 2023 54350

Zobacz też

Zobacz też