Krytyczna podatność w wersji PHP (PHP2Shell)
Czym to jest
20 i 21 października 2026 roku opublikowano dwa krytyczne błędy w samym rdzeniu języka PHP, prowadzone jako CVE-2026-109618 i CVE-2026-109619. W społeczności przyjęła się dla nich nazwa PHP2Shell. Pozwalają atakującemu uruchomić na serwerze własny kod, i to bez logowania oraz bez jakiejkolwiek interakcji administratora. Poziom zagrożenia oceniono na CVSS 9,2, czyli w najwyższym paśmie.
Nasz skan zauważył, że serwer Twojej strony w nagłówku X-Powered-By zgłasza się wersją PHP, która nie ma jeszcze poprawki. Samo ujawnienie wersji to drobiazg, krytyczna jest tu wersja, która się za nim kryje.
Dlaczego to problem
Nieuwierzytelnione zdalne wykonanie kodu to najgorszy rodzaj błędu. Atakujący nie potrzebuje żadnego hasła ani ważnego konta: wystarczy, że Twoja strona jest dostępna z internetu. Po udanym wykorzystaniu ma na serwerze takie same uprawnienia jak sama aplikacja, więc może odczytać bazę danych, podsunąć odwiedzającym złośliwy kod, rozsyłać spam z Twojego serwera albo włączyć go do botnetu.
Według dostępnych źródeł wykorzystywanie luki już trwa w praktyce, masowo i w sposób zautomatyzowany. Przy tak wysokim poziomie zagrożenia czas między publikacją a masowym skanowaniem internetu liczy się w godzinach, nie w dniach.
Które wersje są podatne
Poprawione są wersje 8.5.12, 8.4.27, 8.3.36, 8.2.35 i nowsze w swojej gałęzi. Podatne jest więc:
- wszystko, co jest niższe w tych gałęziach (np. 8.3.35, 8.2.34),
- oraz całe starsze gałęzie 8.1 i niższe, które mają już koniec wsparcia i w ogóle nie dostaną poprawki. Jedynym rozwiązaniem jest przejście na wspieraną gałąź.
Jak sprawdzić swoją wersję
Z wiersza poleceń serwera: php -v. U hostingodawcy zwykle w panelu administracyjnym (cPanel „Select PHP Version”, Plesk „PHP Settings” albo ustawienia strony u Twojego dostawcy). Z zewnątrz często zdradza ją właśnie nagłówek X-Powered-By:
curl -sI https://example.cz | grep -i x-powered-byJak to naprawić
Hosting współdzielony
W większości przypadków wystarczy w panelu hostingu przełączyć wersję PHP na najnowszą w danej gałęzi (np. z 8.2.x na ostatnią 8.2) i przeklikać aplikację, czy działa. Jeśli tej opcji nie widzisz albo nie jesteś pewien, napisz do wsparcia hostingu, że potrzebujesz poprawki na CVE-2026-109618.
Własny serwer (Debian / Ubuntu)
sudo apt update
sudo apt upgrade php8.3 php8.3-fpm # wstaw swoją gałąź
sudo systemctl restart php8.3-fpm
php -vWłasny serwer (RHEL / AlmaLinux)
sudo dnf upgrade php php-fpm
sudo systemctl restart php-fpm
php -vDocker
Zmień tag w Dockerfile na poprawioną wersję (np. php:8.3.36-fpm), zbuduj obraz ponownie i wdróż go. Nie polegaj na ruchomym tagu 8.3-fpm bez ponownego pulla, możesz mieć w cache starą warstwę.
Gdy nie można zaktualizować od razu
Dopóki nie masz poprawionej wersji, ogranicz skutki: włącz WAF (Cloudflare ma dla tej rodziny podatności regułę w managed ruleset), zablokuj dostęp do panelu administracyjnego po adresie IP i sprawdź logi, czy atak już się nie odbył. To jednak tylko tymczasowa łatka, nie rozwiązanie.
Jak sprawdzić, że jest zrobione
Po aktualizacji uruchom nowy skan na vulscan.app albo sprawdź wersję poleceniem php -v na serwerze. W nagłówku X-Powered-By nie powinna się już pojawiać podatna wersja, a najlepiej ukryj nagłówek całkowicie (expose_php = Off w php.ini).
Co może pójść nie tak
Przejście w obrębie jednej gałęzi (8.2.x na najnowszą 8.2) jest praktycznie bez ryzyka, poprawki wewnątrz gałęzi są wstecznie kompatybilne. Skok na wyższą gałąź (np. z 8.1 na 8.3) może ujawnić przestarzałe biblioteki lub deprecated funkcje, więc przetestuj go na kopii strony. Mimo to skok o gałąź wyżej jest lepszy niż pozostanie przy wersji z aktywnie wykorzystywaną luką.