W PHP wykryto dwie krytyczne luki w zabezpieczeniach. Nazwano je PHP2Shell. Umożliwiają one atakującym uruchomienie własnego kodu na serwerze. Nie potrzebują do tego hasła.
Luki zostały załatane 21 października 2026 roku. Ataki już trwają. Jeśli na Twoim serwerze działa strona oparta na PHP, zaktualizuj PHP jeszcze dziś. Poniżej znajdziesz prostą instrukcję, której wykonanie zajmie od 10 do 15 minut.
Co się stało?
PHP działa jak kelner w restauracji. Gość (przeglądarka) składa zamówienie. Kelner (PHP) zanosi je do kuchni (serwera) i przynosi rezultat — stronę internetową.
Wyobraź sobie teraz dwie sytuacje.
Pierwsza luka (CVE-2026-109618). Kelner niesie zbyt ciężką tacę i upuszcza ją po drodze. Następnie zbiera odłamki i przez pomyłkę uznaje je za całe naczynia. Podobnie działa PHP: gdy zabraknie mu pamięci, pozostawia niekompletne dane. Atakujący może celowo wywołać taką sytuację i wstrzyknąć własny kod.
Druga luka (CVE-2026-109619). Gość wyszedł, ale na stole zostały jego rzeczy. Kelner ich nie posprzątał. Kolejny gość siada przy tym stole i może z nich skorzystać. Podobnie działa PHP: po jednym żądaniu w pamięci pozostają „cudze” dane. Kolejne żądanie może je odczytać lub wykorzystać do ataku.
Obie luki otrzymały ocenę zagrożenia 9,2 na 10. To bardzo wysoki poziom.
Kogo to dotyczy?
Wszystkich, którzy mają na serwerze stronę internetową lub usługę działającą w oparciu o PHP. Na przykład:
WordPress, WooCommerce, Joomla, Drupal, OpenCart;
1C-Bitrix, Magento, Laravel;
phpMyAdmin, Nextcloud, fora i strony tworzone na zamówienie;
panele zarządzania, takie jak ISPmanager, cPanel, aaPanel i HestiaCP.
Podatne są wszystkie wersje PHP od 5.4 do 8.5.11. Nie ma znaczenia, w jaki sposób PHP współpracuje z serwerem WWW — przez PHP-FPM, Apache (mod_php), LiteSpeed czy w inny sposób. Najbardziej zagrożone są strony korzystające z Apache z mod_php.
Jeśli nie wiesz, czy korzystasz z PHP, prawdopodobnie tak. Około 70% stron internetowych działa w oparciu o PHP.
Jak poważne jest zagrożenie?
Bardzo poważne. Oto, co już wiadomo:
pierwsze próby ataków zauważono 17 października, cztery dni przed opublikowaniem poprawek;
po 21 października liczba prób wzrosła z dziesiątek tysięcy do milionów w ciągu jednej doby;
do ataków dołączył botnet Mirai. To sieć zainfekowanych urządzeń, która automatycznie wyszukuje podatne serwery w całym internecie.
Dobra wiadomość: badacze informują, że większość publicznie dostępnych exploitów nie działa jeszcze przy standardowej konfiguracji. Nie oznacza to jednak, że można czekać.
Wyobraź sobie, że dowiadujesz się, że zamek w drzwiach wejściowych do Twojego budynku jest zepsuty. Złodzieje jeszcze nie weszli. Czy będziesz czekać, aż to zrobią? Tutaj sytuacja wygląda podobnie. Boty już sprawdzają każdy serwer w internecie. Pytanie tylko, kiedy przyjdzie kolej na Twój.
Sprawdź wersję PHP
Połącz się z serwerem przez SSH i wykonaj polecenie:
php -v
W odpowiedzi zobaczysz wiersz w rodzaju PHP 8.3.30 (cli). Porównaj swoją wersję z tabelą.
| Twoja gałąź PHP | Bezpieczna wersja |
|---|---|
| 8.5 | 8.5.12 lub nowsza |
| 8.4 | 8.4.27 lub nowsza |
| 8.3 | 8.3.36 lub nowsza |
| 8.2 | 8.2.35 lub nowsza |
| 8.1 i starsze | Brak oficjalnej poprawki — zobacz sekcję poniżej |
Ważne: na serwerze może być zainstalowanych kilka wersji PHP. Polecenie
php -vpokazuje tylko jedną z nich. Strona może korzystać z innej. Wszystkie uruchomione wersje możesz sprawdzić w ten sposób:
systemctl list-units --type=service | grep php
Jeśli numer wersji nie zmienił się po aktualizacji, nie zawsze oznacza to problem. Ubuntu, Debian, AlmaLinux i inne systemy często wprowadzają poprawkę do starszej wersji pakietu. Numer pozostaje taki sam, ale luka jest już załatana. Możesz to sprawdzić w dzienniku zmian pakietu.
Dla Ubuntu i Debiana:
zgrep -E 'CVE-2026-10961[89]' /usr/share/doc/php*-common/changelog.Debian.gzDla AlmaLinux, Rocky Linux i CentOS Stream:
rpm -q --changelog php-common | grep -E 'CVE-2026-10961[89]'Jeśli polecenie wyświetli wiersze z numerami CVE, poprawka jest zainstalowana. Jeśli wynik jest pusty, przejdź do kroku 2.
Zaktualizuj PHP
Przed aktualizacją wykonaj kopię zapasową strony i bazy danych. Jeśli coś pójdzie nie tak, będziesz mógł szybko przywrócić poprzedni stan.
Ubuntu i Debian
sudo apt update
sudo apt upgradeNastępnie zrestartuj PHP. Zamiast 8.3 wpisz swoją wersję:
sudo systemctl restart php8.3-fpmJeśli strona działa przez Apache, zrestartuj również ten serwer:
sudo systemctl restart apache2AlmaLinux, Rocky Linux, CentOS Stream
sudo dnf upgrade --refresh 'php*'
sudo systemctl restart php-fpm
sudo systemctl restart httpdPanele zarządzania
cPanel. Wersje PHP (pakiety ea-php) są aktualizowane razem z systemem. Uruchom aktualizację przez WHM lub wykonaj polecenie
sudo yum update.ISPmanager, aaPanel, HestiaCP i inne. Zaktualizuj PHP w sekcji zarządzania wersjami PHP w panelu albo za pomocą pakietów systemowych, zgodnie z instrukcją powyżej.
Docker. Zbuduj ponownie obraz z najnowszą wersją PHP i zrestartuj kontener.
Nie zapomnij o restarcie
To najczęstszy błąd. Nowa wersja PHP jest już zainstalowana, ale stara nadal działa w pamięci. To tak, jakby kupić nowy zamek i zostawić go w pudełku. Drzwi nadal chroni stary zamek. Dlatego po aktualizacji koniecznie zrestartuj PHP-FPM i serwer WWW.
Po restarcie otwórz stronę i sprawdź, czy działa prawidłowo.
Dodaj tymczasowe zabezpieczenie
Ten krok warto wykonać u każdego, nawet po aktualizacji. Pomaga on zabezpieczyć serwer przed kolejną luką, dla której nie ma jeszcze poprawki (więcej informacji poniżej).
Najpierw znajdź plik konfiguracyjny PHP. W przypadku stron internetowych zwykle używany jest plik z katalogu fpm:
ls /etc/php/*/fpm/php.iniW AlmaLinux i Rocky Linux plik zazwyczaj znajduje się tutaj: /etc/php.ini.
Otwórz plik i dodaj na końcu wiersz:
session.upload_progress.enabled = 0Jeśli korzystasz z PHP 8.5, dodaj jeszcze jeden wiersz:
fatal_error_backtraces = 0
Zapisz plik i zrestartuj PHP, tak jak opisano w kroku 2.
Co to zmieni na stronie? Prawie nic. Przestanie działać jedynie pasek postępu podczas przesyłania dużych plików, jeśli został zaimplementowany za pomocą funkcji PHP. Większość stron nie korzysta z takiego rozwiązania.
To nie zastępuje aktualizacji. Tymczasowe zabezpieczenie jest jak łańcuch na drzwiach. Utrudnia wejście intruzowi, ale nie zastępuje porządnego zamka. Najpierw zaktualizuj PHP, a potem dodaj to ustawienie.
Jeśli korzystasz z PHP 8.1 lub starszego
Wersje 8.1, 8.0, 7.x i 5.x nie są już wspierane przez twórców PHP. Nie pojawią się dla nich oficjalne poprawki. Takich serwerów nadal jest bardzo dużo — około 70% wszystkich instalacji PHP.
To jak samochód, do którego producent nie dostarcza już części zamiennych. Nadal można nim jeździć, ale każda awaria staje się problemem.
Co możesz zrobić:
Sprawdź pakiety swojej dystrybucji. Niektóre kompilacje otrzymały jednak poprawki. Przykładem są pakiety Ondřeja Surý dla Ubuntu i Debiana (
ppa:ondrej/php) oraz pakiety AlmaLinux. Zaktualizuj system zgodnie z krokiem 2 i sprawdź dziennik zmian opisany w kroku 1.Przejdź na nowszą wersję PHP. To najlepsze rozwiązanie na przyszłość. Starsza strona może jednak nie działać z nowym PHP, dlatego przed migracją należy ją przetestować.
Wykup rozszerzone wsparcie. Na przykład TuxCare udostępnia płatne poprawki dla starszych wersji PHP.
W każdym przypadku koniecznie wykonaj krok 3 i dodaj tymczasowe zabezpieczenie.
Jeśli Twój serwer działa na CentOS 7, poprawki PHP nie będą już dla niego dostępne. Ten system również jest przestarzały. Najlepiej przenieść stronę na AlmaLinux lub Rocky Linux.
Jeszcze dwie informacje, o których rzadko się pisze
Trzecia luka nadal nie ma poprawki. 23 października twórcy PHP poinformowali o kolejnym błędzie: CVE-2026-115560. Występuje on tylko przy rzadko spotykanej konfiguracji strony. Nie będzie dla niego pilnej aktualizacji — poprawka pojawi się w kolejnej planowanej wersji. Zabezpieczenie jest takie samo jak w kroku 3. Jeśli dodano już wiersz session.upload_progress.enabled = 0, serwer jest zabezpieczony przed tym problemem.
W nowych wersjach wykryto kolejne błędy. W wersjach 8.4.27 i 8.5.12 znaleziono dwa problemy związane z pamięcią. Jeden z nich pojawił się właśnie w tej aktualizacji. Nie jest to jednak powód, aby wracać do starszej wersji — jest ona znacznie bardziej niebezpieczna. Po prostu śledź aktualności. Kolejna aktualizacja PHP prawdopodobnie pojawi się w najbliższych tygodniach i również będzie trzeba ją zainstalować.
Wniosek jest prosty: jedna aktualizacja nie wystarczy. O bezpieczeństwo serwera trzeba dbać na bieżąco.
Lista kontrolna
Sprawdziłem wersję PHP za pomocą polecenia
php -vSprawdziłem, czy na serwerze nie ma innych wersji PHP
Wykonałem kopię zapasową strony i bazy danych
Zaktualizowałem PHP do bezpiecznej wersji
Zrestartowałem PHP-FPM i serwer WWW
Dodałem
session.upload_progress.enabled = 0do plikuphp.iniSprawdziłem, czy strona otwiera się i działa prawidłowo
Ustawiłem przypomnienie o sprawdzeniu kolejnej aktualizacji PHP
Nie chcesz zajmować się tym samodzielnie?
Aktualizacja PHP nie jest trudna, jeśli robiłeś to już wcześniej. Czasem jednak sytuacja wygląda inaczej. Aktualizujesz PHP, a strona wyświetla biały ekran. Albo w panelu widzisz trzy wersje PHP i nie wiesz, którą zmienić. Albo strona jest stara i obawiasz się, że ją uszkodzisz.
W takich sytuacjach Zomro oferuje dwa rozwiązania.
SOD: zrobimy wszystko za Ciebie
Wystarczy, że napiszesz do nas, a nasz administrator systemowy sam:
sprawdzi, jakie wersje PHP są zainstalowane na serwerze i z której korzysta strona;
zaktualizuje PHP i zrestartuje usługi;
doda tymczasowe zabezpieczenie;
sprawdzi, czy strona działa po aktualizacji.
Cena: 12,50 € za każde 15 minut pracy. Standardowa aktualizacja PHP zwykle nie zajmuje dużo czasu.
Zamów aktualizację PHP
Premium: szybka pomoc, gdy jej potrzebujesz
Standardowa obsługa zgłoszenia technicznego może potrwać do 10 godzin. Jeśli strona przestanie działać po aktualizacji, takie oczekiwanie może być bardzo kosztowne. Z Premium otrzymasz odpowiedź specjalisty w ciągu 5–30 minut.
Premium to rozwiązanie dla osób, które nie chcą tracić pieniędzy z powodu przestoju strony. Nowe luki w zabezpieczeniach, błędy po aktualizacjach i inne problemy techniczne wymagają szybkiej reakcji. Z Premium możesz liczyć na sprawną pomoc specjalistów, dzięki której szybciej przywrócisz działanie strony i nie będziesz tracić czasu na samodzielne szukanie rozwiązania.


