Wstecz Wstecz

PHP2Shell: dlaczego jedna luka w PHP zagraża niemal każdej stronie internetowej?

21 października zespół PHP wydał poprawki dla dwóch krytycznych podatności, które atakujący zaczęli wykorzystywać jeszcze przed ich ujawnieniem. Wyjaśniamy, czym jest PHP2Shell, których stron dotyczy i co warto zrobić już dziś.

9.2ocena CVSS v4.0, obie podatności
0logowań potrzebuje atakujący
5.4+najstarsza podatna wersja PHP
1,3 mln+potencjalnie podatnych serwerów

Większość wiadomości o bezpieczeństwie stron dotyczy konkretnej wtyczki lub platformy: aktualizuje się jeden komponent i problem znika. PHP2Shell jest inny. Podatności znajdują się w samym PHP – języku programowania, na którym działają WordPress, Joomla, Drupal, Magento, PrestaShop, Laravel i większość innych systemów stron internetowych. Według W3Techs PHP wykorzystuje niemal 70% stron, których język po stronie serwera jest znany.

Dlatego tym razem pytanie nie brzmi „czy używam podatnej wtyczki?”, lecz „która wersja PHP obsługuje moją stronę i czy została już załatana?”

Czym jest PHP2Shell?

PHP2Shell to nazwa, którą badacze nadali łańcuchowi dwóch podatności: CVE-2026-109618 i CVE-2026-109619. Zespół bezpieczeństwa PHP ocenił obie na 9.2 w skali CVSS v4.0. Krążąca początkowo w internecie ocena 10.0 była błędna, ale 9.2 to wciąż podatność krytyczna.

Nazwa opisuje skutek. Przez PHP atakujący uzyskuje „shell” – możliwość wykonywania poleceń na Państwa serwerze. Nie potrzebuje do tego ani hasła, ani konta na stronie: wystarczy jedno specjalnie przygotowane żądanie HTTP.

Badacze potwierdzili działające ataki na strony WordPress, Drupal, Joomla i Magento. Podatne są wszystkie sposoby, w jakie PHP obsługuje żądania internetowe:

  • PHP-FPM – najpopularniejszy na współczesnych serwerach;
  • Apache mod_php – tu zespół PHP ocenia ryzyko jako najwyższe;
  • php-cgi, LiteSpeed i FrankenPHP.

Dlaczego wtyczka bezpieczeństwa nie ochroni Państwa strony

Najważniejsza cecha PHP2Shell to moment, w którym następuje atak. PHP przetwarza dane żądania jeszcze przed uruchomieniem kodu strony. Dlatego żadne zabezpieczenie działające wewnątrz strony nawet nie dowiaduje się o ataku.

Droga żądania do Państwa strony

Proszę kliknąć przycisk i zobaczyć, gdzie zatrzymuje się atak. Po kliknięciu warstwy widać, co może ona zrobić.

  1. Specjalnie przygotowane żądanie HTTP POST. Z zewnątrz wygląda jak zwykły ruch i nie wymaga logowania ani konta.

  2. Może blokować znane wzorce ataków, ale tylko dla ruchu, który przez niego przechodzi. Nowe warianty mogą się prześlizgnąć, a jeśli serwer jest dostępny bezpośrednio przez adres IP, WAF jest całkowicie omijany.

  3. Przekazuje żądanie do PHP. Ograniczenie rozmiaru żądań na tym poziomie zmniejsza ryzyko jednej znanej metody ataku, ale nie usuwa podatności.

  4. Właśnie tu kryje się podatność. PHP odczytuje i przetwarza dane żądania przed uruchomieniem kodu strony, więc kod atakującego uruchamia się dokładnie na tym etapie.

  5. System strony nawet nie zdąży się uruchomić. Nie ma znaczenia, czy jest zaktualizowany.

  6. Nie mają czego zatrzymać: atak nastąpił, zanim te zabezpieczenia zadziałały.

Wniosek jest prosty: jedynym pełnym rozwiązaniem jest aktualizacja samego PHP. Wszystko inne to środki tymczasowe, które pomagają zyskać na czasie.

Dwie podatności, jeden łańcuch

Obie podatności są związane ze sposobem, w jaki PHP zarządza pamięcią podczas przetwarzania żądań. Właściciel strony nie musi znać szczegółów technicznych, ale warto wiedzieć, czym się różnią, bo tymczasowe środki ochrony są dla każdej inne.

Błąd braku pamięci · CVSS 9.2

Gdy PHP zabraknie pamięci zaraz po rozpoczęciu odczytu żądania POST, część jego wewnętrznych danych pozostaje niedokończona. Na końcu żądania PHP traktuje je tak, jakby były poprawne, choć ich zawartość kontroluje atakujący. To otwiera drogę do uruchomienia własnego kodu.

Mówiąc prościej: atakujący celowo „przeciąża” PHP i wykorzystuje bałagan, który po tym zostaje.

Środek tymczasowy: memory_limit=-1 na poziomie serwera i limit rozmiaru żądań na serwerze WWW.

Użycie zwolnionej pamięci · CVSS 9.2

Po jednym żądaniu w procesie PHP może pozostać odwołanie do już zwolnionej pamięci. Kolejne żądanie obsługiwane przez ten sam proces korzysta z tej pamięci. Pozwala to wykraść zawartość pamięci i uruchomić kod. Podatność jest osiągalna przez funkcję postępu przesyłania w sesji, która jest domyślnie włączona.

Mówiąc prościej: jedno żądanie zostawia „śmieci”, a kolejne je wykorzystuje.

Środek tymczasowy: session.upload_progress.enabled=0, a w PHP 8.5 także fatal_error_backtraces=0.

Jak to przebiegało

  1. 2024

    Podczas pierwszego od lat zewnętrznego audytu bezpieczeństwa PHP zespół zauważa pierwsze oznaki problemu z pamięcią, który później stał się CVE-2026-109618. Działającej metody ataku wtedy nie znaleziono, nic nie ogłoszono publicznie, a prace nad poprawką utknęły. PHP Foundation przyznała później, że to opóźnienie było błędem.

  2. 11 sierpnia 2026

    Badacze z Calif i OpenAI niezależnie od siebie zgłaszają zespołowi PHP, że ten sam problem pozwala uruchomić kod na serwerze. Poprawka staje się priorytetem.

  3. 17 października

    Amazon Threat Intelligence rejestruje w swojej sieci pułapek (honeypotów) pierwszą próbę wykorzystania – cztery dni przed publicznym ujawnieniem.

  4. 20 października

    Identyfikatory CVE wyciekają do sieci. Zespół PHP publikuje wcześniejsze powiadomienie o krytycznej aktualizacji bezpieczeństwa.

  5. 21 października

    Z powodu wycieku poprawione wersje 8.5.12, 8.4.27, 8.3.36 i 8.2.35 zostają wydane dzień wcześniej niż planowano. Cloudflare informuje o pierwszych atakach i wdraża tymczasowe reguły WAF.

  6. Teraz

    Ataków przybywa, przeprowadza je kilka różnych grup. Amazon zaleca szukanie oznak włamania od 17 października, a nie od dnia ujawnienia.

Co to oznacza dla Państwa: nawet jeśli PHP zostało zaktualizowane wczoraj, strona mogła zostać przejęta wcześniej. Poprawka zamyka drzwi, ale nie wyrzuca tego, kto już zdążył wejść.

Czy Państwa strona jest podatna?

Podatna jest każda strona obsługiwana przez niezałataną wersję PHP. Oto wersje, które mają już poprawkę:

Gałąź PHPBezpieczna wersja
PHP 8.58.5.12 lub nowsza
PHP 8.48.4.27 lub nowsza
PHP 8.38.3.36 lub nowsza
PHP 8.28.2.35 lub nowsza
PHP 7.4–8.1Brak oficjalnej poprawionej wersji. Należy zaktualizować do 8.2+ lub użyć pakietu poprawionego przez dostawcę.
PHP 5.4–7.3Niewspierane, poprawki nie będzie. Aktualizacja jest konieczna.

Sprawdzarka wersji PHP

Przykłady:
Gdzie znaleźć wersję PHP?
  • W panelu hostingu (cPanel, DirectAdmin, Plesk) – w sekcji „Wersja PHP” lub „Select PHP Version”.
  • WordPress: Narzędzia → Kondycja witryny → Informacje → Serwer.
  • U dostawcy hostingu – warto przy okazji zapytać, czy w pakiecie PHP zainstalowano już poprawkę.

Jeśli do sprawdzenia wersji tworzą Państwo plik phpinfo(), należy go usunąć zaraz potem – ujawnia wiele informacji o serwerze.

Dlaczego numer wersji może wprowadzać w błąd

  • Dystrybucje Linuksa często instalują poprawkę bez zmiany numeru wersji. „Stary” numer nie oznacza więc jeszcze, że PHP jest podatne.
  • PHP widoczne w wierszu poleceń może różnić się od tego, które faktycznie obsługuje stronę.
  • Na hostingu współdzielonym może działać jednocześnie kilka wersji PHP, a różne domeny mogą korzystać z różnych.

Test ryzyka w 30 sekund

Wystarczy odpowiedzieć na pięć pytań. Jeśli odpowiedź nie jest znana, proszę wybrać „Nie wiem” – to też ważna odpowiedź.

  1. Czy wiadomo, jaka dokładnie wersja PHP obsługuje Państwa stronę?

  2. Czy PHP zostało zaktualizowane po 21 października lub dostawca potwierdził instalację poprawki?

  3. Czy strona działa na PHP 8.1 lub starszym?

  4. Czy ktoś przejrzał już logi serwera i pliki od 17 października?

  5. Czy strona ma sklep internetowy, konta klientów lub dane osobowe?

Odpowiedzi: 0 z 5

Co można zrobić już dziś

  1. Ustalić dokładną wersję PHP, która obsługuje stronę, i porównać ją z tabelą powyżej.
  2. Zaktualizować PHP do poprawionej wersji lub poprosić o to dostawcę hostingu. Przed przejściem na nową gałąź warto wykonać kopię zapasową i sprawdzić, czy strona, motyw i wtyczki z nią działają.
  3. Jeśli aktualizacja od razu nie jest możliwa, włączyć środki tymczasowe zalecane przez zespół PHP (patrz niżej) i zrestartować wszystkie procesy PHP.
  4. Sprawdzić, czy nie doszło już do włamania: nieznane pliki PHP, nowi administratorzy, shelle uruchomione przez procesy strony, błędy wyczerpania pamięci „on line 0” w logach – od 17 października.
  5. Traktować WAF jako dodatkową warstwę, a nie poprawkę. Chroni on tylko ruch, który przez niego przechodzi.

Środki tymczasowe w konfiguracji PHP:

memory_limit = -1                  ; CVE-2026-109618
session.upload_progress.enabled = 0  ; CVE-2026-109619
fatal_error_backtraces = 0         ; tylko PHP 8.5

memory_limit należy ustawić tak, by aplikacje nie mogły go zmienić (np. przez php_admin_value w ustawieniach PHP-FPM). Ponieważ usuwa to limit pamięci PHP, zespół PHP zaleca zapewnić go na poziomie kontenera lub cgroup i ograniczyć rozmiar żądań na serwerze WWW. Te środki zmniejszają ryzyko, ale nie czynią PHP bezpiecznym.

Kiedy warto zwrócić się do specjalisty

Aktualizacja PHP często zajmuje tylko kilka minut. Trudniej odpowiedzieć na trzy pytania: czy poprawka naprawdę działa w PHP, które obsługuje Państwa stronę, czy strona będzie działać z nową wersją i czy ktoś nie wykorzystał podatności wcześniej.

Właśnie to sprawdza audyt PHP2Shell od Redfox Cloud. Stronę ręcznie sprawdza inżynier serwerów, a nie automatyczny skaner, a wyniki otrzymują Państwo na piśmie, zrozumiałym językiem. Nie trzeba być naszym klientem hostingowym.

Audyt PHP2Shell

29 € + VAT

  • Dokładna wersja PHP i SAPI obsługujące Państwa domenę
  • Czy dostawca zainstalował poprawkę w pakiecie PHP
  • Logi błędów i oznaki włamania od 17 października
  • Ryzyko związane z CMS i wtyczkami
  • Pisemny raport i wycena naprawy
Zamów za 29 €

Pełny audyt bezpieczeństwa

199 € + VAT

  • Wszystko, co obejmuje audyt PHP2Shell
  • Pakiety systemowe, jądro i znane CVE
  • Konfiguracja serwera, zapory, SSH, TLS i PHP
  • Błędy bezpieczeństwa w CMS, wtyczkach, motywach i własnym kodzie
  • Złośliwy kod, backdoory, nieznane zadania cron
Zamów za 199 €

Kontaktujemy się w ciągu 2 godzin roboczych od otrzymania płatności (pon.–pt. 9:00–18:00 czasu wileńskiego). Płatność jednorazowa. Wycenę naprawy przedstawiamy po audycie, a decyzja, czy prace wykonamy my, należy do Państwa.

Najczęściej zadawane pytania

Czy wystarczy, że dostawca hostingu zaktualizował PHP?

Jeśli dostawca potwierdza, że poprawka jest zainstalowana właśnie dla wersji PHP obsługującej Państwa stronę, najważniejszy krok jest już za Państwem. Jednak na hostingu współdzielonym często działa kilka wersji PHP, a poprawka nie usuwa śladów włamania, jeśli atak nastąpił wcześniej. Dlatego warto sprawdzić też logi od 17 października.

Czy Cloudflare lub inny WAF ochroni stronę?

Tylko tymczasowo i tylko częściowo. WAF blokuje znane wzorce ataków dla ruchu, który przez niego przechodzi. Jeśli serwer jest dostępny bezpośrednio przez adres IP lub pojawi się nowy wariant ataku, WAF nie pomoże. Problem rozwiązuje tylko aktualizacja PHP.

Strona działa na PHP 7.4, 8.0 lub 8.1. Co robić?

Dla tych wersji nie ma oficjalnych poprawionych wydań – zespół PHP opublikował jedynie poprawki kodu źródłowego dla osób, które same kompilują PHP. Najbezpieczniejsza droga to aktualizacja do PHP 8.2 lub nowszego. Wcześniej warto sprawdzić, czy strona i wtyczki będą działać z nową wersją.

Jak rozpoznać, że strona została już zhakowana?

Najczęstsze oznaki to nieznane pliki PHP, nowi administratorzy, dziwne przekierowania, polecenia uruchamiane przez procesy strony i powtarzające się błędy wyczerpania pamięci „on line 0” w logach błędów. Niektóre oznaki są widoczne tylko na poziomie serwera, więc samo oglądanie strony może ich nie ujawnić.

Czy można sprawdzić stronę kodem ataku opublikowanym w internecie?

Nie zalecamy tego. Działanie publicznie udostępnianego kodu nie jest potwierdzone, a taki kod bywa sam zainfekowany złośliwym oprogramowaniem. Bezpieczniej jest sprawdzić wersję PHP, status poprawki i logi.

Czy wiadomo, która wersja PHP obsługuje Państwa stronę w tej chwili – i czy nikt nie wykorzystał jej wcześniej?

Zamów audyt PHP2Shell

Źródła: PHP, PHP Foundation, Tenable, Datadog Security Labs, Help Net Security. Informacje według stanu na 22 października 2026 r.

Podobne artykuły

General questions Poradniki