Bezpieczeństwo danych

Krytyczne luki w PHP: co to oznacza dla stron projektów odbudowy

Nadzwyczajne aktualizacje PHP i pilne ostrzeżenie CERT-EU z 21 października dotyczą każdego, kto prowadzi projekt odbudowy z własną stroną: od portalu programu do strony zbiórki funduszy. Zhakowany zasób projektu to nie tylko awaria techniczna, ale też kwestia zaufania darczyńców i partnerów.

Krytyczne luki w PHP: aktualizacji nie można odkładać — materiał SmartGT
Коротко
  • Co się stało — Ukazały się nadzwyczajne wersje PHP 8.5.12, 8.4.27, 8.3.36 i 8.2.35 — zamykają dwie luki z oceną 9,2 na 10.
  • Dlaczego to ważne — Strona projektu odbudowy to publiczna sprawozdawczość i dane do wpłat. Podmiana na takim zasobie uderza w zaufanie darczyńców, a nie tylko w technikę.
  • Co robić — Sporządzić wykaz zasobów projektu, ustalić wersję PHP każdego z nich, zaktualizować w ramach tej samej gałęzi i zrestartować obsługę.

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: WordPress, Joomla, OpenCart, Bitrix, Laravel. W kontekście odbudowy oznacza to portale programów, strony zbiórek funduszy, rejestry zniszczonego mienia, strony organizacji społecznych i wykonawców — czyli zasoby, w których obok siebie leżą dane osobowe, dokumenty i dane płatnicze.

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łąź PHPBezpieczna wersja
PHP 8.58.5.12
PHP 8.48.4.27
PHP 8.38.3.36
PHP 8.28.2.35
PHP 8.1 i starszebrak 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 zhakowana strona projektu to kwestia zaufania, a nie tylko techniki

Nikt nie szuka waszego projektu osobno. Kiedy przykłady exploitów stają się publiczne — a już są publiczne — w ciągu kilku godzin ruszają automatyczne skanery, które przeczesują cały internet po kolei. Jest im obojętne, czy to portal programu krajowego, czy strona inicjatywy dla jednej gminy: liczy się tylko wersja, którą odpowiada serwer.

Typowe skutki są znane: webshell na serwerze, spam i obca reklama na stronach, domena na czarnych listach, poczta, która przestaje dochodzić. Ale dla projektów odbudowy najdroższe jest coś innego. Po pierwsze, podmiana danych do wpłat — klasyczny scenariusz, w którym stronę ze zbiórką hakuje się nie po to, by ją zepsuć, lecz by po cichu zmienić numer konta. Po drugie, publiczna sprawozdawczość: jeśli dokumenty i liczby można zmienić z zewnątrz, traci sens sama otwartość, na której opiera się zaufanie darczyńców i partnerów.

Po trzecie — dane ludzi. Wnioski, rejestry uszkodzonego mienia i ankiety uczestników programów zwykle leżą na tym samym serwerze co strona.

Co robić — krok po kroku

  1. 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ą.
  2. 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.
  3. 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.
  4. Proszę zrestartować moduły obsługi. Bez restartu php-fpm lub Apache procesy robocze dalej pracują na starym kodzie i aktualizacja faktycznie nie działa.
  5. 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, a upload_max_filesize trzymać niżej;
  • wyłączyć session.upload_progress.enabled i 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


Jeśli w waszym projekcie nie ma osoby odpowiedzialnej za aktualizacje i dostępy, audyt zasobów można zlecić na zewnątrz — w szczególności firmie SmartGT.

Autor materiału — SmartGT. Źródło pierwotne: „Krytyczne luki w PHP: aktualizacji nie można odkładać”.