mu-plugins
| Po angielsku | must-use plugins (mu-plugins) as malware hideout |
|---|---|
| Którą formą pisać | bez tłumaczenia Skrót, nazwa własna albo nazwa standardu — nie tłumaczymy w ogóle. |
| Inne formy | wtyczki wymuszane · wtyczki wymuszone · must-use plugins · wtyczki obowiązkowe |
| Kategoria | Złośliwe oprogramowanie |
mu-plugins to katalog wp-content/mu-plugins, w którym WordPress trzyma wtyczki typu must-use, zwane po polsku wtyczkami wymuszanymi [3]. Dokumentacja WordPressa opisuje je jako wtyczki zainstalowane w specjalnym katalogu wewnątrz folderu z treścią, włączane automatycznie na wszystkich witrynach instalacji [1]. Nie da się ich wyłączyć z panelu; żeby wyłączyć taką wtyczkę, trzeba usunąć jej plik z katalogu [1]. Te same cechy, które ułatwiają pracę administratorom, sprawiają, że katalog jest wygodną kryjówką dla złośliwego kodu.
Jak działa
WordPress sam wczytuje pliki PHP z katalogu mu-plugins. Nie ma kroku aktywacji: wtyczki nie trzeba, a nawet nie można aktywować, i działa ona tak długo, jak długo jej plik leży w katalogu [3]. Najważniejsze reguły według dokumentacji:
| Cecha | Zwykła wtyczka | mu-plugins |
|---|---|---|
| Włączanie | aktywacja w panelu | automatycznie [1] |
| Wyłączanie | w panelu | tylko usunięcie pliku [1] |
| Lista wtyczek | domyślna lista | osobna sekcja Must-Use [1] |
| Kolejność ładowania | po mu-plugins | wcześniej, alfabetycznie [1] |
| Podkatalogi | wczytywane | pomijane [1] |
| Powiadomienia o aktualizacji | są | brak [1] |
| Haki aktywacyjne | wykonywane | niewykonywane [1] |
WordPress szuka plików PHP bezpośrednio w katalogu mu-plugins; pliki w podkatalogach nie są dołączane automatycznie [1]. Położenie katalogu można zmienić stałymi WPMU_PLUGIN_DIR i WPMU_PLUGIN_URL w pliku wp-config.php [1].
Kolejność ładowania pokazuje schemat poniżej. Kod z mu-plugins działa, zanim ruszy jakakolwiek zwykła wtyczka, także wtyczka bezpieczeństwa.
Zastosowania
Wtyczki wymuszane mają uczciwe zastosowania. Polski poradnik wymienia własne typy wpisów i taksonomie, krótkie kody, funkcje, filtry i haki oraz fragmenty kodu, które mają przetrwać zmianę motywu [3]. Jest to też miejsce na kod, którego administrator nie powinien przypadkiem wyłączyć, bo w panelu nie ma do tego przycisku [1]. Wadą jest ręczna aktualizacja i problem z wtyczkami, które polegają na hakach aktywacyjnych [3].
Zagrożenia i skutki
Dla atakującego mu-plugins spełnia trzy warunki naraz. Plik uruchamia się sam, przy każdym żądaniu. Nie widać go na domyślnej liście wtyczek [1]. Nie da się go wyłączyć przyciskiem w panelu [1]. Dlatego po przejęciu strony katalog służy do utrwalenia dostępu.
Badacze firmy Sucuri po raz pierwszy zaobserwowali tę technikę w lutym 2025 roku, a jej użycie rosło w kolejnych tygodniach [5]. W marcu 2025 roku opisano trzy rodzaje plików znalezionych w tym katalogu [4]:
redirect.php— złośliwe przekierowanie odwiedzających na stronę udającą aktualizację przeglądarki, która namawia do instalacji programu kradnącego dane [4]. Skrypt pomijał roboty i zalogowanych administratorów [5].index.php— funkcje webshella, który pobiera i wykonuje zdalny kod PHP [4].custom-js-loader.php— wstrzykiwanie spamu, podmiana obrazków na stronie i przejmowanie linków wychodzących [4], czyli odmiana SEO spamu i podmiany treści strony (defacement).
Analityk Sucuri ocenił, że tak wiele infekcji w mu-plugins świadczy o tym, że atakujący celowo traktują ten katalog jako trwały przyczółek [5]. Plik w mu-plugins może też odtwarzać nieautoryzowane konto administratora albo tylną furtkę (backdoor) po każdym sprzątaniu, jeśli pozostanie niezauważony.
Jak się bronić
Samo istnienie katalogu nie jest niczym złym. Chodzi o to, by wiedzieć, co w nim leży, i zauważyć każdą zmianę.
Przegląd zawartości. W panelu wtyczki wymuszane widać w osobnej sekcji Must-Use na ekranie Wtyczki [1]. Z wiersza poleceń listę daje WP-CLI, które filtruje wtyczki po statusie must-use [2]. Ponieważ plik może nie mieć nagłówka wtyczki, warto obejrzeć też sam katalog na serwerze.
wp plugin list --status=must-use
ls -la wp-content/mu-plugins/
Wykrywanie zmian. Monitorowanie integralności plików powinno obejmować wp-content/mu-plugins. Nowy plik PHP w tym miejscu, którego nikt nie wgrywał, jest wskaźnikiem kompromitacji (IoC). CERT Polska radzi po incydencie szukać plików, których wcześniej nie było na serwerze, zwłaszcza umożliwiających zdalne wykonanie kodu [7].
Ograniczenie ścieżek wejścia. Wiadomości o kampanii wskazują jako typowe przyczyny podatne wtyczki i motywy oraz przejęte dane logowania administratorów [4]. Zalecenia to szybkie aktualizacje, usuwanie nieużywanych rozszerzeń i uwierzytelnianie wieloskładnikowe (MFA) dla kont uprzywilejowanych [5], a także WAF [4]. Dokumentacja WordPressa zaleca też uprawnienia plików, w których katalog wp-admin jest zapisywalny tylko przez konto użytkownika, a nie proces serwera [6].
Edytor w panelu. Stała DISALLOW_FILE_EDIT w pliku wp-config.php działa tak, jakby wszystkim użytkownikom odebrano uprawnienia edit_themes, edit_plugins i edit_files [6]. Wyłącza to edytor plików motywów i wtyczek, więc przejęte konto administratora nie zmieni przez niego kodu wtyczek. Nie blokuje to jednak zapisu plików przez inne luki.
Kopie. Dokumentacja zaleca regularną kopię zapasową (backup) plików i bazy MySQL, a niezależny zapis skrótów MD5 plików kopii zwiększa pewność, że nikt ich nie zmienił [6]. Porównanie katalogu mu-plugins z kopią sprzed incydentu szybko pokazuje dopisane pliki.
Sprzątanie. Przy czyszczeniu przejętej strony katalog mu-plugins trzeba sprawdzić wprost, bo nie wyświetla się tam, gdzie administrator zwykle szuka. CERT Polska zaleca też zmianę wszystkich haseł i kluczy, do których atakujący mógł mieć dostęp [7].
W WordPressie
mu-plugins to mechanizm samego WordPressa, a nie serwera ani PHP. Domyślne położenie to wp-content/mu-plugins [1], czyli katalog z treścią, który według dokumentacji ma być zapisywalny zarówno przez konto użytkownika, jak i przez proces serwera WWW [6]. Oznacza to, że błąd pozwalający zapisać plik w wp-content zwykle wystarcza też do umieszczenia pliku w mu-plugins. W sieci Multisite wtyczki wymuszane działają na wszystkich witrynach instalacji jednocześnie [1], więc jeden złośliwy plik dotyka całej sieci.
Przypisy
7- [1] Must Use Plugins — Advanced Administration Handbook · WordPress.org
- [2] wp plugin list — WP-CLI Commands · WordPress.org
- [3] WordPress — wtyczki wymuszane · wpadmin.pl
- [4] Hackers Exploit WordPress mu-Plugins to Inject Spam and Hijack Site Images · The Hacker News
- [5] Hackers abuse WordPress MU-Plugins to hide malicious code · BleepingComputer
- [6] Hardening WordPress — Advanced Administration Handbook · WordPress.org
- [7] Przejęta strona internetowa — ścieżka postępowania · CERT Polska
Hasła w tym artykule
15- wtyczka bezpieczeństwa
- złośliwe przekierowanie
- webshell
- SEO spam
- podmiana treści strony (defacement)
- nieautoryzowane konto administratora
- tylna furtka
- monitorowanie integralności plików
- wskaźnik kompromitacji (IoC)
- uwierzytelnianie wieloskładnikowe
- WAF
- uprawnienia plików
- edytor plików motywów i wtyczek
- kopia zapasowa
- czyszczenie przejętej strony