Blog 24/7

mu-plugins

TAB. 1Hasłobez tłumaczenia
Po angielskumust-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 formywtyczki wymuszane · wtyczki wymuszone · must-use plugins · wtyczki obowiązkowe
KategoriaZł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:

CechaZwykła wtyczkamu-plugins
Włączanieaktywacja w paneluautomatycznie [1]
Wyłączaniew panelutylko usunięcie pliku [1]
Lista wtyczekdomyślna listaosobna sekcja Must-Use [1]
Kolejność ładowaniapo mu-pluginswcześniej, alfabetycznie [1]
Podkatalogiwczytywanepomijane [1]
Powiadomienia o aktualizacjisąbrak [1]
Haki aktywacyjnewykonywaneniewykonywane [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.

RYS. 1Wczytywanie kodu przy żądaniu

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.

TAB. 2

Przypisy

7
  1. [1] Must Use Plugins — Advanced Administration Handbook · WordPress.org
  2. [2] wp plugin list — WP-CLI Commands · WordPress.org
  3. [3] WordPress — wtyczki wymuszane · wpadmin.pl
  4. [4] Hackers Exploit WordPress mu-Plugins to Inject Spam and Hijack Site Images · The Hacker News
  5. [5] Hackers abuse WordPress MU-Plugins to hide malicious code · BleepingComputer
  6. [6] Hardening WordPress — Advanced Administration Handbook · WordPress.org
  7. [7] Przejęta strona internetowa — ścieżka postępowania · CERT Polska
TAB. 3

Hasła w tym artykule

15
TAB. 4

Linkują tutaj

9

Wszystkie kategorie → · Hasło w słowniku →

Blog 24/7
05.11CISA i FBI wzywają do zabezpieczenia sterowników chłodzenia po atakach w Europietherecord.media05.11Midnight Blizzard atakowała iPhone'y i Androidy przez zainfekowane strony w Europie i USAsecurityweek.com05.11APT29 kradła dane z iPhone'ów i Androidów przez przejęte i podrobione stronytherecord.media05.11Grupa APT29 przejęła skrypt Plerdy i atakowała niezałatane iPhone'y i Androidythehackernews.com05.11Microsoft wykrył 7,3 mld wiadomości phishingowych w III kwartale 2026microsoft.com05.11DigiCert ujawnia wyciek danych klientów i skanów dokumentów tożsamościbleepingcomputer.com05.11CWPdoor podmienia serwer cwpsrv w Control Web Panel i otwiera tylne wejście do Linuksableepingcomputer.com05.11Brytyjskie NCSC ostrzega, że narzędzia AI zwiększyły liczbę wykrywanych luk zero-daythehackernews.com05.11Skaner RootEvidence sprawdza starą lukę w Cisco IOS i dodaje nagłówki Opt-Outisc.sans.edu05.11Włamanie do portalu grantowego Norad, zagrożone dane 20 614 użytkownikówhelpnetsecurity.com