PHP2Shell (CVE-2026-109618, CVE-2026-109619): jak załatać PHP
PHP2Shell to dwie krytyczne luki w samym PHP, obie z oceną 9,2 w CVSS v4.0. Jedno zapytanie bez logowania może uruchomić kod na serwerze. Dotyczy WordPressa, WooCommerce, Magento, Drupala, Joomli, Laravela i Symfony. Instrukcja aktualizacji i pomoc inżyniera.
Dwie luki w silniku PHP pozwalają przejąć serwer jednym zapytaniem, bez logowania i zanim ruszy kod strony. Pomaga tylko nowa wersja PHP na każdym serwerze.
Syntalith
PHP2Shell to dwie krytyczne luki w samym silniku PHP: CVE-2026-109618 i CVE-2026-109619. Według Datadog Security Labs (2026) obie mają ocenę 9,2 w CVSS v4.0, czyli niemal najwyższą w skali do 10. Jedno spreparowane zapytanie, bez logowania, może uruchomić na serwerze kod atakującego, zanim w ogóle ruszy kod strony. Naprawiają je PHP 8.5.12, 8.4.27, 8.3.36 i 8.2.35, wydane 21 października 2026 r.
Według W3Techs (2026) PHP działa na 69,3% stron, których język serwera da się ustalić. Na PHP stoją WordPress i WooCommerce, Magento, PrestaShop i Shopware, Drupal i Joomla, aplikacje na Laravelu, Symfony, Laminas (dawniej Zend Framework) i CodeIgniter. Aktualizacja samej strony czy wtyczek nic tu nie daje. Trzeba podnieść wersję PHP na każdym serwerze, w każdym obrazie kontenera i w każdym potoku wdrożeń.
Co to jest PHP2Shell i jak groźne są te luki
Obie luki siedzą w tym, jak PHP przyjmuje formularze z plikami, czyli zapytania multipart/form-data. PHP robi to sam, zanim przekaże zapytanie do strony.
CVE-2026-109618 uruchamia się, gdy PHP zabraknie pamięci w trakcie zapytania. Część danych zostaje wtedy w niepełnym stanie, a sprzątanie po zapytaniu traktuje je jak poprawne. CVE-2026-109619 polega na tym, że proces PHP zachowuje odwołanie do zwolnionej pamięci, a następne zapytanie w tym samym procesie może jej użyć.
Skutki opisują sami dostawcy chmur. Google Cloud pisze, że przy takiej ocenie atakujący może zawiesić i przejąć system oraz łatwo ukraść, zmienić albo skasować jego dane. Vercel dodaje ujawnienie danych z zapytań innych użytkowników i wyłączenie usługi. Kod uruchomiony przez PHP ma uprawnienia strony: widzi jej pliki konfiguracyjne z hasłami do bazy, bazę klientów i zamówień, klucze do bramek płatności i poczty.
Trzy rzeczy sprawiają, że te luki są wyjątkowo groźne:
- Logowanie nic nie daje. Datadog potwierdził, że PHP przetwarza złośliwe zapytanie, zanim aplikacja je zobaczy. Wystarczy dowolny skrypt PHP, nawet taki, który tylko coś wyświetla.
- Ataki zaczęły się przed poprawką. Według Datadog AWS widział próby wykorzystania PHP2Shell 17 października, 4 dni przed publikacją.
- Exploity są publiczne. VulnCheck uruchomił własny exploit na PHP 8.4.10 do 8.4.26 w konfiguracji produkcyjnej, a Vercel pisze o działających publicznych exploitach.
Co może się stać z Twoją firmą: przykłady
Atakujący, który uruchomi kod na serwerze sklepu albo strony, ma te same możliwości co sama strona. Oto, co może zrobić z niezałatanym PHP:
| Co atakujący może zrobić | Co to znaczy dla firmy |
|---|---|
| Skopiować bazę klientów: imiona, adresy, telefony, e-maile, historię zamówień, skróty haseł | Wyciek danych osobowych, zgłoszenie do UODO, list do każdego klienta |
| Dopisać skrypt do strony płatności, który przechwytuje dane kart | Klienci tracą pieniądze, a sklep traci zaufanie banku i operatora płatności |
| Podmienić numer konta na fakturach albo w mailach z potwierdzeniem zamówienia | Klienci płacą przestępcy, a firma traci przychód |
| Ukraść klucze do bramki płatności, poczty, chmury i API | Rachunki za cudze użycie, wysyłka spamu i phishingu z Waszej domeny |
| Zaszyfrować pliki i bazę i zażądać okupu | Sklep stoi, zamówienia przepadają, odtwarzanie z kopii trwa dni |
| Wgrać na serwer botnet albo koparkę kryptowalut | Serwer atakuje innych z Waszego adresu, a hosting może go wyłączyć |
Ostatni przykład już się zdarza: Sophos widział próby wgrania przez PHP2Shell odmiany botnetu Mirai.
Wyciek danych klientów ma też skutki prawne. Według RODO (2016) firma ma 72 godziny od wykrycia naruszenia na zgłoszenie go organowi nadzorczemu, w Polsce UODO. Według RODO (2016) za naruszenie obowiązków bezpieczeństwa i zgłaszania grozi kara do 10 mln euro albo do 2% całkowitego rocznego obrotu, zależnie od tego, która kwota jest wyższa. Źródło: RODO, rozporządzenie 2016/679, art. 33 i art. 83 ust. 4.
PHP2Shell w liczbach: statystyki 2026
Dane sprawdziliśmy 23 października 2026 r.
- Według W3Techs (2026) PHP działa na 69,3% stron internetowych, których język serwera jest znany.
- Według W3Techs (2026) WordPress, napisany w PHP, obsługuje 39,6% wszystkich stron internetowych.
- Według W3Techs (2026) 26,9% stron na PHP działa na wersji 7, a 7,7% na wersji 5, i żadna z tych gałęzi nie dostanie wydania z poprawką.
- Według Google Cloud (2026) podatne są wszystkie wersje PHP od 5.4 do 8.5.11.
- Według Datadog Security Labs (2026) AWS widział próby ataku PHP2Shell 17 października 2026 r., 4 dni przed publikacją poprawek.
- Według Google Cloud (2026) Google Security Operations dodało 23 nowe reguły wykrywania tego ataku.
Źródła: W3Techs, PHP, W3Techs, WordPress, komunikat PHP, Google Cloud, Datadog Security Labs.
Kogo dotyczy PHP2Shell: sklepy, WordPress, Laravel i hosting
Według komunikatu PHP zagrożona jest każda instalacja, która obsługuje zapytania z sieci: PHP-FPM, Apache z mod_php, php-cgi, FrankenPHP i LiteSpeed. Największe ryzyko PHP widzi przy mod_php. Tam pokazano exploit, w którym jedno zapytanie bez logowania uruchamia atak, zanim ruszy kod aplikacji.
Vercel pisze wprost, że systemy i frameworki zbudowane na PHP są podatne, gdy działają na podatnej wersji PHP. W praktyce to:
| Rodzaj | Przykłady |
|---|---|
| Sklepy internetowe | WooCommerce, Magento, PrestaShop, Shopware |
| Systemy treści | WordPress, Drupal, Joomla |
| Frameworki aplikacji | Laravel, Symfony, Laminas (dawniej Zend), CodeIgniter |
| Hosting | hosting współdzielony, panele typu cPanel, serwery VPS z PHP |
| Narzędzia wewnętrzne | intranety, panele administracyjne, stare skrypty |
Najbardziej narażone są serwery, o których nikt nie pamięta: stara wersja strony, sklep testowy, panel postawiony lata temu. Te działają często na PHP 7 albo 5, a dla nich PHP nie wyda poprawki.
Które wersje PHP są podatne, a które naprawione
| Gałąź PHP | Wersja z poprawką | Status |
|---|---|---|
| 8.5 | 8.5.12 | Wspierana |
| 8.4 | 8.4.27 | Wspierana |
| 8.3 | 8.3.36 | Wspierana |
| 8.2 | 8.2.35 | Wspierana |
| 8.1, 8.0, 7.4 | Brak wydania od PHP | Koniec wsparcia, same poprawki źródłowe |
| 7.3 i starsze, od 5.4 | Brak poprawki | Koniec wsparcia |
Zespół bezpieczeństwa PHP przygotował minimalne poprawki źródłowe dla PHP 7.4, 8.0 i 8.1. Pomagają tylko tym, którzy sami budują PHP ze źródeł. Część dystrybucji Linuksa i dostawców długiego wsparcia wydaje własne paczki, więc sprawdź komunikat swojego dostawcy. PHP ostrzega też użytkowników repozytorium rpms.remirepo.net, które w dniu publikacji nie miało aktualizacji.
Jak załatać PHP2Shell: instrukcja krok po kroku
- Spisz wszystkie miejsca, w których działa PHP: serwery, kontenery, hosting, maszyny w CI, stare strony i panele.
- Sprawdź wersję PHP w każdym z nich, w środowisku, które obsługuje ruch.
- Zaktualizuj PHP do 8.5.12, 8.4.27, 8.3.36 albo 8.2.35, zależnie od gałęzi.
- Przebuduj obrazy kontenerów na obrazie bazowym z poprawką i wdroż je ponownie.
- Zrestartuj wszystkie procesy PHP-FPM i Apache, żeby żaden nie został na starej wersji.
- Sprawdź wersję jeszcze raz, już po wdrożeniu.
- Serwery na PHP 8.1 i starszym przenieś na wspieraną gałąź i sprawdź, czy strona działa po zmianie.
Polecenia do sprawdzenia wersji i restartu:
php -v # serwer lub maszyna wirtualna
php-fpm -v # proces, który obsługuje ruch
docker run --rm <obraz> php -v # każdy obraz kontenera
sudo apt update && sudo apt upgrade # Debian, Ubuntu: paczki z poprawką
sudo systemctl restart php8.3-fpm # restart FPM (nazwa zależy od wersji)
docker build --pull --no-cache -t <obraz> . # przebudowa obrazu na nowej bazie
Na hostingu współdzielonym wersję widać w panelu albo w wyniku phpinfo(). Zapytaj hosting, czy wgrał już poprawkę. Przy Google Cloud wspierane środowiska App Engine standard aktualizują się same, ale App Engine flexible, Cloud Run bez automatycznych aktualizacji obrazu i GKE wymagają przebudowy i ponownego wdrożenia. Wersja na laptopie programisty nic nie mówi o produkcji.
Co zrobić, jeśli nie możesz zaktualizować PHP dziś
PHP opisuje kilka ustawień, które zmniejszają ryzyko na konkretnych ścieżkach ataku. Żadne z nich nie zabezpiecza serwera w pełni, a Datadog sprawdził, że popularne obejście z session.upload_progress.enabled=0 nie chroni w pełni.
- Ustaw
memory_limit=-1tak, żeby aplikacja nie mogła tego zmienić, na przykład przezphp_admin_valuew puli FPM. - Ustaw niski
post_max_size: 8M bez przesyłania plików, 32M z przesyłaniem.upload_max_filesizetrzymaj poniżej tej wartości. - Ustaw
session.upload_progress.enabled=0wphp.inialbo w puli FPM i zrestartuj wszystkie procesy. - Na PHP 8.5 ustaw
fatal_error_backtraces=0i zrestartuj procesy. - Włącz reguły WAF dostawcy. Google Cloud Armor, AWS WAF i Vercel mają już reguły na PHP2Shell.
Te ustawienia dają czas do aktualizacji, którą i tak trzeba zrobić.
Czy PHP2Shell jest już wykorzystywany?
Próby trwają. Vercel pisze o próbach ataków zgłaszanych w całej branży. Sophos w aktualizacji z 22 października widział skanowanie i niewielką liczbę nieudanych prób, w których przestępcy chcieli wgrać na serwer odmianę botnetu Mirai. VulnCheck naliczył setki repozytoriów z rzekomymi exploitami na GitHubie, z których tylko nieliczne działały.
Sophos zauważa, że zbudowanie działającego exploita jest trudne, i dodaje, że z czasem przestępcy mogą je dopracować. Zalecenie się nie zmienia: każdy serwer z podatnym PHP trzeba zaktualizować.
Jak Syntalith pomaga załatać PHP2Shell
Możemy zrobić to za Was, od listy serwerów po sprawdzenie wyniku. Najpierw szukamy PHP na serwerach, w kontenerach, w CI i u dostawców hostingu, także w stronach i panelach, o których zespół zapomniał. Potem podnosimy PHP do wersji z poprawką, przebudowujemy obrazy, wdrażamy usługi ponownie i restartujemy procesy. Strony na PHP 7 i 5 przenosimy na wspieraną gałąź i sprawdzamy, czy sklep, formularze i panel działają po zmianie. Tam, gdzie aktualizacja musi poczekać, ustawiamy reguły WAF i ustawienia z komunikatu PHP.
Na koniec sprawdzamy wersję w środowisku, które obsługuje ruch, i dajemy raport na piśmie: co było podatne, co zaktualizowaliśmy, co zostało i dlaczego. Pracujemy na Waszej infrastrukturze, z dostępami tylko na czas zadania.
Te same kroki robimy u siebie. 23 października przenieśliśmy własną stronę, system rezerwacji i serwer MCP na Node.js 24.22.1 z poprawką luki Node2Shell.
Zacznij od bezpłatnej, 30-minutowej rozmowy z inżynierem. Powiedz, gdzie działa PHP, a my powiemy, od czego zacząć i ile to potrwa. Umów rozmowę.
Ten sam tydzień przyniósł dwa inne pilne problemy: skompromitowane certyfikaty eMudhra i lukę Node2Shell w Node.js.
Najczęstsze pytania
- Co to jest PHP2Shell?
- PHP2Shell to nazwa dwóch krytycznych luk w silniku PHP: CVE-2026-109618 i CVE-2026-109619. Obie mają ocenę 9,2 w CVSS v4.0 i pozwalają uruchomić kod na serwerze bez logowania, zanim zadziała kod aplikacji. PHP opublikował poprawki 21 października 2026 r.
- Które wersje PHP naprawiają PHP2Shell?
- PHP 8.5.12, 8.4.27, 8.3.36 i 8.2.35. Podatne są wszystkie wersje od 5.4 do 8.5.11. PHP 8.1 i starsze nie dostają już wydań od projektu PHP.
- Czy aktualizacja WordPressa albo wtyczek usuwa PHP2Shell?
- Nie usuwa. Luka siedzi w samym PHP, więc trzeba zaktualizować PHP na serwerze, który obsługuje ruch. WordPress, WooCommerce, Magento, Drupal, Joomla, Laravel i Symfony są podatne, gdy działają na podatnej wersji PHP.
- Czy WAF wystarczy zamiast aktualizacji?
- Nie wystarczy. Google Cloud, AWS i Vercel opisują reguły WAF jako zabezpieczenie na czas aktualizacji. Pełną ochronę daje tylko nowa wersja PHP i ponowne wdrożenie usługi.
- Czy Syntalith może załatać nasze serwery PHP?
- Tak. Inżynier spisuje serwery, kontenery i hosting z PHP, aktualizuje je, wdraża ponownie i sprawdza wersję, która naprawdę obsługuje ruch. Zaczynamy od bezpłatnej, 30-minutowej rozmowy.
Aktualizacje bezpieczeństwa
Nie wiesz, czy Wasze serwery są już załatane?
Powiedz inżynierowi w 30 minut, gdzie działają strona, sklep i aplikacje. Spiszemy podatne wersje, zaktualizujemy je, wdrożymy usługi ponownie i sprawdzimy wynik na produkcji.
- Rozmowa z inżynierem
- 0 zł30 minut, plan prac na piśmie w 2 dni robocze
- Zakres
- PHP, Node.js, Go, certyfikatyserwery, kontenery, hosting i CI
- Na koniec
- raport na piśmieco było podatne, co zaktualizowaliśmy, co zostało
Terminy zobaczysz w swojej strefie czasowej.
Poznaj inżynierów, którzy wykonają pracę