Dla administratorów: fakty z komunikatów PHP, sprawdzenie obrazów Dockera i błędy starej strony na PHP 8. Nie opisujemy, jak wykorzystać luki. Wersje i daty: stan na listopad 2026.
Fakty (stan na 2026-11)
| Element | Szczegóły |
| Luki | CVE-2026-109618: obsługa braku pamięci przerywa budowę danych żądania, a sprzątanie traktuje je jako poprawne. CVE-2026-109619: stan żądania przeżywa zwolnienie pamięci i używa go kolejne żądanie tego samego workera. |
| Ocena | „Critical”, zdalne wykonanie kodu bez uwierzytelnienia; CVSS 4.0: 9.2 (zapowiedź z 20.10.2026) |
| Zakres | każda instalacja obsługująca żądania WWW: PHP-FPM, mod_php, php-cgi, FrankenPHP, LiteSpeed; exploit pokazany dla mod_php przed kodem aplikacji |
| Poprawki | 21.10.2026: PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35 („update immediately”) |
| Bez wydań | „PHP 8.1 and older no longer receive updates from the PHP project”; dla 7.4, 8.0 i 8.1 tylko minimalne backporty w kodzie źródłowym (dla budujących ze źródeł) i pakiety dostawców LTS |
| Dystrybucje | „Linux distributions and LTS vendors received the patches in advance, so check your vendor for updated packages” |
| Obejście | dla CVE-2026-109619: session.upload_progress.enabled=0 i restart każdego workera, w php.ini, puli FPM albo konfiguracji serwera; nie przez ini_set() ani .user.ini. Według PHP zmniejsza narażenie, ale nie zabezpiecza instalacji. |
| Dalszy ciąg | 23.10.2026: komunikat o CVE-2026-115560 (rzadki wariant przy zmianie session.serialize_handler w czasie działania); zalecane to samo session.upload_progress.enabled=0 do następnego wydania |
Przebieg: 20.10.2026 wyciek szczegółów i zapowiedź; 21.10.2026 ok. 14:00 UTC wydania poprawek, tego samego dnia
pierwsze próby ataków; zalecenie BSI wyłączania stron do aktualizacji; masowe wyłączenia stron instytucji w Europie.
Co sprawdziliśmy
Oficjalne obrazy Dockera (docker run --rm php:<tag>-cli-alpine php -r 'echo PHP_VERSION;', 02.11.2026):
| tag | wersja | poprawka PHP2Shell |
php:7.4 | 7.4.33 | nie (ostatnie wydanie gałęzi) |
php:8.0 | 8.0.30 | nie |
php:8.1 | 8.1.34 | nie |
php:8.2 | 8.2.35 | tak |
php:8.3 | 8.3.36 | tak |
php:8.4 | 8.4.27 | tak |
php:8.5 | 8.5.12 | tak |
Stara strona na PHP 8 (nasze odtworzenie typowej strony z 2018 r.: WordPress 4.9, Elementor 2.x, motyw i wtyczki
z tamtego czasu). PHP 7.4: działa, z ostrzeżeniami o przestarzałych funkcjach. PHP 8.0 i 8.1: wszystkie adresy HTTP 500,
pusta strona, także logowanie:
PHP Fatal error: Uncaught Error: Call to undefined function get_magic_quotes_gpc() in /var/www/html/wp-includes/load.php:651
Ten sam błąd daje WordPress 4.9.35, najnowsze wydanie tej gałęzi. Po aktualizacji samego Elementora strona pada z innego
powodu, przez dodatek z 2018 r.:
PHP Fatal error: Uncaught Error: Class 'Elementor\Scheme_Typography' not found in /var/www/html/wp-content/plugins/essential-addons-for-elementor-lite/elements/fancy-text/fancy-text.php:287
Co nie było oczywiste
- „Bezpieczna stara wersja” nie istnieje. 7.4, 8.0 i 8.1 nie dostały oficjalnych wydań. Obraz
php:7.4 zostaje na
7.4.33 i żadne przebudowanie obrazu tego nie zmieni. Przełączenie niekompatybilnej strony na starsze PHP, żeby
„działała”, oznacza dziś brak poprawki.
- Numer wersji z dystrybucji może kłamać. Dystrybucje i dostawcy LTS dostali łatki wcześniej i nakładają je na swoje
wersje pakietów. O bezpieczeństwie pakietu z systemu decyduje komunikat dostawcy, a nie samo porównanie z „8.2.35”.
- Aktualizacja pakietu to nie koniec. Działające workery PHP-FPM i procesy Apache trzymają stary kod w pamięci; trzeba je
zrestartować. W kontenerach: pobrać nowy obraz i odtworzyć kontener, bo działający kontener zostaje na starej wersji.
- Obejście to nie poprawka.
session.upload_progress.enabled=0 ogranicza jedną ścieżkę ataku i działa tylko ustawione
przed analizą żądania (php.ini, pula FPM); ini_set() i .user.ini są za późno.
- Wtyczki bezpieczeństwa i reguły w aplikacji nie pomogą. Luki działają przy budowaniu danych żądania, zanim uruchomi
się WordPress, więc żadna wtyczka nie zobaczy ataku.
- Wyłączenie strony to nie rozwiązanie. Wiele organizacji wyłączyło strony do czasu aktualizacji; bez nowego PHP strona
musiałaby zostać wyłączona na zawsze.
- Stare strony padają na PHP 8 w całości, razem z panelem, więc nie da się ich „naprawić z panelu”. Często winne są
jednocześnie rdzeń w starej wersji, motyw i dodatki; przy kilku przyczynach naraz przepisanie bywa szybsze niż łatanie.
Rozwiązanie, które proponujemy
- Inwentaryzacja: wersja PHP, źródło pakietu (projekt PHP, dystrybucja, obraz), wersja WordPressa, motyw, wtyczki.
- Kopia strony i test na bezpiecznej wersji PHP (8.2.35+) w środowisku testowym; lista błędów z logu PHP.
- Naprawa błędów zgodności albo, gdy jest ich za dużo, przebudowa 1:1 (przebudowa strony WordPress 1:1).
- Przełączenie produkcji na nowe PHP z restartem wszystkich workerów lub odtworzeniem kontenerów; kontrola wersji
z poziomu strony (Zdrowie witryny) i z serwera.
- Hosting, w którym PHP i serwer są aktualizowane na bieżąco (prowde), albo stała opieka z aktualizacjami.
Rezultaty
| Etykieta | Wartość |
| Bezpieczne wydania PHP (stan na 2026-11) | 8.2.35, 8.3.36, 8.4.27, 8.5.12 lub nowsze |
| Gałęzie bez oficjalnej poprawki | 7.4 (ostatnie 7.4.33), 8.0 (8.0.30), 8.1 (8.1.34) |
| Strona z 2018 r. na PHP 8.0 | wszystkie adresy HTTP 500, także logowanie do panelu |
| Ocena luk | CVSS 4.0: 9.2, bez uwierzytelnienia |
Wnioski
- Po PHP2Shell utrzymywanie strony na PHP bez wsparcia jest ryzykiem, którego nie zastąpi żadna wtyczka.
- Aktualizacja PHP to także test, czy kod strony przetrwał ostatnie lata. Lepiej zrobić go spokojnie niż w dniu kolejnej luki.
- Liczy się cały łańcuch: wersja, źródło pakietu, restart workerów i działająca strona po zmianie.
Źródła
Odczyt źródeł: 02.11.2026. Informacje o wyłączaniu stron w Europie i zaleceniu BSI pochodzą z doniesień medialnych z października 2026 r.