Kiedy 21 października zespół rozwijający język PHP wypuścił awaryjne aktualizacje bezpieczeństwa łatające dwie krytyczne podatności — ochrzczone wspólnie mianem PHP2Shell (CVE-2026-109618 oraz CVE-2026-109619) — w świecie webmasterów zawrzało. Obie luki otrzymały bardzo wysoką ocenę 9.2 na 10 w skali CVSS v4.0 i teoretycznie pozwalają na zdalne wykonanie kodu (RCE) bez żadnego uwierzytelniania. Mówiąc krótko: atakujący nie musi znać Twojego hasła do panelu /wp-admin/, by przejąć serwer.
Od publikacji łatek minął dokładnie tydzień. Zespół Wordfence (chroniący ponad 5 milionów witryn na świecie) opublikował właśnie raport podsumowujący pierwsze 7 dni obserwacji. Wnioski są fascynujące: z jednej strony mamy dziesiątki tysięcy zautomatyzowanych prób włamań, z drugiej — ani jednego potwierdzonego przypadku przejęcia strony na WordPressie za pomocą tej luki.
Jak to możliwe i dlaczego mimo tych dobrych wieści nie możesz zignorować tematu? Przełóżmy raport Wordfence na nasze, polskie realia hostingowe.
Co dokładnie mówi raport Wordfence? Fakty zamiast paniki
W branży cyberbezpieczeństwa bardzo łatwo pomylić „masowe skanowanie i próby ataków” z „masowym przejęciem serwerów”. Dane zebrane przez Wordfence w dniach 23–27 października pokazują ten kontrast jak na dłoni:
- Zero potwierdzonych włamań na WordPressa: Do 28 października zespoły reagowania na incydenty i czyszczenia stron Wordfence nie odnotowały ani jednej witryny WordPress, która zostałaby skutecznie zainfekowana przez PHP2Shell.
- 77 600 zablokowanych i przeanalizowanych żądań ataku: Brak udanych włamań nie oznacza jednak, że przestępcy śpią. Dedykowana reguła monitorująca wykryła blisko 78 tysięcy prób wykorzystania luki z ponad 2 000 unikalnych adresów IP. Co ciekawe, pierwsze ataki na honeypoty (serwery-pułapki) i ruch ze wyspecjalizowanych narzędzi pojawiły się jeszcze 4 godziny przed oficjalnym ujawnieniem luk 21 października.
- Na co polują boty? Analiza ładunków (payloadów) wysyłanych przez atakujących pokazuje, że skrypty nie bawią się w subtelności. Poza komendami sprawdzającymi, czy serwer jest podatny, boty próbują:
- Wykraść hasła do bazy danych i klucze API bezpośrednio z plików
wp-config.phporaz.env. - Wrzucić pliki z tylną furtką (backdoorem) do katalogów
wp-content/uploads/,plugins/lubthemes/, żeby utrzymać dostęp nawet po załataniu serwera. - Pobrać i uruchomić zewnętrzny złośliwy kod.
- Wykraść hasła do bazy danych i klucze API bezpośrednio z plików
Skoro boty tak intensywnie bombardują strony, a luka ma ocenę 9.2/10, to dlaczego WordPressy nie padają jak domki z kart?
Dlaczego PHP2Shell tak trudno wykorzystać „w ciemno”?
Żeby to zrozumieć, trzeba zajrzeć pod maskę. PHP2Shell to nie jest luka w samym WordPressie, motywie czy wtyczce. To dwie luki na poziomie pamięci samego interpretera PHP:
- Pierwsza dotyczy błędnej obsługi sytuacji, w której żądanie przekracza dostępny limit pamięci (Out of Memory).
- Druga polega na tym, że proces PHP potrafi zachować w pamięci dane z zakończonego już żądania, które kolejne żądanie może następnie nadużyć.
W sterylnym laboratorium badaczy przygotowany exploit faktycznie pozwalał wykonać dowolny kod na specjalnie skonfigurowanym środowisku PHP. Problem atakujących polega jednak na tym, że w prawdziwym internecie nie ma dwóch identycznych serwerów.
Jak wskazują testy Wordfence (oraz niezależne analizy firm Wiz i Hacktron), skuteczność exploita rozbija się o kilka barier:
- Mechanizm ASLR (Address Space Layout Randomization): Współczesne systemy Linux losują miejsca w pamięci RAM, w których zapisywane są dane programu. Atakujący strzela więc „po omacku” — zamiast wstrzyknąć swój kod w dokładny adres pamięci, najczęściej trafia w złe miejsce.
- Specyfika konfiguracji serwera: Sposób kompilacji PHP, włączone rozszerzenia (moduły), ustawiony
memory_limit, a nawet sposób obsługi procesów sprawiają, że ten sam exploit, który na jednym serwerze daje pełny dostęp, na standardowej, produkcyjnej konfiguracji po prostu zawiesza pojedynczy proces roboczy PHP (crash), nie wyrządzając większej szkody.
Gdzie zatem ataki się udały? Jak donosi raport, potwierdzone przypadki poza honeypotami dotyczyły m.in. wyspecjalizowanych urządzeń brzegowych (zapór sieciowych, gdzie architektura oprogramowania jest w 100% powtarzalna i znana atakującemu, co pozwoliło precyzyjnie dostroić exploit).
Wniosek dla nas: Trudność w stworzeniu „uniwersalnego” exploita kupiła właścicielom stron i administratorom bezcenny czas. Nie jest to jednak tarcza na zawsze — cyberprzestępcy cały czas modyfikują swoje narzędzia.
Co to oznacza dla polskiego właściciela strony na WordPressie?
Najważniejsza rzecz, którą musi zrozumieć każdy właściciel strony: zielona ikonka w panelu WordPressa informująca, że „Wszystkie wtyczki, motywy i WordPress są aktualne”, w przypadku PHP2Shell nie daje żadnej ochrony.
WordPress działa na silniku PHP zainstalowanym na serwerze. Aktualizacja WordPressa nie aktualizuje wersji PHP. Co więcej, w polskich realiach większość małych i średnich firm korzysta z hostingu współdzielonego (często opartego o serwer LiteSpeed / OpenLiteSpeed lub Apache z PHP-FPM, zarządzanego przez DirectAdmin lub cPanel).
Według oficjalnego komunikatu twórców PHP, podatny jest każdy sposób serwowania stron przez PHP — w tym PHP-FPM, Apache (mod_php), php-cgi, FrankenPHP oraz tak popularny w Polsce LiteSpeed.
Które wersje PHP są bezpieczne?
Luki zostały załatane w wersjach:
- PHP 8.5.12
- PHP 8.4.27
- PHP 8.3.36
- PHP 8.2.35
(Uwaga: jeśli Twój hosting lub dystrybucja systemu Linux stosuje tzw. backporting łatek bezpieczeństwa, sam numer wersji widoczny w panelu może być niższy, ale łatka może być już wgrana — o tym za chwilę).
Jak sprawdzić swoją stronę w 30 sekund bez wiedzy technicznej?
- Zaloguj się do swojego panelu WordPress (
/wp-admin/). - Przejdź do zakładki Narzędzia → Stan witryny (Site Health), a następnie kliknij kartę Informacje na górze ekranu.
- Rozwiń sekcję Serwer i sprawdź pozycję Wersja PHP.
Co widzisz w „Stanie witryny”? Co to oznacza w praktyce? Co należy zrobić?
8.2.35, 8.3.36, 8.4.27, 8.5.12 (lub nowsze) Twój serwer korzysta z oficjalnie załatanej wersji PHP. Możesz spać spokojnie (pod warunkiem, że procesy PHP zostały zrestartowane po aktualizacji).
8.2.x, 8.3.x, 8.4.x (ale z niższą końcówką, np. 8.3.14) Korzystasz z dobrej gałęzi PHP, ale Twój hosting nie zaktualizował jeszcze podwersji lub używa łatanych paczek systemowych (backportów). Wyślij krótkie zapytanie do supportu hostingu (wzór poniżej).
8.1, 8.0, 7.4 lub starsze Używasz wersji PHP, która nie dostaje już oficjalnych poprawek od twórców języka. Pilne: Przełącz stronę w panelu hostingu na PHP 8.2 lub 8.3 (chyba że Twój hosting potwierdzi komercyjne łatki z CloudLinux HardenPHP).
Gotowiec do wysłania na support Twojego hostingu
Jeśli korzystasz z hostingu współdzielonego lub zarządzanego i widzisz starszą podwersję PHP, nie musisz zgadywać. Skopiuj i wyślij do biura obsługi klienta tę wiadomość:
Dzień dobry,
chciałbym upewnić się w kwestii bezpieczeństwa mojego konta hostingowego.
Czy usługa PHP obsługująca moje strony została już załatana pod kątem luk PHP2Shell (CVE-2026-109618 oraz CVE-2026-109619) i czy procesy PHP zostały po tej aktualizacji zrestartowane?
Pozdrawiam
Perspektywa administratora wielu stron WP, agencji i właścicieli VPS-ów
Jeśli zarządzasz dziesiątkami stron klientów albo utrzymujesz własne serwery VPS / dedykowane, raport Wordfence niesie ze sobą cztery bardzo konkretne lekcje operacyjne:
1. Pułapka „zapomnianych” stron i środowisk stagingowych
W agencjach produkcyjne strony głównych klientów są zazwyczaj zadbane. Ale co z subdomenami typu nowa.domena.pl, test.domena.pl albo starym landing page'em z kampanii sprzed trzech lat, który leży w sąsiednim katalogu na tym samym koncie hostingowym i ma w .htaccess lub MultiPHP ustawione na sztywno inne PHP? Jeśli wszystkie witryny współdzielą jednego użytkownika systemowego (brak izolacji kont), przejęcie zapomnianego stagingu oznacza dostęp do plików głównej strony. Przejrzyj wszystkie vhosty i subdomeny.
2. Sam apt upgrade nie wystarczy — pamiętaj o restarcie procesów!
Wordfence bardzo mocno podkreśla jeden detal techniczny, o którym w pośpiechu zdarza się zapomnieć: sama instalacja zaktualizowanych paczek PHP na serwerze nie usuwa podatności z aktualnie działających procesów w pamięci RAM.
Po aktualizacji na własnym VPS-ie musisz zrestartować usługę obsługującą PHP (np. systemctl restart php8.3-fpm, apache2 lub lsws), aby żaden stary proces roboczy (worker) nie działał dalej na podatnym kodzie. Jeśli używasz kontenerów Docker — musisz przebudować i wdrożyć obrazy na nowo.
3. Sprawdź ASLR na swoich serwerach Linux
Skoro to właśnie losowanie przestrzeni adresowej (ASLR) ratuje dziś większość serwerów przed działającymi exploitami PHP2Shell, upewnij się, że na żadnym z Twoich VPS-ów nie zostało ono wyłączone (np. podczas dawnego debugowania). Wykonaj w terminalu:
Bash
cat /proc/sys/kernel/randomize_va_spacePrawidłowy wynik to 2 (pełna randomizacja). Jeśli widzisz 0 lub 1, natychmiast przywróć wartość 2 w sysctl.
4. Audyt pod kątem kolejnej luki: CVE-2026-115560
W osi czasu raportu Wordfence pojawia się jeszcze jedna ważna wzmianka z 23 października: projekt PHP ujawnił osobną, niezałataną jeszcze lukę (CVE-2026-115560), dla której udostępniono obejście konfiguracyjne. To najlepszy dowód na to, że obecna fala audytów bezpieczeństwa kodu źródłowego PHP jeszcze się nie skończyła i w najbliższych tygodniach warto trzymać rękę na pulsie kolejnych wydań punktowych.
Podsumowanie: Chłodna głowa, ale szybkie działanie
Historia z PHP2Shell to doskonałe studium przypadku pokazujące, jak działa współczesne bezpieczeństwo WordPressa:
- Nie wpadaj w panikę na widok nagłówków o „końcu świata” — architektura współczesnych serwerów (ASLR, izolacja, WAF) skutecznie utrudniła masowe ataki w pierwszych dniach od ujawnienia luki.
- Nie lekceważ zagrożenia tylko dlatego, że dotąd nie potwierdzono przejęcia WordPressa — prawie 78 tysięcy prób ataków w kilka dni pokazuje, że botnety już skanują polskie i światowe serwery w poszukiwaniu plików
wp-config.php. - Zadbaj o fundamenty — sprawdź wersję PHP, pozbądź się archaicznych gałęzi 7.x / 8.0 / 8.1 tam, gdzie to możliwe, i upewnij się u swojego dostawcy hostingu (lub na własnym VPS-ie), że łatki zostały wdrożone, a procesy PHP zrestartowane.