W skrócie
- Podatności:
CVE-2026-109618iCVE-2026-109619, publicznie znane jako PHP2Shell, opublikowane przez zespół bezpieczeństwa PHP 21 października 2026 r. - Poziom zagrożenia: krytyczny, każda z podatności oceniona na 9.2 (CVSS v4.0). Obie mogą umożliwić zdalne wykonanie kodu bez uwierzytelnienia.
- Podatne: instalacje PHP obsługujące żądania WWW. Badacze znaleźli podatne wydania sięgające wstecz do PHP 5.4.
- Rozwiązanie: zaktualizuj PHP. Projekt PHP podaje, że nie istnieją pełne środki zaradcze, a aktualizacja jest jedynym bezpiecznym wyjściem.
Czym są te podatności
Obie luki to błędy bezpieczeństwa pamięci w środowisku PHP, a nie w WordPressie, Drupalu, Laravelu czy innych aplikacjach na nim zbudowanych. Witryna może być narażona, nawet jeśli jej własny kod i wtyczki są w pełni aktualne.
- Uszkodzenie danych przy braku pamięci,
CVE-2026-109618: wyczerpanie pamięci może przerwać działanie PHP, gdy wewnętrzne dane żądania są zainicjalizowane tylko częściowo. Procedura porządkowania po żądaniu może wtedy potraktować te nieprawidłowe dane jako poprawne. - Nieaktualny stan żądania,
CVE-2026-109619: wewnętrzny stan należący do jednego żądania może przetrwać dłużej niż pamięć, na której się opiera. Późniejsze żądanie obsługiwane przez ten sam proces roboczy PHP może użyć tego nieaktualnego stanu, co może ujawnić pamięć procesu roboczego lub doprowadzić do wykonania kodu.
Badacze zademonstrowali zdalne wykonanie kodu bez uwierzytelnienia w WordPressie i Drupalu, a w przypadku pierwszej podatności także w Joomli. Narażona może być również minimalna aplikacja „Hello World” działająca w podatnym środowisku.
Kogo dotyczy
Według komunikatu PHP problemy dotyczą wszystkich instalacji PHP obsługujących żądania WWW, w tym PHP-FPM, Apache z mod_php, php-cgi, FrankenPHP i LiteSpeed. Największe ryzyko wiąże się z Apache z mod_php: zademonstrowany exploit przeprowadza atak nieuwierzytelnionym żądaniem, zanim zostanie uruchomiony jakikolwiek kod aplikacji.
PHP 8.1 i starsze wersje nie otrzymują już aktualizacji od projektu PHP. Komunikat zawiera odnośniki do minimalnych poprawek źródłowych przeniesionych do PHP 7.4, 8.0 i 8.1, ale starsze środowiska najlepiej przenieść na wspieraną wersję.
Poprawione wersje
Wcześniejsze wydania w każdej wspieranej gałęzi należy traktować jako podatne.
| Gałąź PHP | Podatne | Poprawka w |
|---|---|---|
| 8.5 | Wcześniejsze niż 8.5.12 | 8.5.12 |
| 8.4 | Wcześniejsze niż 8.4.27 | 8.4.27 |
| 8.3 | Wcześniejsze niż 8.3.36 | 8.3.36 |
| 8.2 | Wcześniejsze niż 8.2.35 | 8.2.35 |
Wsparcie PHP 8.2 kończy się 31 grudnia 2026 r.
Pakiety dystrybucji
Dystrybucje Linuksa otrzymały poprawki z wyprzedzeniem i publikują poprawione pakiety z własnymi numerami wersji. Pakiet dystrybucji może zawierać poprawkę, nawet jeśli jego wersja wygląda na starszą niż wydanie projektu PHP. Na przykład w Ubuntu 24.04 LTS poprawionym pakietem jest 8.3.6-0ubuntu0.24.04.13, a nie 8.3.36.
| Wydanie Ubuntu | Pakiet | Poprawiona wersja |
|---|---|---|
| 26.04 LTS | php8.5 | 8.5.4-0ubuntu1.5 |
| 24.04 LTS | php8.3 | 8.3.6-0ubuntu0.24.04.13 |
| 22.04 LTS | php8.1 | 8.1.2-1ubuntu2.28 |
Dokładne wersje pakietów sprawdź w komunikacie bezpieczeństwa swojej dystrybucji. Komunikat PHP prosi też użytkowników repozytorium remirepo o przejście na pakiety dystrybucji lub kompilację ze źródeł, ponieważ w dniu wydania to repozytorium nie miało aktualizacji.
Tymczasowe środki zaradcze
Jeśli nie możesz od razu przeprowadzić aktualizacji, komunikat PHP wymienia ustawienia, które ograniczają narażenie na określone ścieżki ataku. Nie zapewniają one bezpieczeństwa instalacji i należy je wprowadzić w php.ini, w puli PHP-FPM lub w konfiguracji serwera, a następnie ponownie uruchomić wszystkie procesy robocze PHP.
- Wyłącz śledzenie postępu przesyłania w sesji:
session.upload_progress.enabled = 0. Nie polegaj naini_set()ani na.user.iniw tym celu. - Usuń limit pamięci PHP za pomocą dyrektywy
memory_limit = -1, wymuszonej tak, aby aplikacje nie mogły jej nadpisać, a zamiast niego zastosuj limit pamięci kontenera lub cgroup. Nie opieraj się naRLIMIT_ASani naRLIMIT_DATA; mogą one uruchomić podatną ścieżkę kodu. - Ogranicz rozmiar żądań, na przykład
post_max_size = 8M, lub32Mw razie potrzeby przesyłania plików, oraz egzekwuj limity żądań na poziomie serwera WWW lub proxy. - W PHP 8.5 ustaw
fatal_error_backtraces = 0.
Ukrywanie błędów nie pomaga. Traktuj te ustawienia jako krótkie rozwiązanie przejściowe do czasu aktualizacji, a nie jako poprawkę.
Zapory aplikacji internetowych
Cloudflare wdrożył zarządzane reguły WAF dla PHP2Shell przed publicznym ujawnieniem podatności, także w planie bezpłatnym. WAF to przydatna dodatkowa warstwa ochrony na czas aktualizacji, ale zaobserwowano, że atakujący modyfikują ładunki, aby uniknąć wykrycia, a sama aktualizacja kodu witryny lub wtyczek nie usuwa luki w środowisku PHP. Zaktualizuj PHP, nawet jeśli korzystasz z WAF.
Po aktualizacji
- Uruchom ponownie PHP: uruchom ponownie PHP-FPM, Apache lub serwer aplikacji PHP, aby każdy proces roboczy załadował poprawiony kod.
- Sprawdź środowisko, które obsługuje witrynę: wersja PHP w wierszu poleceń może różnić się od wersji obsługującej żądania WWW, a na serwerach często działa równolegle kilka wersji PHP.
- Sprawdź każdy serwer i konto hostingowe: łatwo przeoczyć witryny testowe, stare instalacje i serwery pomocnicze.
- Przejrzyj limity: poprawka wprowadza twardy limit pamięci, po którego osiągnięciu proces jest kończony, dlatego przejrzyj ustawienia pamięci i rozmiaru żądań pod kątem prawidłowych, dużych żądań.
W przypadku hostingu zarządzanego poproś dostawcę o potwierdzenie, że działa już poprawione środowisko PHP.
Sygnały warte zbadania
Badacze wymieniają sygnały, którym warto przyjrzeć się bliżej. Same w sobie nie dowodzą, że serwer został zaatakowany.
- Nietypowo duże lub zniekształcone wartości
PHPSESSIDw plikach cookie. - Żądania multipart, po których pojawiają się błędy limitu pamięci lub powtarzające się odpowiedzi HTTP 500.
- Niewyjaśnione awarie procesów roboczych PHP.
Jeśli podejrzewasz włamanie, aktualizacja PHP nie usunie niczego, co atakujący mógł pozostawić. Wymaga to osobnego badania.
Jak możemy pomóc
Nasza weryfikacja ustala, które środowisko PHP faktycznie obsługuje Twoją witrynę, sprawdza stan poprawek dostawcy i daje Ci pisemne ustalenia z jasnym kolejnym krokiem. Na Twoim serwerze nic się nie zmienia, dopóki nie uzgodnimy z Tobą zakresu.
Źródła
- Komunikat bezpieczeństwa PHP, 21 października 2026 r.
- Podsumowanie badań PHP2Shell
- Komunikat bezpieczeństwa Ubuntu USN-8948-1
- Cloudflare: ochrona WAF przed podatnościami PHP
Zweryfikowano 22 października 2026 r. To podsumowanie ma charakter ogólnej informacji, a nie porady dotyczącej Twoich systemów. Najnowsze szczegóły znajdziesz w komunikacie PHP.