Krytyczne luki w PHP: ryzyko dla stron gmin, instytucji komunalnych i projektów regionalnych
Nadzwyczajne aktualizacje PHP i pilne ostrzeżenie CERT-EU z 21 października dotyczą wprost cyfrowej infrastruktury gmin: stron rad miejskich, przedsiębiorstw komunalnych, muzeów, bibliotek i projektów regionalnych. Właśnie tam najczęściej działają systemy, których nie aktualizowano latami.

- Co się stało — Ukazały się nadzwyczajne wersje PHP 8.5.12, 8.4.27, 8.3.36 i 8.2.35, które zamykają dwie luki z oceną 9,2 na 10.
- Dlaczego to dotyczy gmin — Strony rad, przedsiębiorstw komunalnych i instytucji kultury najczęściej działają na starych wersjach, których nikt nie utrzymuje.
- Co robić — Sporządzić spis zasobów gminy, ustalić wersję PHP każdego z nich, zaktualizować w ramach gałęzi i ponownie uruchomić procesy obsługi.
21 października 2026 roku zespół PHP wydał nadzwyczajne aktualizacje, a europejski zespół reagowania na incydenty komputerowe CERT-EU opublikował pilne ostrzeżenie. Dwie luki z oceną zagrożenia 9,2 na 10 pozwalają wykonać obcy kod na serwerze bez autoryzacji.
PHP to język, w którym napisana jest większość stron w internecie: WordPress, Joomla, OpenCart, Bitrix, Laravel. W wymiarze regionalnym oznacza to strony rad miejskich i wiejskich, przedsiębiorstw komunalnych, szkół, bibliotek, muzeów i projektów odbudowy — czyli właśnie tę część cyfrowej infrastruktury, która zwykle nie ma ani własnego administratora, ani budżetu na utrzymanie.
Co dokładnie znaleziono
Luk jest dwie, obie ocenione na 9,2 punktu i obie prowadzą do tego samego skutku — wykonania obcego kodu na serwerze bez autoryzacji.
CVE-2026-109618 — awaria przy braku pamięci
W PHP jest ustawienie memory_limit: żądanie, które zużyło zbyt wiele pamięci, jest przerywane siłowo. Problem polega na tym, jak dokładnie zostaje przerwane. PHP może urwać się w momencie, gdy wewnętrzne dane żądania są wypełnione tylko do połowy — na przykład w trakcie analizy pliku przesłanego przez formularz wysyłania. Porządkowanie po takim żądaniu bierze niedokończone dane za prawdziwe i próbuje zwolnić pamięć, której nigdy nie było. A w tej pamięci może leżeć to, co napastnik umieścił tam wcześniejszymi żądaniami.
CVE-2026-109619 — pozostałości poprzedniego żądania
Druga dziura dotyczy tego, że serwer nie do końca „zapomina” poprzedniego odwiedzającego. Stan wewnętrzny, który należał do jednego żądania, czasem przeżywa zwolnienie pamięci — powiedzmy po błędzie krytycznym. Następne żądanie, które trafiło do tego samego procesu roboczego, zdąży skorzystać z tych pozostałości, zanim zwykła inicjalizacja je wyzeruje.
Zagrożona jest każda instalacja PHP obsługująca żądania sieciowe: PHP-FPM, Apache z modułem mod_php, php-cgi, FrankenPHP, LiteSpeed. Za najbardziej ryzykowne zespół PHP uznaje właśnie połączenie Apache z mod_php — jest ono do dziś standardem na wielu tanich hostingach.
Demonstracyjny exploit działa jednym jedynym nieuwierzytelnionym żądaniem — jeszcze przed tym, jak zacznie wykonywać się kod samej strony. Czyli nie pomogą tu ani wtyczki bezpieczeństwa, ani skomplikowane hasła, ani uwierzytelnianie dwuskładnikowe: atak odbywa się o poziom niżej.
Które wersje są zagrożone
Wszystko, co jest niższe od tych wersji, jest podatne:
| Gałąź PHP | Bezpieczna wersja |
|---|---|
| PHP 8.5 | 8.5.12 |
| PHP 8.4 | 8.4.27 |
| PHP 8.3 | 8.3.36 |
| PHP 8.2 | 8.2.35 |
| PHP 8.1 i starsze | brak wsparcia |
Osobną kategorią ryzyka są produkty komercyjne i otwarte, wewnątrz których PHP jest wbudowany, choć z zewnątrz tego nie widać: panele zarządzania, urządzenia sieciowe, systemy monitoringu wideo, portale korporacyjne. Spis takiego oprogramowania prowadzi repozytorium niderlandzkiego NCSC.
Dlaczego to kwestia cyfrowej odporności gminy, a nie pojedynczej strony
Nikt nie szuka osobno strony konkretnej gminy. Gdy przykłady eksploatacji stają się publiczne — a są już publiczne — w ciągu kilku godzin uruchamiają się automatyczne skanery, które przeczesują cały internet po kolei. Jest im obojętne, czy to portal administracji obwodowej, czy strona wiejskiego domu kultury: liczy się tylko wersja, którą odpowiada serwer.
Specyfika sektora publicznego polega na tym, że zasoby rzadko stoją osobno. Strona rady, system wniosków elektronicznych, kalendarz usług i strona przedsiębiorstwa komunalnego często żyją na jednym hostingu i na jednym koncie. Włamując się do najsłabszego z nich, atakujący uzyskuje dostęp do pozostałych — i może dalej nie tylko rozsyłać spam, ale też publikować komunikaty w imieniu organu władzy. Dla gminy to już nie awaria techniczna, lecz utrata zaufania do oficjalnego kanału informowania.
Praktyczny wniosek dla tych, którzy odpowiadają w gminie za obszar cyfrowy: zacząć należy nie od aktualizacji, lecz od spisu — jakie zasoby w ogóle istnieją, na czyim hostingu stoją i kto ma do nich dostęp. Bardzo często okazuje się, że częścią stron od lat nikt się nie zajmuje.
Co robić — krok po kroku
- Proszę sprawdzić swoją wersję. W panelu hostingu to sekcja „Wersja PHP” lub „PHP Selector”; na własnym serwerze — polecenie
php -v. Ważne jest sprawdzenie wersji, na której pracuje sama strona, a nie tej, która stoi w wierszu poleceń: często się różnią. - Proszę zaktualizować w ramach swojej gałęzi. Przejście z 8.2.29 na 8.2.35 to poprawka wewnątrz jednej gałęzi: zgodność zostaje zachowana, strona od tego się nie psuje. Nie należy tego mylić z przejściem z 8.2 na 8.4 — ono już wymaga sprawdzenia.
- Jeśli mają Państwo 8.1 lub starszą — te gałęzie nie mają wsparcia. Z powodu powagi sytuacji zespół bezpieczeństwa PHP wydał minimalne poprawki także dla 7.4, 8.0 i 8.1, a część hostingów utrzymuje własne kompilacje. Właściwym rozwiązaniem jest jednak przeniesienie się na wspieraną gałąź, a lepiej zaplanować je teraz niż następnym razem.
- Proszę zrestartować moduły obsługi. Bez restartu
php-fpmlub Apache procesy robocze dalej pracują na starym kodzie i aktualizacja faktycznie nie działa. - Proszę sprawdzić wynik. Najprościej — tymczasowa strona z
phpinfo(), którą zaraz po sprawdzeniu trzeba usunąć, albo sekcja „Wersja PHP” w panelu po restarcie.
Użytkownicy hostingu najczęściej nie będą musieli robić niczego ręcznie: duzi dostawcy dostali poprawki z wyprzedzeniem i sami aktualizują swoje maszyny. Warto napisać do wsparcia jedną linijkę — „czy PHP zostało zaktualizowane do wersji z 21 października 2026” — i dostać odpowiedź na piśmie.
Jeśli aktualizacja od razu nie jest możliwa
Bywa, że strona jest stara, a aktualizacja wymaga przygotowania. Wtedy są środki tymczasowe, które zwężają okno do ataku:
- zablokować przepełnienie pamięci jako punkt wejścia:
memory_limit=-1, ustawiony tak, by aplikacja nie mogła tego nadpisać, oraz sprawdzenie, że żadna pula ani katalog nie przywraca limitu; - zmniejszyć
post_max_size— 8M dla stron bez wysyłania plików, 32M jeśli wysyłanie jest potrzebne, aupload_max_filesizetrzymać niżej; - wyłączyć
session.upload_progress.enabledi zrestartować wszystkie procesy robocze; - na PHP 8.5 dodatkowo wyłączyć
fatal_error_backtraces; - ograniczyć rozmiar i złożoność żądań na poziomie serwera WWW lub proxy.
Żaden z tych środków nie czyni instalacji bezpieczną. Zamykają one tylko znane drogi — całkowicie problem zamyka wyłącznie aktualizacja.
Jeśli i to jest niemożliwe, CERT-EU doradza proste i niepopularne rozwiązanie: usunąć podatną usługę z publicznego internetu, dopóki poprawka nie zostanie zainstalowana i sprawdzona.
Skąd te dane
- CERT-EU, Security Advisory 2026-018 „Critical Vulnerabilities in PHP”
- Ogłoszenie o wydaniu aktualizacji na php.net
- Techniczny opis CVE-2026-109618 i CVE-2026-109619
Jeśli w gminie lub instytucji nie ma specjalisty odpowiedzialnego za aktualizacje, audyt zasobów można zamówić na zewnątrz — w szczególności w SmartGT.
Autor materiału — SmartGT. Źródło pierwotne: „Krytyczne luki w PHP: aktualizacji nie można odkładać”.
