Dwie poważne luki w rdzeniu WordPressa mogą umożliwić atakującemu nieautoryzowany dostęp do bazy danych, a w określonych warunkach również uzyskanie dostępu do powłoki systemu operacyjnego. Dostępne jest już publiczne narzędzie wykorzystujące te błędy. Administratorzy powinni jak najszybciej zaktualizować CMS i sprawdzić zabezpieczenia serwera.

Dwie podatności w samym rdzeniu WordPressa
17 lipca udostępniono nowe wersje WordPressa zawierające poprawki dwóch podatności oznaczonych identyfikatorami CVE-2026-60137 oraz CVE-2026-63030. W przeciwieństwie do wielu wcześniejszych problemów dotyczących popularnego CMS-a, tym razem błędy występują w samym rdzeniu systemu, a nie wyłącznie w wybranych wtyczkach lub motywach.
Pierwsza luka, CVE-2026-60137, dotyczy podatności typu SQL injection, czyli możliwości wstrzyknięcia własnych fragmentów zapytań SQL. Druga, CVE-2026-63030, jest związana z obsługą REST API i ma znacznie poważniejsze konsekwencje w kontekście całego łańcucha ataku.
Zagrożone są następujące wersje WordPressa:
- 6.8.0-6.8.5,
- 6.9.0-6.9.4,
- 7.0.0-7.0.1.
Szczególnie niepokojące jest połączenie obu błędów. Wykorzystanie ich w odpowiedniej kolejności może doprowadzić do uzyskania nieautoryzowanego dostępu do bazy danych, a następnie do przejęcia kontroli nad aplikacją.
Dokumentacja techniczna podatności jest dostępna w oficjalnych repozytoriach projektu WordPress:
Publiczny exploit i możliwość uzyskania dostępu do powłoki
Sytuację komplikuje dostępność narzędzia demonstracyjnego wp2shell-poc, które pokazuje praktyczne wykorzystanie opisywanego łańcucha podatności.

Scenariusz ataku jest szczególnie niebezpieczny, ponieważ nie wymaga wcześniejszego posiadania konta w WordPressie. Według opisanego sposobu działania skrypt może najpierw uzyskać możliwość wykonywania zapytań do bazy danych, następnie utworzyć tymczasowe konto administratora, a później wykorzystać je do instalacji wtyczki zapewniającej dostęp do powłoki systemowej.
W ten sposób problem wykracza daleko poza samą aplikację internetową. Atakujący może uzyskać możliwość wykonywania poleceń w systemie operacyjnym z uprawnieniami użytkownika, na którym działa PHP lub serwer aplikacyjny.
Nie oznacza to automatycznego uzyskania uprawnień administratora Linuksa czy roota. Zakres dostępu zależy między innymi od konfiguracji serwera, uprawnień plików, izolacji procesów oraz dodatkowych zabezpieczeń. Mimo tych ograniczeń napastnik może mieć wystarczające możliwości, aby wykraść dane, zmodyfikować pliki strony, utrzymać dostęp do serwisu lub przeprowadzić rekonesans innych usług działających na tej samej maszynie.
Szczegóły techniczne obu błędów nie zostały początkowo szeroko ujawnione. Ograniczenie publikacji informacji ma uzasadnienie: administratorzy potrzebują czasu na wdrożenie poprawek, zanim szczegółowy opis podatności ułatwi jej masowe wykorzystywanie.
Nie oznacza to jednak, że zagrożenie pozostaje wyłącznie teoretyczne. Publicznie dostępny kod demonstracyjny znacząco obniża próg wejścia dla potencjalnych atakujących.
Dlaczego podatności w rdzeniu są szczególnie groźne?
WordPress należy do najpopularniejszych systemów zarządzania treścią na świecie. Jego popularność sprawia, że stanowi atrakcyjny cel zarówno dla cyberprzestępców, jak i badaczy bezpieczeństwa.
Wiele luk zgłaszanych w przeszłości dotyczyło konkretnych wtyczek lub motywów. W takich przypadkach ryzyko można często ograniczyć przez usunięcie podatnego komponentu albo rezygnację z określonej funkcjonalności.
W tym przypadku sytuacja jest inna. Podatności dotyczą rdzenia WordPressa, a więc komponentu wspólnego dla wielu instalacji. Każda witryna działająca na jednej z wymienionych podatnych wersji może być narażona, niezależnie od tego, z jakich dodatkowych wtyczek korzysta.
Nie ma przy tym znaczenia, czy jest to niewielki blog, strona firmowa, portal informacyjny czy bardziej rozbudowany serwis. Konsekwencje skutecznego ataku mogą obejmować utratę poufności danych, przejęcie kont, zmianę treści, instalację złośliwego oprogramowania oraz wykorzystanie serwera do dalszych działań.
Problem dotyczy również środowisk wykorzystujących Bedrock, czyli alternatywną dystrybucję WordPressa z inną organizacją katalogów i obsługą konfiguracji opartej na pliku .env. Zmiana struktury projektu nie eliminuje błędów występujących w podatnym kodzie rdzenia.
Aktualizacja WordPressa to priorytet
Najważniejszym działaniem jest wdrożenie wersji zawierającej poprawki obu podatności. W przypadku omawianego problemu warto odnieść się do wydania 7.0.2 i odpowiednich aktualizacji gałęzi 6.8 oraz 6.9, zgodnie z oficjalnymi informacjami projektu.
Aktualizacje WordPressa mogą być instalowane automatycznie. W środowiskach produkcyjnych często jednak wyłącza się ten mechanizm, aby zachować kontrolę nad terminem wdrożenia, przeprowadzić testy zgodności i uniknąć niespodziewanych przestojów.
W takiej sytuacji nie należy odkładać aktualizacji na nieokreśloną przyszłość. Najlepiej przeprowadzić ją w najbliższym możliwym oknie serwisowym, po wykonaniu kopii zapasowej bazy danych i plików aplikacji.
Przed wdrożeniem warto również sprawdzić, czy kod rdzenia WordPressa nie został wcześniej zmodyfikowany. Niestandardowe zmiany w plikach systemowych mogą powodować konflikty z aktualizacją i utrudniać ocenę, czy wszystkie poprawki zostały prawidłowo zastosowane.
Administratorzy mogą prześledzić zmiany w kodzie źródłowym na stronie commitów dla WordPressa 7.0.2.
Po aktualizacji należy sprawdzić wersję działającego systemu, poprawność ładowania strony, działanie panelu administracyjnego i najważniejszych wtyczek. Samo uruchomienie mechanizmu aktualizacji nie zastępuje weryfikacji jej rezultatu.
Co zrobić, jeśli aktualizacja nie jest możliwa?
Jeżeli z przyczyn technicznych nie można natychmiast zaktualizować WordPressa, należy rozważyć dodatkowe ograniczenia na poziomie serwera HTTP, reverse proxy, load balancera lub zapory aplikacyjnej WAF.
W szczególności warto ograniczyć dostęp do następujących ścieżek:
/wp-json/batch/v1rest_route=/batch/v1
Druga postać ma znaczenie przede wszystkim w konfiguracjach wykorzystujących parametr rest_route, między innymi wtedy, gdy witryna nie korzysta ze standardowej struktury bezpośrednich odnośników.
Takie reguły powinny być wdrażane zgodnie z konfiguracją konkretnej instalacji. Zanim zablokujemy endpoint, trzeba sprawdzić, czy nie korzystają z niego inne elementy witryny. Ograniczenie dostępu do wskazanych ścieżek należy traktować jako rozwiązanie tymczasowe, a nie zamiennik poprawki bezpieczeństwa.
Dodatkową warstwę ochrony mogą zapewnić reguły WAF. Cloudflare poinformował o wdrożeniu odpowiednich zabezpieczeń dla opisywanych podatności. Jeśli ruch do WordPressa przechodzi przez tę usługę, ryzyko udanego ataku może być mniejsze.
Nie wolno jednak traktować ochrony WAF jako gwarancji bezpieczeństwa. Jeśli serwer źródłowy jest dostępny bezpośrednio z Internetu, atakujący może próbować ominąć warstwę pośredniczącą. Warto zweryfikować rekordy DNS, dostępność adresu IP serwera źródłowego i reguły zapory sieciowej. Najlepiej dopuścić ruch HTTP i HTTPS do serwera wyłącznie z zaufanych adresów pośredniczących, jeśli pozwala na to architektura infrastruktury.
Więcej informacji: Cloudflare – informacje o podatnościach WordPressa.
Hardening PHP i ograniczenie skutków ataku
Oprócz aktualizacji warto wykorzystać tę sytuację do przeglądu zabezpieczeń PHP i konfiguracji całego serwera.
Przykładowe narzędzie wp2shell wykorzystuje funkcje PHP umożliwiające uruchamianie poleceń systemowych, takie jak:
exec(),shell_exec(),system(),passthru().
Jeżeli aplikacja nie wymaga tych funkcji, można rozważyć ich wyłączenie za pomocą dyrektywy disable_functions w konfiguracji PHP, na przykład w pliku php.ini używanym przez PHP-FPM.
Przykładowa konfiguracja:
disable_functions = exec,shell_exec,system,passthru
Przed wdrożeniem takiej zmiany należy przeanalizować wymagania aplikacji oraz pozostałych serwisów korzystających z danego środowiska PHP. Niektóre narzędzia administracyjne, procesy automatyzacji lub wtyczki mogą polegać na tych funkcjach.
Ograniczenie ich dostępności może uniemożliwić uruchomienie określonych elementów webshella, ale nie naprawia podatności w WordPressie. Przykładowo zablokowanie shell_exec() może spowodować błąd w skrypcie wykorzystującym tę funkcję, nie oznacza jednak, że atakujący nie znajdzie innej drogi wykorzystania błędu.
Warto również zadbać o:
- uruchamianie PHP z osobnymi uprawnieniami dla poszczególnych witryn;
- ograniczenie praw zapisu do katalogów, w których nie powinny być modyfikowane pliki;
- izolację aplikacji od pozostałych usług i użytkowników systemowych;
- regularne kopie zapasowe przechowywane poza serwerem produkcyjnym;
- monitorowanie logów Apache lub Nginx, PHP-FPM i systemu;
- kontrolę zmian w plikach WordPressa, wtyczkach i motywach;
- ograniczenie uprawnień konta bazodanowego do niezbędnego minimum.
Z punktu widzenia administratora Linuksa najważniejsza jest zasada minimalnych uprawnień. Jeżeli proces PHP zostanie przejęty, jego możliwości powinny być możliwie mocno ograniczone.
Jak sprawdzić, czy serwer nie został już zaatakowany?
W przypadku publicznie dostępnego exploita samo zainstalowanie poprawki nie wystarcza, aby wykluczyć wcześniejsze naruszenie bezpieczeństwa. Jeżeli serwer działał na podatnej wersji WordPressa, należy przeanalizować jego stan.
W pierwszej kolejności warto zweryfikować:
- Konta administratorów WordPressa. Sprawdź, czy nie pojawiły się nieznane konta, w szczególności utworzone w czasie, gdy serwis był podatny.
- Wtyczki i motywy. Poszukaj nieznanych komponentów, podejrzanych plików PHP i wtyczek, których instalacji nikt nie zatwierdzał.
- Logi serwera WWW. Zwróć uwagę na nietypowe żądania do
/wp-json/batch/v1, parametryrest_routeoraz powiązane błędy i nietypowe odpowiedzi serwera. - Logi PHP-FPM. Błędy dotyczące funkcji uruchamiających polecenia systemowe mogą pomóc ustalić, czy próbowano uruchomić podejrzany kod.
- Procesy i zadania systemowe. Sprawdź nieznane procesy, zadania cron, nowe klucze SSH oraz inne mechanizmy mogące zapewniać trwały dostęp.
- Pliki i konfigurację. Porównaj zawartość rdzenia WordPressa z zaufaną wersją i sprawdź zmiany w konfiguracji serwera oraz plikach
.htaccess,wp-config.phpi.env, jeśli są używane.
Przykładowe polecenie pozwalające sprawdzić ostatnie wpisy w logu Apache może wyglądać następująco:
sudo tail -n 200 /var/log/apache2/access.log
Lokalizacja logów zależy od dystrybucji Linuksa i konfiguracji serwera. W systemach opartych na RHEL, CentOS czy AlmaLinux mogą one znajdować się w innych katalogach.
Warto pamiętać, że brak podejrzanych wpisów w jednym pliku nie oznacza, że ataku nie było. Logi mogły zostać usunięte, zmodyfikowane albo nie zawierać wystarczających informacji. W przypadku wykrycia oznak przejęcia serwera należy zabezpieczyć dowody, ograniczyć dostęp napastnika i przeprowadzić pełną analizę incydentu. Samo usunięcie podejrzanej wtyczki nie daje pewności, że nie pozostały inne mechanizmy utrzymywania dostępu.
Nie tylko WordPress. Lekcja dla administratorów Linuksa
Opisywany incydent pokazuje, jak poważne konsekwencje może mieć pojedynczy błąd w popularnej aplikacji internetowej. Połączenie podatności w API i bazie danych może prowadzić do przejęcia kontroli nad aplikacją, a w sprzyjających warunkach także do wykonywania poleceń na serwerze.
Nie oznacza to, że WordPress należy automatycznie uznać za niebezpieczny system. Jego popularność, rozbudowany ekosystem i dostępność kodu sprawiają jednak, że pozostaje atrakcyjnym celem dla atakujących. Dlatego utrzymanie aktualnej wersji, kontrola komponentów i odpowiednie zabezpieczenie środowiska są niezbędne.
Warto również pamiętać, że dodatkowe mechanizmy ochronne nie zastąpią naprawienia błędu w aplikacji. WAF, ograniczenie funkcji PHP, separacja użytkowników i restrykcyjne reguły zapory mogą utrudnić atak lub zmniejszyć jego skutki, ale podstawą pozostaje usunięcie podatności.
Jeżeli prowadzimy prosty blog lub niewielką stronę firmową, warto regularnie oceniać, czy WordPress wraz z rozbudowanym zestawem wtyczek nadal jest najlepszym wyborem. W niektórych przypadkach alternatywny CMS, taki jak Ghost, może zapewnić prostszą architekturę i lepiej odpowiadać rzeczywistym potrzebom serwisu.
Najważniejszy wniosek jest jednak prosty: aktualizacje, minimalizacja uprawnień i hardening serwera nadal pozostają jednymi z najskuteczniejszych sposobów ograniczania ryzyka. Nawet jeśli nie możemy natychmiast wdrożyć poprawki, możemy zastosować dodatkowe zabezpieczenia, które utrudnią wykorzystanie podatności. Nie należy jednak odkładać aktualizacji ani zakładać, że brak widocznych oznak ataku oznacza, że serwer jest bezpieczny.